从运行容器的App Service读取存储在Key Vault中的机密

时间:2019-03-11 15:57:02

标签: azure azure-web-app-service azure-keyvault

我创建了一个应用程序服务,该服务正在运行一个运行Identity Server的容器。该容器需要我从Key Vault加载的证书。要获取证书的内容,我要做的是:

我的第一次尝试是在应用程序设置中仅存储密钥的URI,然后尝试使用以下代码获取值:

from tkinter import *

top_level = Tk()

n = 5
label_list = []

for i in range(n):
    label_list.append(Label(top_level, text = "Text"))
    label_list[i].pack()

for i in range(n):
    label_list[i].config(text="Text {}".format(i))

top_level.mainloop()

如果我将代码部署到VM中,这将起作用。但是,如果我将代码部署到运行容器的App Service中,则不会。因此,我决定尝试另一种选择,即使用Key Vault参考资料。因此,我创建了一个新的应用程序设置,如下所示:

var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
                    new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

var cert = keyVaultClient
    .GetSecretAsync(
        Env.GetString("CERTIFICATE_KEY_VAULT_KEY"))
    .ConfigureAwait(false).GetAwaiter().GetResult();

identityServerBuilder.AddSigningCredential(new X509Certificate2(Convert.FromBase64String(cert.Value)));

然后在我的代码中使用此值:

CERTIFICATE_CONTENT = @Microsoft.KeyVault(SecretUri=https://mykeyvault.vault.azure.net/secrets/IdentityCert/5221036c6b734d5fa69cba29976a8592)

但这也不起作用。

我已在App Service中启用了托管身份,并将其添加到密钥保管箱中的访问策略中。

如何从Key Vault获得价值?有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

所以,错误是我添加新访问策略的方式。我正在选择主体ID 授权的应用程序。事实证明,我只需要选择主体,将“授权”应用程序保留为“未选择”。