Использование секретов 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 DevOps и проект. Создайте организацию или проект, если вы еще не сделали этого.
Подписка Azure. Создайте учетную запись Azure бесплатно, если у вас еще нет учетной записи Azure.
Создание репозитория
Если у вас уже есть собственный репозиторий, перейдите к следующему шагу. В противном случае выполните приведенные ниже инструкции, чтобы инициализировать репозиторий. Мы будем использовать этот репозиторий Azure для настройки конвейера.
Войдите в организацию Azure DevOps и перейдите к проекту.
Выберите Repos, а затем выберите "Инициализировать", чтобы инициализировать основную ветвь с помощью README.
создать Azure Key Vault;
Войдите на портал Azure и нажмите кнопку Cloud Shell в правом верхнем углу.
Если у вас несколько подписок Azure, связанных с учетной записью, используйте следующую команду, чтобы указать подписку по умолчанию. Вы можете создать
az account list
список подписок.az account set --subscription <YOUR_SUBSCRIPTION_NAME_OR_ID>
Задайте регион Azure по умолчанию. Вы можете создать
az account list-locations
список доступных регионов.az config set defaults.location=<YOUR_REGION>
Создание группы ресурсов
az group create --name <YOUR_RESOURCE_GROUP_NAME>
Создайте azure Key Vault.
az keyvault create \ --name <YOUR_KEY_VAULT_NAME> \ --resource-group <YOUR_RESOURCE_GROUP_NAME>
Создайте новый секрет в хранилище ключей 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, а затем выполните следующие действия, описанные в этом разделе.
Перейдите к портал Azure, а затем используйте строку поиска, чтобы найти созданное ранее хранилище ключей.
Выберите политики доступа и нажмите кнопку "Создать ", чтобы создать новую политику.
В разделе "Разрешения секрета" выберите " Получить " и "Список".
Нажмите кнопку "Далее", а затем выберите субъект-службу, созданный ранее. Субъект-служба — это объект, представляющий приложение или службу, запрашивающую доступ к ресурсам Azure.
Нажмите кнопку "Далее", а затем еще раз.
Просмотрите политики и нажмите кнопку "Создать " после завершения.
Добавление назначения роли
На следующем шаге мы создадим подключение службы ARM с помощью субъекта-службы. Прежде чем проверить подключение, необходимо предоставить субъекту-службе доступ на чтение на уровне подписки:
Перейдите к портал Azure
Выберите подписки на левой панели навигации, а затем найдите и выберите подписку.
Выберите элемент управления доступом и нажмите кнопку Добавить>назначение ролей.
Выберите читатель на вкладке "Роль " и нажмите кнопку "Далее".
Выберите "Пользователь", "Группа" или "Субъект-служба", а затем выберите "Выбрать участников".
Используйте панель поиска, чтобы найти субъект-службу, а затем щелкните знак "+", чтобы выбрать его, а затем нажмите кнопку "Выбрать ".
Выберите "Рецензирование и назначение", просмотрите параметры, а затем нажмите кнопку "Проверить и назначить еще раз", чтобы подтвердить выбор и добавить назначение роли.
Создание подключения службы
Войдите в организацию Azure DevOps и перейдите к проекту.
Выберите "Параметры> службы проекта" и выберите "Создать подключение службы", чтобы создать новое подключение к службе.
Выберите Azure Resource Manager и нажмите кнопку "Далее".
Выберите субъект-службу (вручную) и нажмите кнопку "Далее".
Выберите Azure Cloud для среды и подписки на уровне области, а затем введите идентификатор подписки и имя подписки.
Введите следующие поля с информацией, полученной при создании субъекта-службы, а затем нажмите кнопку "Проверить , когда закончите".
- Идентификатор субъекта-службы: идентификатор приложения субъекта-службы.
- Ключ субъекта-службы: пароль субъекта-службы.
- Идентификатор клиента: клиент субъекта-службы.
После успешной проверки укажите имя и описание (необязательно) для подключения к службе, а затем установите флажок "Предоставить доступ ко всем конвейерам ".
Нажмите кнопку "Проверить и сохранить " после завершения.
Войдите в коллекцию Azure DevOps и перейдите к проекту.
Выберите "Параметры службы проектов>">, чтобы создать новое подключение службы, а затем выберите Azure Resource Manager, чтобы создать новое подключение службы ARM.
Присвойте подключению к службе имя, а затем выберите Azure Cloud for Environment и Subscription for the Scope Level(Уровень области).
Введите идентификатор подписки и имя подписки.
Введите следующие поля с информацией, полученной при создании субъекта-службы, а затем нажмите кнопку "Проверить подключение " после завершения.
- Идентификатор клиента субъекта-службы: идентификатор приложения субъекта-службы.
- Ключ субъекта-службы: пароль субъекта-службы.
- Идентификатор клиента: клиент субъекта-службы.
Установите флажок "Разрешить всем конвейерам использовать это подключение", а затем нажмите кнопку "ОК" после завершения.
Создание нового конвейера
Войдите в организацию Azure DevOps и перейдите к проекту.
Выберите конвейеры и нажмите кнопку "Создать конвейер".
Выберите "Использовать классический редактор " для создания классического конвейера.
Выберите Azure Repos Git, выберите репозиторий и ветвь по умолчанию, а затем нажмите кнопку "Продолжить".
Выберите шаблон конвейера .Net Desktop .
В этом примере потребуется только две последние задачи. Нажмите клавиши CTRL, а затем выберите первые пять задач, щелкните правой кнопкой мыши и выберите " Удалить выбранные задачи" , чтобы удалить их.
Выберите + , чтобы добавить новую задачу. Найдите задачу командной строки , выберите ее, а затем нажмите кнопку "Добавить ", чтобы добавить ее в конвейер. После добавления настройте его следующим образом:
- Отображаемое имя: создание файла
- Скрипт:
echo $(YOUR_SECRET_NAME) > secret.txt
Выберите + , чтобы добавить новую задачу. Найдите задачу Azure Key Vault, выберите ее и нажмите кнопку "Добавить*", чтобы добавить ее в конвейер. После добавления настройте его следующим образом:
- Отображаемое имя: Azure Key Vault
- Подписка Azure: выберите подключение к службе субъекта-службы, созданное ранее
- Хранилище ключей: выбор хранилища ключей
- Фильтр секретов: разделенный запятыми список имен секретов или оставьте *, чтобы скачать все секреты из выбранного хранилища ключей
Выберите задачу "Копировать файлы" и заполните необходимые поля следующим образом:
- Отображаемое имя: копирование файла
- Содержимое: secret.txt
- Целевая папка: $(build.artifactstagingdirectory)
Выберите задачу "Опубликовать артефакты" и заполните обязательные поля следующим образом:
- Отображаемое имя: публикация артефакта
- Путь к публикации: $(build.artifactstagingdirectory)
- Имя артефакта: drop
- Расположение публикации артефактов: Azure Pipelines
Выберите "Сохранить" и "Очередь", а затем нажмите кнопку "Выполнить ", чтобы запустить конвейер.
После завершения выполнения конвейера вернитесь к сводке конвейера и выберите опубликованный артефакт.
Выберите удалить>secret.txt , чтобы скачать опубликованный артефакт.
Откройте только что скачанный текстовый файл, текстовый файл должен содержать секрет из хранилища ключей Azure.
Войдите в коллекцию Azure DevOps и перейдите к проекту.
Выберите конвейеры и выберите "Сборки".
Выберите новый>конвейер сборки.
Выберите "Использовать классический редактор ", чтобы создать новый классический конвейер сборки.
Выберите Azure Repos Git, выберите репозиторий и ветвь по умолчанию, а затем нажмите кнопку "Продолжить".
Выберите шаблон конвейера .Net Desktop и нажмите кнопку "Применить".
В этом примере потребуется только две последние задачи. Нажмите клавиши CTRL, а затем выберите первые пять задач, щелкните правой кнопкой мыши и выберите " Удалить выбранные задачи" , чтобы удалить их.
Выберите + , чтобы добавить новую задачу. Найдите задачу командной строки , выберите ее, а затем нажмите кнопку "Добавить ", чтобы добавить ее в конвейер. После добавления настройте его следующим образом:
- Отображаемое имя: создание файла
- Скрипт:
echo $(YOUR_SECRET_NAME) > secret.txt
Выберите + , чтобы добавить новую задачу. Найдите задачу Azure Key Vault, выберите ее и нажмите кнопку "Добавить*", чтобы добавить ее в конвейер. После добавления настройте его следующим образом:
- Отображаемое имя: Azure Key Vault
- Подписка Azure: выберите подключение к службе субъекта-службы, созданное ранее
- Хранилище ключей: выбор хранилища ключей
- Фильтр секретов: разделенный запятыми список имен секретов или оставьте *, чтобы скачать все секреты из выбранного хранилища ключей
Выберите задачу "Копировать файлы" и заполните необходимые поля следующим образом:
- Отображаемое имя: копирование файла
- Содержимое: secret.txt
- Целевая папка: $(build.artifactstagingdirectory)
Выберите задачу "Опубликовать артефакты" и заполните обязательные поля следующим образом:
- Отображаемое имя: публикация артефакта
- Путь к публикации: $(build.artifactstagingdirectory)
- Имя артефакта: drop
- Расположение публикации артефактов: Azure Pipelines
Выберите "Сохранить и очередь", а затем нажмите кнопку "Сохранить" и "Сохранить" для запуска конвейера сборки.
После завершения выполнения конвейера выберите артефакты и нажмите кнопку "Удалить".
В открывшемся окне выберите раскрывающийся>secret.txt, щелкните значок с многоточием (...), а затем нажмите кнопку скачивания, чтобы сохранить текстовый файл.
Откройте только что скачанный текстовый файл, он должен содержать секрет из хранилища ключей Azure.
Предупреждение
Это руководство предназначено только для образовательных целей. Рекомендации по безопасности и безопасное использование секретов см. в статье "Управление секретами" в серверных приложениях с помощью Azure Key Vault.
Очистка ресурсов
Выполните приведенные ниже действия, чтобы удалить созданные ресурсы:
Если вы создали новую организацию для размещения проекта, узнайте , как удалить организацию, в противном случае удалите проект.
Все ресурсы 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;