我正在使用 Azure Key Vault,我正在测试 Azure Resource 的 "托管身份"。长话短说:有了这个功能,我们可以很容易地从(例如)虚拟机、应用程序服务中访问KeyVault的秘密...... 我写了这个简单的代码。
private void GetKeyVaultSecrets()
{
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
var akvCallback = new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback);
var keyVaultClient = new KeyVaultClient(akvCallback);
var secret = keyVaultClient.GetSecretAsync("https://mykeyvault.vault.azure.net/secrets/mySecret").GetAwaiter().GetResult();
string superSecret = secret.Value;
}
我就可以访问我的 "秘密" 未经任何形式的授权. 安全吗?我是不是错过了什么?看上去很奇怪,就这七行代码就能获取你所有的秘密。谢谢你的关注。
如果您在一个具有系统分配的托管身份的服务上运行该功能,以下是实际发生的情况(App服务的例子,VM略有不同)。
在虚拟机上,实例元数据服务是用来获取令牌的。
最主要的是,在实例上运行的任何进程都能够从管理的身份中获取令牌,尽管如果你在实例上运行恶意代码,其他方法也会有麻烦:)
AzureServiceTokenProvider还尝试Visual Studio身份验证以及Azure CLI身份验证,所以如果你登录AZ CLI,它能够为你的用户获取Azure Key Vault的访问令牌并访问它。