我正在尝试使用本地服务主体凭据从本地访问 Azure Key Vault 以进行开发。
但 Azure SDK 似乎始终在检查 IMDS 连接(“169.254.169.254”)
我用来检索 secret 的代码:
SecretClient secretClient = new SecretClientBuilder()
.vaultUrl(keyVaultUri)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
我还添加了以下变量作为环境变量:
- AZURE_CLIENT_ID
- AZURE_CLIENT_SECRET
- AZURE_TENANT_ID
有人可以帮我解决如何使用 java 中的服务原理从本地访问 Azure 资源(例如 key 保管库)
最佳答案
要使用服务主体在本地进行身份验证,只需使用 ClientSecretCredential
.
示例:
import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
public class vacate {
public static void main(String[] args) {
String clientId="xxxxxx";
String clientSecret="xxxxxx";
String tenantId="xxxxxx";
ClientSecretCredential credential1 = new ClientSecretCredentialBuilder()
.tenantId(tenantId)
.clientId(clientId)
.clientSecret(clientSecret)
.build();
SecretClient secretClient = new SecretClientBuilder()
.vaultUrl("<your-key-vault-url>")
.credential(credential1)
.buildClient();
//do other things
}
}
实际上,我认为您使用的 DefaultAzureCredential
也应该可以工作,它会尝试在 following order 中创建有效的凭据。 ,如果你已经正确设置了环境变量,它应该可以工作,如果没有,只需像上面那样使用 ClientSecretCredential
,它就会工作。
关于java - 访问 Azure Key Vault 进行本地开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66564623/