管理模板中的机密
在部署期间将安全值(例如密码)作为参数传递时,可以从 Azure Key Vault 检索该值。
在参数文件中引用 Key Vault 和机密。
该值永远不会公开,因为只会引用其 Key Vault ID。
Key Vault 可以存在于与将其部署到的资源组不同的订阅中。
部署 Key Vault 和机密
若要创建 Key Vault 和机密,请使用 Azure CLI 或 PowerShell。
若要从资源管理器部署访问此 Key Vault 中的机密,Key Vault 属性“enabledForTemplateDeployment”必须为 true。
使用 Azure CLI
以下代码片段是一个示例,说明如何使用 Azure CLI 部署 Key Vault 和机密:
keyVaultName='{your-unique-vault-name}'
resourceGroupName='{your-resource-group-name}'
location='centralus'
userPrincipalName='{your-email-address-associated-with-your-subscription}'
# Create a resource group
az group create --name $resourceGroupName --location $location
# Create a Key Vault
az keyvault create \
--name $keyVaultName \
--resource-group $resourceGroupName \
--location $location \
--enabled-for-template-deployment true
az keyvault set-policy --upn $userPrincipalName --name $keyVaultName --secret-permissions set delete get list
# Create a secret with the name, vmAdminPassword
password=$(openssl rand -base64 32)
echo $password
az keyvault secret set --vault-name $keyVaultName --name 'vmAdminPassword' --value $password
启用密钥访问权限
除了将 Key Vault 属性“enabledForTemplateDeployment”设置为 true 之外,部署模板的用户必须对 Key Vault 范围具有 Microsoft.KeyVault/vaults/deploy/action
权限。
此外,还包括资源组和 Key Vault。 所有者和参与者角色均授予该访问权限。
如果你创建 Key Vault,你就是所有者,因此你本身就有权限。
但是,如果 Key Vault 位于不同的订阅下,则 Key Vault 的所有者必须授予访问权限。
通过静态 ID 引用机密
Key Vault 在参数文件中引用,而不是在模板中引用。
下图显示了参数文件如何引用机密并将该值传递到模板。
以下模板部署包含管理员密码的 SQL 数据库。
密码参数设置为安全字符串。 但是,模板未指定该值的来源:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminLogin": {
"type": "string"
},
"adminPassword": {
"type": "securestring"
},
"sqlServerName": {
"type": "string"
}
},
"resources": [
{
"name": "[parameters('sqlServerName')]",
"type": "Microsoft.Sql/servers",
"apiVersion": "2015-05-01-preview",
"location": "[resourceGroup().location]",
"tags": {},
"properties": {
"administratorLogin": "[parameters('adminLogin')]",
"administratorLoginPassword": "[parameters('adminPassword')]",
"version": "12.0"
}
}
],
"outputs": {
}
}
现在你可以为前面的模板创建一个参数文件。 在参数文件中,指定一个与模板中参数名称匹配的参数。
对于参数值,请引用 Key Vault 中的机密。 可以通过传递 Key Vault 的资源标识符和机密的名称来引用机密。
Key Vault 机密必须已存在于以下参数文件中,并且你为其资源 ID 提供静态值。
在本地复制此文件,并设置订阅 ID、保管库名称和 SQL 服务器名称:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminLogin": {
"value": "exampleadmin"
},
"adminPassword": {
"reference": {
"keyVault": {
"id": "/subscriptions/<subscription-id>/resourceGroups/examplegroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
},
"secretName": "examplesecret"
}
},
"sqlServerName": {
"value": "<your-server-name>"
}
}
}
需要部署模板并将参数文件传递给模板。
有关详细信息,请参阅在部署过程中使用 Azure Key Vault 传递安全参数值。
此网页中还提供了一些详细信息,用于引用具有动态 ID 的机密。