在我们的项目中,我们不使用应用程序注册,而是使用 Azure 中的企业应用程序。
我正在尝试在本地开发(.NET Core)中从 Azure Key Vault 访问一个秘密,这需要
DefaultAzureCredential
而这又使用环境变量,即 AZURE_CLIENT_ID, AZURE_CLIENT_SECRET/AZURE_CLIENT_CERTIFICATE_PATH
和 AZURE_TENANT_ID
。 AZURE_CLIENT_SECRET
仅出现在应用程序注册中。
是否可以使用企业应用程序设置环境变量?
如果没有,有没有办法使用 .NET Core 访问 Azure Key Vault 中的秘密?
无论如何,当我们想要访问 Azure KeyVault 秘密时,我们必须授予访问策略。我们可以为 Azure AD 应用程序、特定用户/组和一般的 ManagedIdentity 实例授予访问策略。
当我们想使用
DefauleAzureCredential
时,我们可以选择为Azure AD应用程序设置client id/client secret/tenant id
,因为你没有客户端密码,也许这对你不可用。然后我们也可以使用用户凭证,我觉得我们在本地测试代码的时候用这个很好,只需要我们做的是adding access policy for a user
,然后sign in Visual Studio with that user
,然后我们就可以简单地获得访问权限通过以下代码进行保管库秘密:
public async Task<string> IndexAsync()
{
const string secretName = "clientsecret";
var kvUri = "https://keyvaultname.vault.azure.net/";
var a = new DefaultAzureCredential();
var client = new SecretClient(new Uri(kvUri), a);
var secret = await client.GetSecretAsync(secretName);
string secretVaule = secret.Value.Value;
return secretVaule ;
}
我们也可以使用 ManagedIdentity,但这需要应用托管在 Azure 中。就跟着这个官方文档。它还包含文档中的示例。
builder.Configuration.AddAzureKeyVault(
new Uri("https://vaultName.vault.azure.net/"),
new DefaultAzureCredential(
new DefaultAzureCredentialOptions { ManagedIdentityClientId = "userManagedIdentityClientId" }//required when using user ManagedIdentity
));