Использование секретов среды с помощью Интерфейса командной строки разработчика Azure

Интерфейс командной строки разработчика Azure (azd) поддерживает ссылки на секреты из Azure Key Vault в среде проекта (.env файл). Это обеспечивает безопасный способ работы с конфиденциальными данными в проектах azd . Эти секреты интегрируются с различными azd функциями, такими как хуки и конфигурации конвейера CI/CD.

Необходимые условия

  • Azure Developer CLI установлен.
  • Экземпляр Azure Key Vault, к которому у вас есть доступ или разрешение на создание.

Установить секрет в Key Vault

Чтобы установить секрет Key Vault, выполните команду azd env set-secret <name>, где <name> — это ключ в среде, ссылающейся на секрет Key Vault. После задания секрета azd автоматически извлекает значение из Key Vault в следующих сценариях.

Параметры Bicep

Чтобы связать параметр Bicep со значением секрета Azure Key Vault, выполните следующие действия:

  1. Аннотируйте параметр Bicep в качестве защищенного, используя ключевое слово @secure().
  2. Создайте сопоставление в main.parameters.json файле так, чтобы параметр Bicep был связан с соответствующим именем ключа в среде, ссылающейся на секрет Azure Key Vault.

Замечание

Секреты среды в настоящее время не поддерживаются при использовании файлов параметров Bicep (.bicepparam).

Пример

azd В проекте запустите azd env set-secret MY_SECRET и следуйте инструкциям, чтобы выбрать существующий секрет Azure Key Vault или создать новый. После завершения команды ключ MY_SECRET содержит ссылку на секрет Key Vault. Добавьте или выберите параметр Bicep, значение которого вы хотите использовать, и отметьте его как защищенный.

@secure()
param secureParameter string

Создайте сопоставление в main.parameters.json файле:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "secureParameter": {
        "value": "${MY_SECRET}"
      }
    }
}

При следующем запуске azd up или azd provision, azd использует секрет Azure Key Vault в качестве значения для вашего параметра.

Хуки

azd может автоматически извлекать секреты Azure Key Vault при запуске перехватчика. Когда azd запускает перехватчик, по умолчанию все пары "ключ-значение" из среды проекта (.env файл) устанавливаются в окружение перехватчика. Однако ссылки на секреты Key Vault не преобразуются автоматически в соответствующие значения.

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

  1. Создайте сопоставление из ключа в среде с новым ключом, где раскрывается секрет из Key Vault.
  2. Используйте поле secrets в определении перехватчика для создания этого сопоставления.

Пример

azd В проекте запустите azd env set-secret MY_SECRET и следуйте инструкциям, чтобы выбрать существующий секрет Azure Key Vault или создать новый. После завершения команды ключ MY_SECRET ссылается на секрет Key Vault. Создайте определение хука, соответствующее вашей операционной системе.

hooks:
  preprovision: 
    run: 'echo ".env value: $MY_SECRET \nResolved secret: $SECRET_RESOLVE"'
    shell: sh
    interactive: true
    secrets:
      SECRET_RESOLVE: MY_SECRET

При следующем запуске azd provision запускается перехватчик preprovision, который разрешает MY_SECRET в SECRET_RESOLVE.

Конфигурация конвейера

azd упрощает процесс настройки непрерывной интеграции (CI) для приложения. Независимо от того, используете ли вы GitHub или Azure DevOps, выполните azd pipeline config и выполните инструкции по настройке CI/CD.

В рамках автоматической настройки azd создаются секреты и переменные для рабочего процесса развертывания CI/CD. Вы также можете определить собственные переменные и секреты с помощью pipeline конфигурации azure.yaml. Имена, которые вы определяете, соответствуют ключам в вашей azd среде (.env). Если ключ содержит ссылку на секрет (akvs), azd применяет другое поведение в зависимости от того, добавляете ли он в качестве переменной или секрета:

Подход Хранимое значение CI/CD Обновление секретных ключей лучше всего подходит для
variables Ссылка на Key Vault (akvs://...) Автоматически — конвейер всегда считывает последнее значение из Key Vault. Когда учетная запись службы CI/CD имеет доступ на чтение к Key Vault.
secrets Фактическое значение секрета Ручное — перезапустите azd pipeline config после поворота. Если вы не можете назначить доступ на чтение к "Key Vault" для служебного принципала.

Замечание

При использовании variables, azd пытается назначить роль доступа для чтения служебному принципалу, который используется рабочим процессом CI/CD. Если у вас нет достаточных разрешений для назначения роли чтения для Хранилища ключей, операция не удается. Вместо этого используйте secrets.

Пример

В инициализированном azd проекте запустите azd env set-secret SECURE_KEY и следуйте инструкциям. После завершения azd env get-values команды отобразится ссылка:

SECURE_KEY="akvs://faa080af-c1d8-40ad-9cce-000000000000/vivazqu-kv/SECURE-KEY-kv-secret"

Добавьте SECURE_KEY либо в список variables, либо в список secrets в azure.yaml:

# yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json
name: your-project-name
pipeline:
  variables:
    - SECURE_KEY

При запуске azd pipeline configSECURE_KEY устанавливается в качестве переменной CI/CD, а в качестве его значения используется ссылка на Key Vault. Если SECURE_KEY также сопоставляется с входным параметром Bicep или определением хука, azd автоматически разрешается секретное значение в ходе выполнения.