Доступ к секрету Key Vault при развертывании Управляемых приложений Azure

Если необходимо передать защищенное значение (например, пароль) в качестве параметра во время развертывания, можно извлечь его из Azure Key Vault. Чтобы получить доступ к Key Vault при развертывании управляемых приложений, нужно предоставить доступ к субъекту-службе Поставщик ресурсов устройств. Служба управляемых приложений использует это удостоверение для выполнения операций. Для успешного извлечения значения из Key Vault во время развертывания у субъекта-службы должен быть доступ к Key Vault.

Эта статья описывает настройку Key Vault для работы с управляемыми приложениями.

Активация развертывания шаблонов

  1. Войдите на портал Azure.

  2. Откройте хранилище ключей. Введите хранилища ключей в поле поиска или выберите Хранилища ключей.

    Снимок экрана: домашняя страница Azure для открытия хранилища ключей с помощью поиска или выбора хранилища ключей.

  3. Выберите конфигурацию Access.

    Снимок экрана: параметр хранилища ключей для выбора конфигурации доступа.

  4. Выберите Azure Resource Manager для развертывания шаблонов. Затем выберите Применить.

    Снимок экрана: конфигурация доступа к хранилищу ключей, которая включает Azure Resource Manager для развертывания шаблона.

Добавление службы в качестве участника

Присвойте роль Участник пользователю Поставщик ресурсов устройства в области Key Vault. Роль участника — это роль привилегированного администратора для назначения роли. Подробные инструкции см. в статье "Назначение ролей Azure" с помощью портал Azure.

Поставщик ресурсов устройства — это субъект-служба в клиенте Microsoft Entra. В портал Azure можно проверить, зарегистрировано ли оно, перейдя в приложения Microsoft Entra ID>Enterprise и изменив фильтр поиска на приложения Майкрософт. Найдите Поставщик ресурсов устройства. Если он не найден, зарегистрируйте поставщик ресурсов Microsoft.Solutions.

Ссылка на секрет Key Vault

Чтобы в управляемом приложении передать секрет из Key Vault в шаблон, нужно использовать связанный или вложенный шаблон со ссылкой на Key Vault в параметрах этого связанного или вложенного шаблона. Укажите идентификатор ресурса Key Vault и имя секрета.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The location where the resources will be deployed."
      }
    },
    "vaultName": {
      "type": "string",
      "metadata": {
        "description": "The name of the key vault that contains the secret."
      }
    },
    "secretName": {
      "type": "string",
      "metadata": {
        "description": "The name of the secret."
      }
    },
    "vaultResourceGroupName": {
      "type": "string",
      "metadata": {
        "description": "The name of the resource group that contains the key vault."
      }
    },
    "vaultSubscription": {
      "type": "string",
      "defaultValue": "[subscription().subscriptionId]",
      "metadata": {
        "description": "The name of the subscription that contains the key vault."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2022-09-01",
      "name": "dynamicSecret",
      "properties": {
        "mode": "Incremental",
        "expressionEvaluationOptions": {
          "scope": "inner"
        },
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "adminLogin": {
              "type": "string"
            },
            "adminPassword": {
              "type": "securestring"
            },
            "location": {
              "type": "string"
            }
          },
          "variables": {
            "sqlServerName": "[concat('sql-', uniqueString(resourceGroup().id, 'sql'))]"
          },
          "resources": [
            {
              "type": "Microsoft.Sql/servers",
              "apiVersion": "2022-05-01-preview",
              "name": "[variables('sqlServerName')]",
              "location": "[parameters('location')]",
              "properties": {
                "administratorLogin": "[parameters('adminLogin')]",
                "administratorLoginPassword": "[parameters('adminPassword')]"
              }
            }
          ],
          "outputs": {
            "sqlFQDN": {
              "type": "string",
              "value": "[reference(variables('sqlServerName')).fullyQualifiedDomainName]"
            }
          }
        },
        "parameters": {
          "location": {
            "value": "[parameters('location')]"
          },
          "adminLogin": {
            "value": "ghuser"
          },
          "adminPassword": {
            "reference": {
              "keyVault": {
                "id": "[resourceId(parameters('vaultSubscription'), parameters('vaultResourceGroupName'), 'Microsoft.KeyVault/vaults', parameters('vaultName'))]"
              },
              "secretName": "[parameters('secretName')]"
            }
          }
        }
      }
    }
  ],
  "outputs": {
  }
}

Следующие шаги

Вы настроили доступ к Key Vault во время развертывания управляемого приложения.