Использование секретов 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.

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

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

Предварительные требования

создать Azure Key Vault;

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

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

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

    az config set defaults.location=<your_region>
    

    Например, эта команда выберет регион westus2:

    az config set defaults.location=westus2
    
  3. Создание группы ресурсов Группа ресурсов — это контейнер, содержащий связанные ресурсы для решения Azure.

    az group create --name <your-resource-group>
    
  4. Создайте новое хранилище ключей.

    az keyvault create \
      --name <your-key-vault> \
      --resource-group <your-resource-group>
    
  5. Создайте секрет в хранилище ключей Azure.

    az keyvault secret set \
      --name "Password" \
      --value "mysecretpassword" \
      --vault-name <your-key-vault-name>
    

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

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

  2. Если в вашей организации еще нет проектов, выберите Создать проект, чтобы приступить к работе. В противном случае выберите Новый проект в правом верхнем углу.

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

Мы будем использовать YAML для создания конвейера, но сначала нам нужно создать новый репозиторий.

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

  2. Выберите Репозитории, а затем выберите Инициализировать , чтобы инициализировать новый репозиторий с помощью файла сведений.

    Снимок экрана: инициализация репозитория.

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

  1. Выберите Конвейеры, а затем — Создать конвейер.

  2. Выберите Azure Repos Git (YAML).

    Снимок экрана: выбор Azure Repos системы управления версиями.

  3. Выберите репозиторий, созданный на предыдущем шаге.

  4. Выберите шаблон начального конвейера .

  5. Конвейер по умолчанию будет включать несколько скриптов, выполняющих команды echo. Они не нужны, чтобы мы могли их удалить. Новый файл YAML должен выглядеть следующим образом:

    trigger:
    - main
    
    pool:
        vmImage: 'ubuntu-latest'
    
    steps:
    
  6. Выберите Показать помощник, чтобы развернуть панель помощник. Эта панель предоставляет удобный и доступный для поиска список задач конвейера.

    Снимок экрана: доступ к панели помощник задачи.

  7. Найдите хранилище и выберите задачу Azure Key Vault.

    Снимок экрана: поиск задачи azure Key Vault.

  8. Выберите подписку Azure , а затем щелкните Авторизовать. Выберите хранилище ключей в раскрывающемся меню, а затем выберите Добавить , чтобы добавить задачу в конвейер YAML.

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

    Примечание

    Функция Сделать секреты доступными для всего задания не поддерживается в Azure DevOps Server 2019 и 2020 годах.

  9. Файл YAML должен выглядеть следующим образом:

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      inputs:
        azureSubscription: 'Your-Azure-Subscription'
        KeyVaultName: 'Your-Key-Vault-Name'
        SecretsFilter: '*'
        RunAsPreJob: false
    
    - task: CmdLine@2
      inputs:
        script: 'echo $(Your-Secret-Name) > secret.txt'
    
    - task: CopyFiles@2
      inputs:
        Contents: secret.txt
        targetFolder: '$(Build.ArtifactStagingDirectory)'
    
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
    

Пока не сохраняйте и не помещайте конвейер в очередь. Сначала необходимо предоставить конвейеру необходимые разрешения для доступа к azure Key Vault. Не закрывайте вкладку браузера. После настройки разрешений хранилища ключей мы возобновим оставшиеся действия.

Настройка политик доступа azure Key Vault

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

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

  2. Используйте строку поиска для поиска созданного ранее хранилища ключей.

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

  3. В разделе Параметры выберите Политики доступа.

  4. Выберите Добавить политику доступа , чтобы добавить новую политику.

  5. Для параметра Разрешения секрета выберите Получить и получить список.

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

  7. Нажмите кнопку Добавить , чтобы создать политику доступа, а затем нажмите кнопку Сохранить , когда все будет готово.

Примечание

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

Запуск и проверка конвейера

  1. Вернитесь на предыдущую вкладку, где мы выехали.

  2. Выберите Сохранить, а затем еще раз нажмите кнопку Сохранить , чтобы зафиксировать изменения и активировать конвейер. Вам может быть предложено разрешить конвейеру доступ к ресурсам Azure, если появится соответствующий запрос, выберите Разрешить. Вам потребуется утвердить конвейер только один раз.

  3. Выберите задачу CmdLine , чтобы просмотреть журналы.

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

  4. Вернитесь к сводке конвейера и выберите опубликованный артефакт.

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

  5. Выберите артефактsecret.txt , чтобы открыть его.

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

  6. Текстовый файл должен содержать секрет mysecretpassword.

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

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

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

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

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

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

    az group delete --name PipelinesKeyVaultResourceGroup
    

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

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

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

$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;

Дальнейшие действия