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

问题描述 投票:0回答:1

我创建了一个运行运行Identity Server的容器的App Service。此容器需要我从Key Vault加载的证书。为了获得证书的内容,我所做的是:

在我的第一次尝试中,我只在App Settings中存储了秘密的URI,并尝试使用以下代码获取值:

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)));

如果我将代码部署到VM中,则此方法有效。但是,如果我将代码部署到运行容器的App Service中,则不会。所以我决定尝试使用Key Vault引用的另一个选项。所以,我已经创建了一个新的App Settings,如下所示:

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

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

var certificateContent = Env.GetString("CERTIFICATE_CONTENT");

identityServerBuilder.AddSigningCredential(new X509Certificate2(Convert.FromBase64String(certificateContent)));

但这也不起作用。

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

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

azure azure-web-app-service azure-keyvault
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.