Использование секретов Azure Key Vault в Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Azure Key Vault позволяет разработчикам безопасно хранить конфиденциальные сведения, такие как ключи API, учетные данные или сертификаты. Служба Azure Key Vault поддерживает два типа контейнеров: хранилища и управляемые пулы HSM (аппаратный модуль безопасности). Хранилища могут хранить ключи, секреты и сертификаты с поддержкой программного обеспечения и HSM, а управляемые пулы HSM поддерживают только ключи с поддержкой HSM.

В этом учебнике рассматривается следующее.

  • Создание Azure Key Vault с помощью Azure CLI
  • Добавление секрета и настройка доступа к хранилищу ключей Azure
  • Использование секретов в конвейере

Необходимые компоненты

Создание репозитория

Если у вас уже есть собственный репозиторий, перейдите к следующему шагу. В противном случае выполните приведенные ниже инструкции, чтобы инициализировать репозиторий. Мы будем использовать этот репозиторий Azure для настройки конвейера.

  1. Войдите в организацию Azure DevOps и перейдите к проекту.

  2. Выберите Repos, а затем выберите "Инициализировать", чтобы инициализировать основную ветвь с помощью README.

    Снимок экрана: инициализация репозитория с помощью ФАЙЛА README.

создать Azure Key Vault;

  1. Войдите на портал Azure и нажмите кнопку Cloud Shell в правом верхнем углу.

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

    az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
    
  3. Задайте регион Azure по умолчанию. Вы можете создать az account list-locations список доступных регионов.

    az config set defaults.location=<YOUR_REGION>
    
  4. Создание группы ресурсов

    az group create --name <YOUR_RESOURCE_GROUP_NAME>
    
  5. Создайте azure Key Vault.

    az keyvault create \
      --name <YOUR_KEY_VAULT_NAME> \
      --resource-group <YOUR_RESOURCE_GROUP_NAME>
    
  6. Создайте новый секрет в хранилище ключей Azure.

    az keyvault secret set \
      --name <YOUR_SECRET_NAME> \
      --value <YOUR_ACTUAL_SECRET> \
      --vault-name <YOUR_KEY_VAULT_NAME>
    

Настройка политик доступа к хранилищу ключей

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

  1. Перейдите к портал Azure, а затем используйте строку поиска, чтобы найти созданное ранее хранилище ключей.

    Снимок экрана: поиск Azure Key Vault.

  2. Выберите политики доступа и нажмите кнопку "Создать ", чтобы создать новую политику.

  3. В разделе "Разрешения секрета" выберите " Получить " и "Список".

  4. Нажмите кнопку "Далее", а затем выберите субъект-службу, созданный ранее. Субъект-служба — это объект, представляющий приложение или службу, запрашивающую доступ к ресурсам Azure.

  5. Нажмите кнопку "Далее", а затем еще раз.

  6. Просмотрите политики и нажмите кнопку "Создать " после завершения.

Примечание.

Azure Key Vaults, использующие управление доступом на основе ролей Azure (Azure RBAC), не поддерживаются.

Добавление назначения роли

На следующем шаге мы создадим подключение службы ARM с помощью субъекта-службы. Прежде чем проверить подключение, необходимо предоставить субъекту-службе доступ на чтение на уровне подписки:

  1. Перейдите к портал Azure

  2. Выберите подписки на левой панели навигации, а затем найдите и выберите подписку.

  3. Выберите элемент управления доступом и нажмите кнопку Добавить>назначение ролей.

    Снимок экрана: добавление нового назначения ролей на уровне подписки.

  4. Выберите читатель на вкладке "Роль " и нажмите кнопку "Далее".

  5. Выберите "Пользователь", "Группа" или "Субъект-служба", а затем выберите "Выбрать участников".

    Снимок экрана: добавление участников в назначение ролей в Azure.

  6. Используйте панель поиска, чтобы найти субъект-службу, а затем щелкните знак "+", чтобы выбрать его, а затем нажмите кнопку "Выбрать ".

  7. Выберите "Рецензирование и назначение", просмотрите параметры, а затем нажмите кнопку "Проверить и назначить еще раз", чтобы подтвердить выбор и добавить назначение роли.

Создание подключения службы

  1. Войдите в организацию Azure DevOps и перейдите к проекту.

  2. Выберите "Параметры> службы проекта" и выберите "Создать подключение службы", чтобы создать новое подключение к службе.

  3. Выберите Azure Resource Manager и нажмите кнопку "Далее".

  4. Выберите субъект-службу (вручную) и нажмите кнопку "Далее".

  5. Выберите Azure Cloud для среды и подписки на уровне области, а затем введите идентификатор подписки и имя подписки.

  6. Введите следующие поля с информацией, полученной при создании субъекта-службы, а затем нажмите кнопку "Проверить , когда закончите".

    • Идентификатор субъекта-службы: идентификатор приложения субъекта-службы.
    • Ключ субъекта-службы: пароль субъекта-службы.
    • Идентификатор клиента: клиент субъекта-службы.
  7. После успешной проверки укажите имя и описание (необязательно) для подключения к службе, а затем проверка разрешение на предоставление доступа ко всем конвейерам проверка box.

  8. Нажмите кнопку "Проверить и сохранить " после завершения.

    Снимок экрана: создание подключения службы Azure Resource Manager с помощью субъекта-службы.

  1. Войдите в коллекцию Azure DevOps и перейдите к проекту.

  2. Выберите "Параметры службы проектов>">, чтобы создать новое подключение службы, а затем выберите Azure Resource Manager, чтобы создать новое подключение службы ARM.

  3. Присвойте подключению к службе имя, а затем выберите Azure Cloud for Environment и Subscription for the Scope Level(Уровень области).

  4. Введите идентификатор подписки и имя подписки.

  5. Введите следующие поля с информацией, полученной при создании субъекта-службы, а затем нажмите кнопку "Проверить подключение " после завершения.

    • Идентификатор клиента субъекта-службы: идентификатор приложения субъекта-службы.
    • Ключ субъекта-службы: пароль субъекта-службы.
    • Идентификатор клиента: клиент субъекта-службы.
  6. Установите флажок "Разрешить всем конвейерам использовать это подключение проверка box", а затем нажмите кнопку "ОК" после завершения.

    Снимок экрана: создание подключения к службе ARM с помощью субъекта-службы в Azure DevOps Server 2019.

Создание нового конвейера

  1. Войдите в организацию Azure DevOps и перейдите к проекту.

  2. Выберите конвейеры и нажмите кнопку "Создать конвейер".

  3. Выберите "Использовать классический редактор " для создания классического конвейера.

  4. Выберите Azure Repos Git, выберите репозиторий и ветвь по умолчанию, а затем нажмите кнопку "Продолжить".

  5. Выберите шаблон конвейера .Net Desktop .

  6. В этом примере потребуется только две последние задачи. Нажмите клавиши CTRL, а затем выберите первые пять задач, щелкните правой кнопкой мыши и выберите " Удалить выбранные задачи" , чтобы удалить их.

    Снимок экрана: удаление нескольких задач конвейера.

  7. Выберите + , чтобы добавить новую задачу. Найдите задачу командной строки , выберите ее, а затем нажмите кнопку "Добавить ", чтобы добавить ее в конвейер. После добавления настройте его следующим образом:

    • Отображаемое имя: создание файла
    • Скрипт: echo $(YOUR_SECRET_NAME) > secret.txt

    Снимок экрана: настройка задачи командной строки.

  8. Выберите + , чтобы добавить новую задачу. Найдите задачу Azure Key Vault, выберите ее и нажмите кнопку "Добавить*", чтобы добавить ее в конвейер. После добавления настройте его следующим образом:

    • Отображаемое имя: Azure Key Vault
    • Подписка Azure: выберите подключение к службе субъекта-службы, созданное ранее
    • Хранилище ключей: выбор хранилища ключей
    • Фильтр секретов: разделенный запятыми список имен секретов или оставьте *, чтобы скачать все секреты из выбранного хранилища ключей

    Снимок экрана: настройка задачи Azure Key Vault в классических конвейерах.

  9. Выберите задачу "Копировать файлы" и заполните необходимые поля следующим образом:

    • Отображаемое имя: копирование файла
    • Содержимое: secret.txt
    • Целевая папка: $(build.artifactstagingdirectory)

    Снимок экрана: настройка задачи копирования файлов в классических конвейерах.

  10. Выберите задачу "Опубликовать артефакты" и заполните обязательные поля следующим образом:

    • Отображаемое имя: публикация артефакта
    • Путь к публикации: $(build.artifactstagingdirectory)
    • Имя артефакта: drop
    • Расположение публикации артефактов: Azure Pipelines

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

  11. Выберите "Сохранить" и "Очередь", а затем нажмите кнопку "Выполнить ", чтобы запустить конвейер.

  12. После завершения выполнения конвейера вернитесь к сводке конвейера и выберите опубликованный артефакт.

  13. Выберите удалить>secret.txt , чтобы скачать опубликованный артефакт.

    Снимок экрана: скачивание опубликованного артефакта.

  14. Откройте только что скачанный текстовый файл, текстовый файл должен содержать секрет из хранилища ключей Azure.

  1. Войдите в коллекцию Azure DevOps и перейдите к проекту.

  2. Выберите конвейеры и выберите "Сборки".

  3. Выберите новый>конвейер сборки.

  4. Выберите "Использовать классический редактор ", чтобы создать новый классический конвейер сборки.

  5. Выберите Azure Repos Git, выберите репозиторий и ветвь по умолчанию, а затем нажмите кнопку "Продолжить".

  6. Выберите шаблон конвейера .Net Desktop и нажмите кнопку "Применить".

  7. В этом примере потребуется только две последние задачи. Нажмите клавиши CTRL, а затем выберите первые пять задач, щелкните правой кнопкой мыши и выберите " Удалить выбранные задачи" , чтобы удалить их.

    Снимок экрана: удаление нескольких задач конвейера в классических конвейерах в Azure DevOps Server 2019.

  8. Выберите + , чтобы добавить новую задачу. Найдите задачу командной строки , выберите ее, а затем нажмите кнопку "Добавить ", чтобы добавить ее в конвейер. После добавления настройте его следующим образом:

    • Отображаемое имя: создание файла
    • Скрипт: echo $(YOUR_SECRET_NAME) > secret.txt

    Снимок экрана: настройка задачи командной строки в классических конвейерах в Azure DevOps Server 2019.

  9. Выберите + , чтобы добавить новую задачу. Найдите задачу Azure Key Vault, выберите ее и нажмите кнопку "Добавить*", чтобы добавить ее в конвейер. После добавления настройте его следующим образом:

    • Отображаемое имя: Azure Key Vault
    • Подписка Azure: выберите подключение к службе субъекта-службы, созданное ранее
    • Хранилище ключей: выбор хранилища ключей
    • Фильтр секретов: разделенный запятыми список имен секретов или оставьте *, чтобы скачать все секреты из выбранного хранилища ключей

    Снимок экрана: настройка задачи Azure Key Vault в классическом конвейере в Azure DevOps Server 2019.

  10. Выберите задачу "Копировать файлы" и заполните необходимые поля следующим образом:

    • Отображаемое имя: копирование файла
    • Содержимое: secret.txt
    • Целевая папка: $(build.artifactstagingdirectory)

    Снимок экрана: настройка задачи копирования файлов в классических конвейерах в Azure DevOps Server 2019.

  11. Выберите задачу "Опубликовать артефакты" и заполните обязательные поля следующим образом:

    • Отображаемое имя: публикация артефакта
    • Путь к публикации: $(build.artifactstagingdirectory)
    • Имя артефакта: drop
    • Расположение публикации артефактов: Azure Pipelines

    Снимок экрана: настройка задачи публикации артефактов в классических конвейерах в Azure DevOps Server 2019.

  12. Выберите "Сохранить и очередь", а затем нажмите кнопку "Сохранить" и "Сохранить" для запуска конвейера сборки.

  13. После завершения выполнения конвейера выберите артефакты и нажмите кнопку "Удалить".

  14. В открывшемся окне выберите раскрывающийся>secret.txt, щелкните значок с многоточием (...), а затем нажмите кнопку скачивания, чтобы сохранить текстовый файл.

  15. Откройте только что скачанный текстовый файл, он должен содержать секрет из хранилища ключей Azure.

Предупреждение

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

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

Выполните приведенные ниже действия, чтобы удалить созданные ресурсы:

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

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

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

Вопросы и ответы

Вопрос. Я получаю следующую ошибку: "У пользователя или группы нет разрешений на список секретов", что делать?

Ответ. Если возникла ошибка, указывающая, что у пользователя или группы нет разрешения списка секретов в хранилище ключей, выполните следующие команды, чтобы авторизовать приложение для доступа к ключу или секрету в Azure Key Vault:

$ErrorActionPreference="Stop";
$Credential = Get-Credential;
Connect-AzAccount -SubscriptionId <YOUR_SUBSCRIPTION_ID> -Credential $Credential;
$spn=(Get-AzureRmADServicePrincipal -SPN <YOUR_SERVICE_PRINCIPAL_ID>);
$spnObjectId=$spn.Id;
Set-AzureRmKeyVaultAccessPolicy -VaultName key-vault-tutorial -ObjectId $spnObjectId -PermissionsToSecrets get,list;