【发布时间】:2020-08-27 19:16:03
【问题描述】:
我正在寻找一个代码示例,该示例演示如何连接到 Azure 密钥保管库并从保管库中获取机密,而无需以纯文本形式存储凭据,而是使用证书和 SPN 对保管库进行身份验证。有没有人做过类似的事情,谁愿意对此有所了解?
我正在尝试从 azure 安全地检索凭据,而不必在本地保存凭据,事实证明这比我最初想象的要难。
【问题讨论】:
标签: node.js azure azure-keyvault
我正在寻找一个代码示例,该示例演示如何连接到 Azure 密钥保管库并从保管库中获取机密,而无需以纯文本形式存储凭据,而是使用证书和 SPN 对保管库进行身份验证。有没有人做过类似的事情,谁愿意对此有所了解?
我正在尝试从 azure 安全地检索凭据,而不必在本地保存凭据,事实证明这比我最初想象的要难。
【问题讨论】:
标签: node.js azure azure-keyvault
是的,您可以在访问 Azure 密钥保管库时使用基于证书的身份验证。
这是一篇非常好的文章,同样使用 dot net。
Certificate base authentication
或者,Azure Key Vault 提供了一种安全存储凭据和其他密钥和机密的方法,但您的代码需要对 Key Vault 进行身份验证才能检索它们。托管服务标识 (MSI) 通过在 Azure Active Directory (Azure AD) 中为 Azure 服务提供一个自动管理的标识来简化解决此问题的过程。您可以使用此标识向任何支持 Azure AD 身份验证的服务(包括 Key Vault)进行身份验证,而无需在代码中使用任何凭据。
运行 assign-identity 命令为该应用创建身份:
az webapp identity assign --name <app_name> --resource-group "<YourResourceGroupName>"
此命令相当于转到门户并在 Web 应用程序属性中将托管服务标识切换为开启。
为您的应用分配从 Key Vault 读取机密的权限
{
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
}
然后,使用您的 Key Vault 的名称和从上面复制的 PrincipalId 的值运行此命令:
az keyvault set-policy --name '<YourKeyVaultName>' --object-id <PrincipalId> --secret-permissions get
Deploy the Node App to Azure and retrieve the secret value
部署你的 node js 应用程序,之后当你浏览 https://.azurewebsites.net 时,你可以看到秘密值。确保将名称替换为您的保管库名称
【讨论】: