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

Azure Key Vault — это облачная служба, которая предоставляет защищенное хранилище для секретов, таких как ключи, пароли и сертификаты. В этом кратком руководстве показано, как развернуть шаблон Azure Resource Manager (шаблон 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 Key Vault можно найти в шаблонах быстрого запуска Azure.

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

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

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

Можно использовать порта Azure, Azure PowerShell, Azure CLI или REST API. Дополнительные сведения о методах развертывания см. в статье о Развертывание ресурсов с помощью шаблонов ARM и Azure PowerShell.

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

Вы можете проверить хранилище ключей и ключ на портале 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" имеет достаточные права, так как она разрешает любые действия RBAC, соответствующие шаблону "Microsoft.KeyVault/*".

    Создание ключа через ARM 1Создание ключа через ARM 2

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

  • Так можно создавать новые, обновлять существующие ключи и создавать новые версии существующих ключей.
  • У вызывающей стороны должны быть права на использование этого API. Если в хранилище используются политики доступа, вызывающая сторона должна иметь права на создание (create) для ключа. Если для хранилища настроена служба RBAC, вызывающая сторона должна иметь разрешение RSAC на действие с данными "Microsoft.KeyVault/vaults/keys/create/action".

Очистка ресурсов

Другие руководства о 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 Resource Manager вы найдете в следующих статьях.