Краткое руководство: Создание хранилища ключей Azure и добавление ключа с помощью Bicep

Azure Key Vault — это облачная служба, которая предоставляет безопасное хранилище секретов, таких как ключи, пароли и сертификаты. В этом кратком руководстве по быстрому началу работы описан процесс развертывания Bicep-файла для создания хранилища ключей (Key Vault) и ключа.

Bicep — это предметно-ориентированный язык (DSL), который использует декларативный синтаксис для развертывания ресурсов Azure. Он обеспечивает краткий синтаксис, надежную безопасность типов и поддержку повторного использования кода. Bicep предлагает лучшие возможности для разработки решений Azure типа "инфраструктура как код".

Предпосылки

Чтобы завершить эту статью, выполните указанные ниже действия.

  • Если у вас нет подписки на Azure, создайте бесплатную учетную запись перед началом.
  • Пользователю необходимо, чтобы ему была назначена встроенная роль Azure, рекомендуется роль Contributor. Дополнительные сведения см. здесь.

Проверьте файл Bicep

Шаблон, используемый в этом кратком руководстве, взят из шаблонов быстрого запуска Azure.

@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@2023-07-01' = {
  name: vaultName
  location: location
  properties: {
    enableRbacAuthorization: true
    enableSoftDelete: true
    softDeleteRetentionInDays: 90
    enablePurgeProtection: true
    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@2023-07-01' = {
  parent: vault
  name: keyName
  properties: {
    kty: keyType
    keyOps: keyOps
    keySize: keySize
    curveName: curveName
  }
}

output proxyKey object = key.properties
output location string = location
output name string = vault.name
output resourceGroupName string = resourceGroup().name
output resourceId string = vault.id

В файле Bicep определены два ресурса:

Дополнительные примеры шаблонов Azure Key Vault можно найти в шаблонах быстрого запуска Azure.

Параметры и определения

Параметр Definition
keyOps Указывает операции, которые можно выполнять с помощью ключа. Если этот параметр не указан, все операции можно выполнить. Допустимые значения для этого параметра — это разделенный запятыми список ключевых операций, определенных спецификацией веб-ключа JSON (JWK):
["sign", "verify", "encrypt", "decrypt", " wrapKey", "unwrapKey"]
Имя кривой Название эллиптической кривой (EC) для типа ключа EC. См. jsonWebKeyCurveName
Kty Тип создаваемого ключа. Допустимые значения см. в разделе JsonWebKeyType
Теги Метаданные, относящиеся к приложению, в виде пар "ключ-значение".
nbf Указывает время в качестве объекта DateTime, перед которым не удается использовать ключ. Формат будет в виде метки времени Unix (количество секунд после эпохи Unix, начиная с 1 января 1970 г., по UTC).
exp Указывает время окончания срока действия в качестве объекта DateTime. Формат будет в виде метки времени Unix (количество секунд после эпохи Unix, начиная с 1 января 1970 г., по UTC).

Разверните BICEP-файл

  1. Сохраните файл Bicep с именем main.bicep на локальном компьютере.

  2. Разверните файл Bicep с помощью Azure CLI или Azure PowerShell.

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

    Замечание

    Замените <vault-name> именем хранилища ключей. Замените <vault-name> именем хранилища ключей и замените <key-name> его именем.

    После завершения развертывания должно отобразиться сообщение о том, что развертывание успешно выполнено.

Назначьте роль RBAC для Key Vault

Хранилище ключей, созданное этим файлом Bicep, использует Azure RBAC для авторизации. Чтобы получить доступ к ключам через плоскость данных (например, с помощью Azure CLI или Azure PowerShell), необходимо назначить себе соответствующую роль.

echo "Enter your key vault name:" &&
read keyVaultName &&
az role assignment create --role "Key Vault Crypto Officer" \
    --assignee-object-id $(az ad signed-in-user show --query id -o tsv) \
    --scope $(az keyvault show --name $keyVaultName --query id -o tsv)

Замечание

Изменения в назначении ролей могут вступить в силу через одну-две минуты.

Проверка развернутых ресурсов

Портал 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" управление доступом на основе ролей (Azure RBAC). Встроенная роль 'Key Vault Contributor' достаточна, так как она авторизует все действия Azure RBAC, которые совпадают с шаблоном "Microsoft.KeyVault/*".

    Создайте ключ с помощью ARM 1 Создайте ключ с помощью ARM 2

Существующий API (создание ключа с помощью плоскости данных)

  • Можно создать новые ключи, обновить существующие ключи и создать новые версии существующих ключей.
  • Вызывающий объект должен быть авторизован для использования этого API. Если хранилище использует политики доступа, вызывающий объект должен иметь разрешение на создание ключа; Если хранилище включено для Azure RBAC, вызывающий объект должен иметь "Microsoft.KeyVault/vaults/key/create/action" Azure RBAC DataAction.

Очистите ресурсы

Другие краткие руководства и учебные материалы по Key Vault основаны на этом кратком руководстве. Если вы планируете продолжить работу с последующими быстрыми стартами и руководствами, вы можете пожелать оставить эти ресурсы на месте. При отсутствии необходимости удалите группу ресурсов, которая удаляет Хранилище ключей и связанные ресурсы. Чтобы удалить группу ресурсов с помощью Azure CLI или Azure PowerShell, выполните следующие действия.

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

Замечание

При удалении группы ресурсов также удаляется хранилище ключей, но затем оно переходит в состояние обратимого удаления и может быть восстановлено в течение срока хранения (по умолчанию 90 дней). Имя хранилища остается зарезервированным глобально в течение этого периода, и поскольку защита очистки включена, хранилище не может быть удалено рано. Для стандартных хранилищ ключей плата за хранилища, помеченные как обратимо удаленные, не взимается. Дополнительные сведения см. в разделе Обзор обратимого удаления в Key Vault.

Дальнейшие шаги

В этом быстром старте вы создали хранилище ключей и ключ с помощью Bicep-файла и проверили его развертывание. Дополнительные сведения о Key Vault и Azure Resource Manager см. в следующих статьях.