从运行容器的应用程序服务中读取存储在密钥库中的秘密



我已经创建了一个正在运行容器运行身份服务器的应用程序服务。该容器需要我从钥匙库中加载的证书。要获取证书的内容,我所做的是:

  • 将证书上传到密钥库中
  • 访问键保管库的秘密端点的内容(https://mykeyvault.vault.azure.azure.net/secrets/indentitycert)

在我的第一次尝试中,我只是在应用程序设置中存储秘密的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中,则可以使用。但是,如果我将代码部署到运行容器的应用服务中,则不会。因此,我决定尝试另一种选择,即使用关键保险库参考物品。因此,我创建了一个新的应用程序设置:

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

但这也不起作用。

我启用了应用程序中的托管身份,并将其添加到密钥保险柜中的访问策略中。

如何从钥匙库中获取值?有什么我缺少的吗?

因此,错误是我添加新访问策略的方式。我正在选择授权应用程序的主要ID 。事实证明,我只需要选择本金,而将授权的应用程序作为"无选择"。

最新更新