gpt4 book ai didi

java - 无法在java上使用keyvault列出azure blob存储中的文件

转载 作者:行者123 更新时间:2023-12-03 00:17:35 25 4
gpt4 key购买 nike

所以我尝试列出 Azure Blob 存储中的文件。我可以使用 Blob 存储中的连接字符串或访问 key 来执行此操作,但我不希望它在代码中泄漏,因此我尝试在访问 key 上实现 Azure Keyvault,但现在收到身份验证错误(是的,我确实有足够的权限,因为我可以在没有 keystore 的情况下运行它)。有没有我一直在尝试但尚未找到解决方案的解决方法。

这是我使用的代码片段

package org.example;
import com.azure.storage.common.StorageSharedKeyCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
import com.azure.storage.blob.BlobContainerClient;
import com.azure.storage.blob.BlobServiceClient;
import com.azure.storage.blob.BlobServiceClientBuilder;
import com.azure.storage.blob.models.BlobItem;

public class ListKeyVaultSecrets {
public static void main(String[] args) {

String accountName = "";
String containerName = "";
String secretName = "";
String keyVaultUrl = "";


SecretClient secretClient = new SecretClientBuilder()
.vaultUrl(keyVaultUrl)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();



KeyVaultSecret secret = secretClient.getSecret(secretName); ## the error is here###
String accountKey = secret.getValue(); ###################

BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint(String.format("https://%s.blob.core.windows.net", accountName))
.credential(new StorageSharedKeyCredential(accountName, accountKey))
.buildClient();


BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName);


for (BlobItem blobItem : containerClient.listBlobs()) {
System.out.println(blobItem.getName());
}
}
}



最后我得到了这个错误:

[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential EnvironmentCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential ManagedIdentityCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential SharedTokenCacheCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] ERROR com.azure.identity.implementation.WindowsCredentialAccessor - Elemento não encontrado.
[ForkJoinPool.commonPool-worker-1] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential IntelliJCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] ERROR com.azure.identity.implementation.IdentityClient - 'az' n�o � reconhecido como um comando internoou externo, um programa oper�vel ou um arquivo em lotes.
[ForkJoinPool.commonPool-worker-1] ERROR com.azure.identity.implementation.IdentityClient - 'az' n�o � reconhecido como um comando internoou externo, um programa oper�vel ou um arquivo em lotes.
[ForkJoinPool.commonPool-worker-1] ERROR com.azure.core.implementation.AccessTokenCache - Failed to acquire a new access token.
[parallel-1] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential EnvironmentCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential ManagedIdentityCredential is unavailable.
[ForkJoinPool.commonPool-worker-2] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential SharedTokenCacheCredential is unavailable.
[ForkJoinPool.commonPool-worker-2] ERROR com.azure.identity.implementation.WindowsCredentialAccessor - Elemento não encontrado.
[ForkJoinPool.commonPool-worker-2] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential IntelliJCredential is unavailable.
[ForkJoinPool.commonPool-worker-2] ERROR com.azure.identity.implementation.IdentityClient - 'az' n�o � reconhecido como um comando internoou externo, um programa oper�vel ou um arquivo em lotes.
[ForkJoinPool.commonPool-worker-2] ERROR com.azure.identity.implementation.IdentityClient - 'az' n�o � reconhecido como um comando internoou externo, um programa oper�vel ou um arquivo em lotes.
[ForkJoinPool.commonPool-worker-2] ERROR com.azure.core.implementation.AccessTokenCache - Failed to acquire a new access token.
[parallel-2] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential EnvironmentCredential is unavailable.
[ForkJoinPool.commonPool-worker-2] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential ManagedIdentityCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential SharedTokenCacheCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] ERROR com.azure.identity.implementation.WindowsCredentialAccessor - Elemento não encontrado.
[ForkJoinPool.commonPool-worker-1] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential IntelliJCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] ERROR com.azure.identity.implementation.IdentityClient - 'az' n�o � reconhecido como um comando internoou externo, um programa oper�vel ou um arquivo em lotes.
[ForkJoinPool.commonPool-worker-1] ERROR com.azure.identity.implementation.IdentityClient - 'az' n�o � reconhecido como um comando internoou externo, um programa oper�vel ou um arquivo em lotes.
[ForkJoinPool.commonPool-worker-1] ERROR com.azure.core.implementation.AccessTokenCache - Failed to acquire a new access token.
[parallel-3] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential EnvironmentCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential ManagedIdentityCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential SharedTokenCacheCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] ERROR com.azure.identity.implementation.WindowsCredentialAccessor - Elemento não encontrado.
[ForkJoinPool.commonPool-worker-1] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential IntelliJCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] ERROR com.azure.identity.implementation.IdentityClient - 'az' n�o � reconhecido como um comando internoou externo, um programa oper�vel ou um arquivo em lotes.
[ForkJoinPool.commonPool-worker-1] ERROR com.azure.identity.implementation.IdentityClient - 'az' n�o � reconhecido como um comando internoou externo, um programa oper�vel ou um arquivo em lotes.
[ForkJoinPool.commonPool-worker-1] ERROR com.azure.core.implementation.AccessTokenCache - Failed to acquire a new access token.
[main] ERROR com.azure.core.http.policy.RetryPolicy - {"az.sdk.message":"Retry attempts have been exhausted.","exception":"DefaultAzureCredential authentication failed. ---> AzureCliCredential authentication failed. Error Details: 'az' n�o � reconhecido como um comando internoou externo, um programa oper�vel ou um arquivo em lotes.","tryCount":3}
[main] ERROR com.azure.core.http.policy.RetryPolicy - DefaultAzureCredential authentication failed. ---> AzureCliCredential authentication failed. Error Details: 'az' n�o � reconhecido como um comando internoou externo, um programa oper�vel ou um arquivo em lotes.
[main] ERROR com.azure.core.implementation.http.rest.RestProxyBase - DefaultAzureCredential authentication failed. ---> AzureCliCredential authentication failed. Error Details: 'az' n�o � reconhecido como um comando internoou externo, um programa oper�vel ou um arquivo em lotes.

I've tried most of the solutions on the documentation but it doesnt seem to work for some reason.

最佳答案

我在我的环境中进行了尝试并得到了以下结果:

ERROR com.azure.core.http.policy.RetryPolicy -{"az.sdk.message":"Retry attempts have beenexhausted.","exception":"DefaultAzureCredential authentication failed. ---> AzureCliCredential authentication failed. Error Details: 'az' n o reconhecido como um comando internoou externo, um programa oper vel ou um arquivo em lotes.","tryCount":3}

当您尝试使用各种凭据(包括 EnvironmentCredential、ManagedIdentityCredential、SharedTokenCacheCredential 和 IntelliJCredential)进行身份验证时,会出现上述错误。尽管如此,它们都不可用或无法进行身份验证,而且 az 命令尚未安装。

您可以使用此 MS-DOCS 安装 az cli 命令在终端中运行代码之前,您需要使用 az login 命令。

您可以使用以下代码从 Azure Blob 存储获取文件列表,而无需使用连接字符串和帐户 key 。

代码:

import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.storage.blob.BlobContainerClient;
import com.azure.storage.blob.BlobServiceClient;
import com.azure.storage.blob.BlobServiceClientBuilder;
import com.azure.storage.blob.models.BlobItem;

public class App {
public static void main(String[] args) {

String containerName = "test2";
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder().build();
// Azure SDK client builders accept the credential as a parameter
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint("https://<storageaccountname>.blob.core.windows.net/")
.credential(defaultCredential)
.buildClient();
BlobContainerClient containerClient = blobServiceClient.getBlobContainerClient(containerName);
for (BlobItem blobItem : containerClient.listBlobs()) {
System.out.println(blobItem.getName());
}
}
}

输出:

enter image description here

此外,您需要存储 Blob 数据贡献者角色才能访问 Azure Blob 存储中的数据。

引用: Quickstart: Azure Blob Storage library - Java | Microsoft Learn

关于java - 无法在java上使用keyvault列出azure blob存储中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76009638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com