快速入门:使用 ARM 模板创建 Azure 密钥保管库和密钥
Azure Key Vault 是一项云服务,它为密钥、密码和证书等机密提供了安全的存储。 本快速入门重点介绍部署 Azure 资源管理器模板(ARM 模板)以创建密钥保管库和密钥的过程。
先决条件
若要完成本文,需要做好以下准备:
查看模板
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vaultName": {
"type": "string",
"metadata": {
"description": "The name of the key vault to be created."
}
},
"keyName": {
"type": "string",
"metadata": {
"description": "The name of the key to be created."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location of the resources"
}
},
"skuName": {
"type": "string",
"defaultValue": "standard",
"allowedValues": [
"standard",
"premium"
],
"metadata": {
"description": "The SKU of the vault to be created."
}
},
"keyType": {
"type": "string",
"defaultValue": "RSA",
"allowedValues": [
"EC",
"EC-HSM",
"RSA",
"RSA-HSM"
],
"metadata": {
"description": "The JsonWebKeyType of the key to be created."
}
},
"keyOps": {
"type": "array",
"defaultValue": [],
"metadata": {
"description": "The permitted JSON web key operations of the key to be created."
}
},
"keySize": {
"type": "int",
"defaultValue": 2048,
"metadata": {
"description": "The size in bits of the key to be created."
}
},
"curveName": {
"type": "string",
"defaultValue": "",
"allowedValues": [
"",
"P-256",
"P-256K",
"P-384",
"P-521"
],
"metadata": {
"description": "The JsonWebKeyCurveName of the key to be created."
}
}
},
"resources": [
{
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2021-11-01-preview",
"name": "[parameters('vaultName')]",
"location": "[parameters('location')]",
"properties": {
"accessPolicies": [],
"enableRbacAuthorization": true,
"enableSoftDelete": true,
"softDeleteRetentionInDays": "90",
"enabledForDeployment": false,
"enabledForDiskEncryption": false,
"enabledForTemplateDeployment": false,
"tenantId": "[subscription().tenantId]",
"sku": {
"name": "[parameters('skuName')]",
"family": "A"
},
"networkAcls": {
"defaultAction": "Allow",
"bypass": "AzureServices"
}
}
},
{
"type": "Microsoft.KeyVault/vaults/keys",
"apiVersion": "2021-11-01-preview",
"name": "[format('{0}/{1}', parameters('vaultName'), parameters('keyName'))]",
"properties": {
"kty": "[parameters('keyType')]",
"keyOps": "[parameters('keyOps')]",
"keySize": "[parameters('keySize')]",
"curveName": "[parameters('curveName')]"
},
"dependsOn": [
"[resourceId('Microsoft.KeyVault/vaults', parameters('vaultName'))]"
]
}
],
"outputs": {
"proxyKey": {
"type": "object",
"value": "[reference(resourceId('Microsoft.KeyVault/vaults/keys', parameters('vaultName'), parameters('keyName')))]"
}
}
}
该模板中定义了以下两个资源:
可以在 Azure 快速入门模板中找到更多 Azure Key Vault 模板示例。
参数和定义
参数 | 定义 |
---|---|
keyOps | 指定可使用该密钥执行的操作。 如果未指定此参数,则可以执行所有操作。 此参数的可接受值是 JSON Web 密钥 (JWK) 规范中定义的一个以逗号分隔的密钥操作列表:["sign", "verify", "encrypt", "decrypt", " wrapKey", "unwrapKey"] |
CurveName | 椭圆曲线 (EC) 密钥类型的 EC 名称。 请参阅 JsonWebKeyCurveName |
Kty | 要创建的密钥类型。 有关有效值,请参阅 JsonWebKeyType |
标记 | 键值对形式的应用程序特定元数据。 |
nbf | 将时间指定为 DateTime 对象,在该时间之前不能使用密钥。 格式为 Unix 时间戳(UTC 时间 1970 年 1 月 1 日 Unix 纪元之后的秒数)。 |
exp | 指定过期时间作为 DateTime 对象。 格式为 Unix 时间戳(UTC 时间 1970 年 1 月 1 日 Unix 纪元之后的秒数)。 |
部署模板
可以使用 Azure 门户、Azure PowerShell、Azure CLI 或 REST API。 要了解部署方法,请参阅部署模板。
查看已部署的资源
可以使用 Azure 门户检查密钥保管库和密钥。 或者,使用以下 Azure CLI 或 Azure PowerShell 脚本列出创建的密钥。
echo "Enter your key vault name:" &&
read keyVaultName &&
az keyvault key list --vault-name $keyVaultName &&
echo "Press [ENTER] to continue ..."
通过 ARM 模板创建密钥不同于通过数据平面创建密钥
通过 ARM 创建密钥
只能创建新密钥。 不能更新现有密钥,也不能创建新版现有密钥。 如果该密钥已存在,则从存储中检索并使用现有密钥(不会执行任何写入操作)。
若要获得使用此 API 的授权,调用方需要执行“Microsoft.KeyVault/vaults/keys/write”基于角色的访问控制 (RBAC) 操作。 内置的“Key Vault 参与者”角色已足够,因为它会对与“Microsoft.KeyVault/*”模式匹配的所有 RBAC 操作授权。
现有 API(通过数据平面创建密钥)
- 可以创建新密钥、更新现有密钥,以及创建新版现有密钥。
- 调用方必须有权使用此 API。 如果保管库使用访问策略,调用方必须具有“创建”密钥权限;如果为 RBAC 启用了保管库,则调用方必须具有“Microsoft.KeyVault/vaults/keys/create/action”RBAC DataAction 权限。
清理资源
其他 Key Vault 快速入门和教程是在本快速入门的基础上制作的。 如果打算继续使用后续的快速入门和教程,则可能需要保留这些资源。 如果不再需要资源组,可以将其删除,这将删除 Key Vault 和相关的资源。 使用 Azure CLI 或 Azure PowerShell 删除资源组:
echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."
后续步骤
在本快速入门中,你使用 ARM 模板创建了密钥保管库和密钥,并验证了部署。 若要详细了解 Key Vault 和 Azure 资源管理器,请参阅以下文章。
- 阅读 Azure Key Vault 概述
- 了解有关 Azure 资源管理器的详细信息
- 请参阅 Key Vault 安全性概述