使用 MSI 连接到 Azure Vault
Connection to Azure Vault using MSI
我正在尝试使用 MSI 从控制台应用程序连接到我的 Azure 保管库
对于这个保险库,我已将我的用户添加为选定原则
我用来连接的代码是
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = await keyVaultClient.GetSecretAsync("https://<vaultname>.vault.azure.net/secrets/<SecretName>").ConfigureAwait(false);
我得到以下异常
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException:
Parameters: Connectionstring: [No connection string specified],
Resource: https://vault.azure.net, Authority
- 在虚拟机下的配置blade中启用托管服务标识。
- 搜索 NameOfYourVM 服务主体并将其添加到 访问策略 下的 Key Vault。添加 key/secret/certificate 权限。
- 在您的 Azure VM 上,运行 控制台应用程序。
class Program
{
// Target C# 7.1+ in your .csproj for async Main
static async Task Main()
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = await keyVaultClient.GetSecretAsync(
"https://VAULT-NAME.vault.azure.net/secrets/SECRET-NAME");
Console.WriteLine(secret.Value);
Console.ReadLine();
}
}
在本地 运行,创建您自己的 Azure AD 应用程序注册(Web App/Web API 类型使其成为机密客户端),将其添加到Key Vault 并在获取访问令牌时使用其 client_id 和 client_secret —
https://docs.microsoft.com/en-us/azure/key-vault/key-vault-use-from-web-application#gettoken
正如评论中提到的 Varun,现在有一种更好的方法可以在 运行 在本地访问令牌而不暴露服务主体时获取访问令牌 —
到 运行 本地。
- 安装 Azure Cli
- 打开WindowsPowershell
- 写
az login
命令(它会给出一个 url 和代码)
- 打开 Url 并输入 az login
提供的代码
然后像这样获取秘密值
var secret = await keyVaultClient.GetSecretAsync("https://VAULT-NAME.vault.azure.net/secrets/SECRET-NAME");
secret.Value; //your secret.
上面已经给出了正确答案,这里再补充一个:-)
Azure MSI 应用 App Service & Vault
为您的应用服务启用系统分配的托管标识,检查设置下的标识部分。
在保管库下添加策略
在后面配置你的代码
我正在尝试使用 MSI 从控制台应用程序连接到我的 Azure 保管库
对于这个保险库,我已将我的用户添加为选定原则
我用来连接的代码是
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = await keyVaultClient.GetSecretAsync("https://<vaultname>.vault.azure.net/secrets/<SecretName>").ConfigureAwait(false);
我得到以下异常
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: Parameters: Connectionstring: [No connection string specified], Resource: https://vault.azure.net, Authority
- 在虚拟机下的配置blade中启用托管服务标识。
- 搜索 NameOfYourVM 服务主体并将其添加到 访问策略 下的 Key Vault。添加 key/secret/certificate 权限。
- 在您的 Azure VM 上,运行 控制台应用程序。
class Program
{
// Target C# 7.1+ in your .csproj for async Main
static async Task Main()
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = await keyVaultClient.GetSecretAsync(
"https://VAULT-NAME.vault.azure.net/secrets/SECRET-NAME");
Console.WriteLine(secret.Value);
Console.ReadLine();
}
}
在本地 运行,创建您自己的 Azure AD 应用程序注册(Web App/Web API 类型使其成为机密客户端),将其添加到Key Vault 并在获取访问令牌时使用其 client_id 和 client_secret —
https://docs.microsoft.com/en-us/azure/key-vault/key-vault-use-from-web-application#gettoken
正如评论中提到的 Varun,现在有一种更好的方法可以在 运行 在本地访问令牌而不暴露服务主体时获取访问令牌 —
到 运行 本地。
- 安装 Azure Cli
- 打开WindowsPowershell
- 写
az login
命令(它会给出一个 url 和代码) - 打开 Url 并输入 az login 提供的代码
然后像这样获取秘密值
var secret = await keyVaultClient.GetSecretAsync("https://VAULT-NAME.vault.azure.net/secrets/SECRET-NAME");
secret.Value; //your secret.
上面已经给出了正确答案,这里再补充一个:-)
Azure MSI 应用 App Service & Vault
为您的应用服务启用系统分配的托管标识,检查设置下的标识部分。
在保管库下添加策略
在后面配置你的代码