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

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

Шаблон Azure Resource Manager — это файл нотации объектов JavaScript (JSON), который определяет инфраструктуру и конфигурацию проекта. В шаблоне используется декларативный синтаксис. Вы описываете предполагаемое развертывание без написания последовательности команд программирования для создания развертывания.

Если ваша среда соответствует предварительным требованиям и вы знакомы с использованием шаблонов ARM, нажмите кнопку Deploy to Azure. Шаблон откроется на портале Azure.

Кнопка для развертывания шаблона

Предпосылки

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

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

Проверьте шаблон

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.42.1.51946",
      "templateHash": "9113739717796369919"
    }
  },
  "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": "2023-07-01",
      "name": "[parameters('vaultName')]",
      "location": "[parameters('location')]",
      "properties": {
        "enableRbacAuthorization": true,
        "enableSoftDelete": true,
        "softDeleteRetentionInDays": 90,
        "enablePurgeProtection": true,
        "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": "2023-07-01",
      "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')), '2023-07-01')]"
    },
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    },
    "name": {
      "type": "string",
      "value": "[parameters('vaultName')]"
    },
    "resourceGroupName": {
      "type": "string",
      "value": "[resourceGroup().name]"
    },
    "resourceId": {
      "type": "string",
      "value": "[resourceId('Microsoft.KeyVault/vaults', parameters('vaultName'))]"
    }
  }
}

В шаблоне определены два ресурса:

Шаблон создает хранилище ключей с включенной авторизацией Azure RBAC. Это означает, что хранилище использует управление доступом на основе ролей Azure (Azure RBAC) для авторизации на уровне плоскости данных, а не политики доступа.

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

Параметры шаблона

Параметр Description
vaultName Имя нового хранилища ключей. Должен быть глобально уникальным в vault.azure.net пространстве имен.
keyName Имя ключа, создаваемого в хранилище.
расположение Регион, в котором находятся ресурсы Azure. По умолчанию используется местоположение группы ресурсов.
skuName Номер SKU хранилища. standard (по умолчанию) или premium.
тип ключа Тип создаваемого ключа. Один из RSA, RSA-HSM, EC, EC-HSM. По умолчанию — RSA. См. JsonWebKeyType.
keySize Размер в битах ключа (только RSA). По умолчанию — 2048.
имя кривой Имя эллиптической кривой (только для ключей EC). Один из P-256, P-256K, P-384, P-521. См. JsonWebKeyCurveName.
keyOps Разрешенные операции веб-ключа JSON для ключа (например, ["sign","verify","encrypt","decrypt","wrapKey","unwrapKey"]). Пустой массив (по умолчанию) разрешает все операции.

Развертывание шаблона

  1. Выберите следующее изображение, чтобы войти в Azure и открыть шаблон. Шаблон создает хранилище ключей и ключ.

    Кнопка для развертывания шаблона

  2. Введите или выберите следующие значения. Если оно не указано, используйте значение по умолчанию.

    • Subscription: выберите подписку Azure.
    • Группа ресурсов. Щелкните Создать, введите уникальное имя новой группы ресурсов и щелкните ОК.
    • Регион: выберите расположение. Например, центральная часть США.
    • Имя хранилища: введите имя хранилища ключей, которое должно быть глобально уникальным в vault.azure.net пространстве имен.
    • Имя ключа: введите имя ключа, который вы храните в хранилище ключей.
    • Имя SKU: выберите "Стандартный " или "Премиум". Значение по умолчанию является стандартным.
    • Тип ключа: выберите тип ключа. По умолчанию используется RSA.
    • Размер ключа: введите размер ключа (ключи RSA). Значение по умолчанию — 2048.
    • Имя кривой: для ключей EC выберите кривую. Оставьте поле пустым для ключей RSA.
  3. Выберите Проверить и создать, а затем выберите Создать. После успешного развертывания хранилища ключей и ключа вы получите уведомление.

Вы также можете использовать Azure PowerShell, Azure CLI или REST API для развертывания шаблона. Сведения о других методах развертывания см. в статье Deploy templates.

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

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

  1. Получите идентификатор объекта пользователя Microsoft Entra:

    az ad signed-in-user show --query id -o tsv
    
  2. Назначьте себе роль Key Vault Crypto Officer для хранилища ключей:

    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)
    

    Note

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

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

Портал 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 ..."

Note

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

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

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