使用托管身份在 Azure Key Vault 上设置机密
Setting secret on Azure Keyvault using Managed Identites
我有一个使用 Java Springboot 的应用程序,并且我已经授予从我的托管身份到 KeyVault 的访问权限。
当我尝试使用 java 代码设置新密码时,出现以下错误:
"message":"Failed to set secret - secret-name \nStatus code 401,
"{"error":{"code":"Unauthorized","message":"AKV10032:
Invalid issuer. Expected one of
public void setAzureTokens() {
try{
SecretClient secretClient = new SecretClientBuilder()
.vaultUrl(keyVaultUri)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
secretClient.setSecret(new KeyVaultSecret(key, value));
}
catch (Exception e){
LOG.error("Error during during token update", e);
}
}
我是否需要在 Application.properties 上设置有关租户、clientId 或我的托管身份的任何信息?
正如@Alex 所说,这是一个 cross-tenant 问题,即;当访问 Key Vault 端点的库无法决定使用哪些凭据对您进行身份验证时,就会出现此问题。
解决方案是告诉 DefaultCredentialProvider 使用哪个租户,并且可以使用您可以在 DefaultAzureCredentialOptions() 中传递的选项来完成。
var o = new DefaultAzureCredentialOptions();
o.VisualStudioTenantId = preConfig["AzureTenantId"];
configurationBuilder.AddAzureKeyVault(new Uri(preConfig["KeyVaultName"]), new DefaultAzureCredential(o));
(或)
您可以将 AZURE_TENANT_ID
设置为环境变量,可以像这里一样使用 > Azure Key Vault Secret client library for Java | Microsoft Docs
我有一个使用 Java Springboot 的应用程序,并且我已经授予从我的托管身份到 KeyVault 的访问权限。
当我尝试使用 java 代码设置新密码时,出现以下错误:
"message":"Failed to set secret - secret-name \nStatus code 401, "{"error":{"code":"Unauthorized","message":"AKV10032: Invalid issuer. Expected one of
public void setAzureTokens() {
try{
SecretClient secretClient = new SecretClientBuilder()
.vaultUrl(keyVaultUri)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
secretClient.setSecret(new KeyVaultSecret(key, value));
}
catch (Exception e){
LOG.error("Error during during token update", e);
}
}
我是否需要在 Application.properties 上设置有关租户、clientId 或我的托管身份的任何信息?
正如@Alex 所说,这是一个 cross-tenant 问题,即;当访问 Key Vault 端点的库无法决定使用哪些凭据对您进行身份验证时,就会出现此问题。
解决方案是告诉 DefaultCredentialProvider 使用哪个租户,并且可以使用您可以在 DefaultAzureCredentialOptions() 中传递的选项来完成。
var o = new DefaultAzureCredentialOptions();
o.VisualStudioTenantId = preConfig["AzureTenantId"];
configurationBuilder.AddAzureKeyVault(new Uri(preConfig["KeyVaultName"]), new DefaultAzureCredential(o));
(或)
您可以将 AZURE_TENANT_ID
设置为环境变量,可以像这里一样使用 > Azure Key Vault Secret client library for Java | Microsoft Docs