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

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

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

Предпосылки

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

Просмотрите файл Bicep

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

@description('Specifies the name of the key vault.')
param keyVaultName string

@description('Specifies the Azure location where the key vault should be created.')
param location string = resourceGroup().location

@description('Specifies whether Azure Virtual Machines are permitted to retrieve certificates stored as secrets from the key vault.')
param enabledForDeployment bool = false

@description('Specifies whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys.')
param enabledForDiskEncryption bool = false

@description('Specifies whether Azure Resource Manager is permitted to retrieve secrets from the key vault.')
param enabledForTemplateDeployment bool = false

@description('Specifies the Azure Active Directory tenant ID that should be used for authenticating requests to the key vault. Get it by using Get-AzSubscription cmdlet.')
param tenantId string = subscription().tenantId

@description('Specifies whether the key vault is a standard vault or a premium vault.')
@allowed([
  'standard'
  'premium'
])
param skuName string = 'standard'

@description('Specifies all secrets {"secretName":"","secretValue":""} wrapped in a secure object.')
@secure()
param secretsObject object

resource kv 'Microsoft.KeyVault/vaults@2023-07-01' = {
  name: keyVaultName
  location: location
  properties: {
    enabledForDeployment: enabledForDeployment
    enabledForTemplateDeployment: enabledForTemplateDeployment
    enabledForDiskEncryption: enabledForDiskEncryption
    enableRbacAuthorization: true
    tenantId: tenantId
    enableSoftDelete: true
    softDeleteRetentionInDays: 90
    enablePurgeProtection: true
    sku: {
      name: skuName
      family: 'A'
    }
    networkAcls: {
      defaultAction: 'Allow'
      bypass: 'AzureServices'
    }
  }
}

resource secrets 'Microsoft.KeyVault/vaults/secrets@2023-07-01' = [for secret in secretsObject.secrets: {
  name: secret.secretName
  parent: kv
  properties: {
    value: secret.secretValue
  }
}]

output location string = location
output name string = kv.name
output resourceGroupName string = resourceGroup().name
output resourceId string = kv.id

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

  • Microsoft. KeyVault/vaults: создайте хранилище ключей Azure с включенной авторизацией RBAC Azure (enableRbacAuthorization: true).
  • Microsoft. KeyVault/vaults/secret: создайте один или несколько секретов хранилища ключей, итерируя по массиву secretsObject.secrets.

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

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

  2. Создайте файл параметров (например, main.parameters.json), который предоставляет secretsObject значение:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "keyVaultName": { "value": "<vault-name>" },
        "secretsObject": {
          "value": {
            "secrets": [
              { "secretName": "adminpassword", "secretValue": "<your-secret-value>" }
            ]
          }
        }
      }
    }
    
  3. Разверните Bicep-файл с помощью Azure CLI или Azure PowerShell.

    az group create --name myResourceGroup --location eastus
    az deployment group create --resource-group myResourceGroup --template-file main.bicep --parameters @main.parameters.json
    

    Замечание

    Замените <vault-name> именем хранилища ключей, которое должно быть глобально уникальным в vault.azure.net пространстве имен. Замените <your-secret-value> на секретное значение, которое нужно сохранить. Поскольку secretsObject объявлен как объект secureObject, его значение не записывается в журнал и не выводится обратно.

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

Назначьте роль 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 Secrets 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 secret list --vault-name $keyVaultName &&
echo "Press [ENTER] to continue ..."

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

Если она больше не нужна, используйте портал Azure, Azure CLI или Azure PowerShell для удаления группы ресурсов и ее ресурсов.

az group delete --name myResourceGroup

Замечание

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

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

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