我现在考虑的方式是“在运行容器的 VM 之上应用托管服务标识 (MSI)”。
这篇文章谈到了它:
https://banzaicloud.com/blog/azure-msi-role/
这里的关键是……一旦创建了kubernetes类型的VM,就可以手动进去开启Managed-Service-Identity能力。
转到VM(kubernetes创建的......可能有超过1个VM)......
单击“配置”选项卡。
在我做这个神奇的开启之前......文字内容如下:
"Managed Service Identity"
"Register with Azure Activity Directory"
and a bug NO/YES push button.
在我打开这个魔法之后,它会显示:
Just-in-time access
To improve security, enable a just-in-time access policy.
Upgrade your Azure Security Center subscription to the standard tier
现在,这有点启用使用托管服务身份的能力。
然后你必须将一些托管服务标识映射到实际的 VM。
我仍在研究这个............所以当我了解更多信息时,我会尝试更新这个答案。
但理论上是,一旦 MSI “应用于 VM”,VM(应用程序代码)将能够获得一个 Token,如下面的代码所示。
var azureServiceTokenProvider = new AzureServiceTokenProvider();
这是一个更大的示例代码大小......(从上面的 chu.ca 站点链接复制并粘贴)(但以防万一该链接失效)
Microsoft.Azure.Services.AppAuthentication package.
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((ctx, builder) =>
{
var keyVaultEndpoint = GetKeyVaultEndpoint();
if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
builder.AddAzureKeyVault(
keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
}
})
.UseStartup<Startup>()
.Build();
private static string GetKeyVaultEndpoint() => Environment.GetEnvironmentVariable("KEYVAULT_ENDPOINT");
我还没有看到如何赋予 MSI“读取 KeyVault 的权利”……这仍在进行中。