快速入门:使用 Bicep 创建 Azure 密钥保管库和密钥

Azure Key Vault 是一项云服务,它为密钥、密码和证书等机密提供了安全的存储。 本快速入门重点介绍部署 Bicep 文件用于创建密钥保管库和密钥的过程。

Bicep 是一种特定于域的语言 (DSL),使用声明性语法来部署 Azure 资源。 它提供简明的语法、可靠的类型安全性以及对代码重用的支持。 Bicep 会针对你的 Azure 基础结构即代码解决方案提供最佳创作体验。

先决条件

若要完成本文,需要做好以下准备:

查阅 Bicep 文件

@description('The name of the key vault to be created.')
param vaultName string

@description('The name of the key to be created.')
param keyName string

@description('The location of the resources')
param location string = resourceGroup().location

@description('The SKU of the vault to be created.')
@allowed([
  'standard'
  'premium'
])
param skuName string = 'standard'

@description('The JsonWebKeyType of the key to be created.')
@allowed([
  'EC'
  'EC-HSM'
  'RSA'
  'RSA-HSM'
])
param keyType string = 'RSA'

@description('The permitted JSON web key operations of the key to be created.')
param keyOps array = []

@description('The size in bits of the key to be created.')
param keySize int = 2048

@description('The JsonWebKeyCurveName of the key to be created.')
@allowed([
  ''
  'P-256'
  'P-256K'
  'P-384'
  'P-521'
])
param curveName string = ''

resource vault 'Microsoft.KeyVault/vaults@2021-11-01-preview' = {
  name: vaultName
  location: location
  properties: {
    accessPolicies:[]
    enableRbacAuthorization: true
    enableSoftDelete: true
    softDeleteRetentionInDays: 90
    enabledForDeployment: false
    enabledForDiskEncryption: false
    enabledForTemplateDeployment: false
    tenantId: subscription().tenantId
    sku: {
      name: skuName
      family: 'A'
    }
    networkAcls: {
      defaultAction: 'Allow'
      bypass: 'AzureServices'
    }
  }
}

resource key 'Microsoft.KeyVault/vaults/keys@2021-11-01-preview' = {
  parent: vault
  name: keyName
  properties: {
    kty: keyType
    keyOps: keyOps
    keySize: keySize
    curveName: curveName
  }
}

output proxyKey object = key.properties

Bicep 文件中定义了两个资源:

可以在 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 纪元之后的秒数)。

部署 Bicep 文件

  1. 将该 Bicep 文件另存为本地计算机上的 main.bicep。

  2. 使用 Azure CLI 或 Azure PowerShell 来部署该 Bicep 文件。

    az group create --name exampleRG --location chinaeast
    az deployment group create --resource-group exampleRG --template-file main.bicep --parameters vaultName=<vault-name> keyName=<key-name>
    

    注意

    将 <vault-name> 替换为密钥保管库的名称。 将<保管库名称>替换为密钥保管库的名称,并将<密钥名称>替换为密钥的名称。

    部署完成后,应会看到一条指出部署成功的消息。

查看已部署的资源

可以使用 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 操作授权。

    通过 ARM 1 创建密钥通过 ARM 2 创建密钥

现有 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 ..."

后续步骤

在本快速入门中,你使用 Bicep 文件创建了密钥保管库和密钥,并验证了部署。 若要详细了解 Key Vault 和 Azure 资源管理器,请参阅以下文章。