Использование секретов 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 и нажмите кнопку "Импорт". Введите следующий URL-адрес репозитория и нажмите кнопку "Импорт".

    https://github.com/MicrosoftDocs/pipelines-dotnet-core
    

создать 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>
    

Настройка проверки подлинности

Создание управляемого удостоверения, назначаемого пользователем

  1. Войдите в портал Azure, а затем найдите службу управляемых удостоверений в строке поиска.

  2. Выберите "Создать" и заполните обязательные поля следующим образом:

    • Подписка: выберите подписку в раскрывающемся меню.
    • Группа ресурсов: выберите существующую группу ресурсов или создайте новую.
    • Регион: выберите регион в раскрывающемся меню.
    • Имя. Введите имя управляемого удостоверения, назначаемого пользователем.
  3. Нажмите кнопку "Рецензирование" и "Создать " после завершения.

  4. После завершения развертывания выберите "Перейти к ресурсу", а затем скопируйте значения подписки и идентификатора клиента, которые будут использоваться в предстоящих шагах.

  5. Перейдите к свойствам> параметров и скопируйте значение идентификатора клиента управляемого удостоверения для последующего использования.

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

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

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

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

  4. Нажмите кнопку "Далее", а затем вставьте идентификатор клиента управляемого удостоверения, созданного ранее, в строку поиска. Выберите управляемое удостоверение.

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

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

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

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

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

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

  4. Для типа удостоверения выберите управляемое удостоверение в раскрывающемся меню.

  5. Для шага 1. Сведения об управляемом удостоверении заполните поля следующим образом:

    • Подписка для управляемого удостоверения: выберите подписку, содержащую управляемое удостоверение.

    • Группа ресурсов для управляемого удостоверения: выберите группу ресурсов, на котором размещено управляемое удостоверение.

    • Управляемое удостоверение: выберите управляемое удостоверение в раскрывающемся меню.

  6. Для шага 2. Область Azure заполните поля следующим образом:

    • Уровень области подключения к службе: выбор подписки.

    • Подписка на подключение к службе: выберите подписку, к которым будет обращаться управляемое удостоверение.

    • Группа ресурсов для подключения к службе: (необязательно) Укажите, чтобы ограничить доступ к управляемому удостоверению одной группе ресурсов.

  7. Для шага 3. Сведения о подключении к службе:

    • Имя подключения службы: укажите имя подключения к службе.

    • Справочник по управлению службами: (необязательно) сведения о контексте из базы данных ITSM.

    • Описание: (необязательно) Добавьте описание.

  8. В разделе "Безопасность" установите флажок "Предоставить доступ ко всем конвейерам ", чтобы разрешить всем конвейерам использовать это подключение к службе. Если этот параметр не выбран, необходимо вручную предоставить доступ к каждому конвейеру, использующего это подключение к службе.

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

    Снимок экрана, на котором показано, как создать подключение службы ARM управляемого удостоверения.

Доступ к секретам хранилища ключей из конвейера

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

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

  3. Выберите Azure Repos Git (YAML) и выберите репозиторий.

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

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

  6. Добавьте задачу AzureKeyVault, заменив заполнители именем созданного ранее подключения к службе и именем хранилища ключей. Файл YAML должен выглядеть следующим фрагментом кода:

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      displayName: Azure Key Vault
      inputs:
        azureSubscription: 'SERVICE_CONNECTION_NAME'
        KeyVaultName: 'KEY_VAULT_NAME'
        SecretsFilter: '*'
        RunAsPreJob: false
    
  7. Давайте добавим следующие задачи для копирования и публикации секрета. Этот пример предназначен только для демонстрационных целей и не должен быть реализован в рабочей среде.

    trigger:
    - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
    - task: AzureKeyVault@2
      displayName: Azure Key Vault
      inputs:
        azureSubscription: 'SERVICE_CONNECTION_NAME'
        KeyVaultName: 'KEY_VAULT_NAME'
        SecretsFilter: '*'
        RunAsPreJob: false
    
    - task: CmdLine@2
      displayName: Create file
      inputs:
        script: 'echo $(SECRET_NAME) > secret.txt'
    
    - task: CopyFiles@2
      displayName: Copy file
      inputs:
        Contents: secret.txt
        targetFolder: '$(Build.ArtifactStagingDirectory)'
    
    - task: PublishBuildArtifacts@1
      displayName: Publish Artifact
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)'
        ArtifactName: 'drop'
        publishLocation: 'Container'
    
  8. Нажмите кнопку "Сохранить и запустить", а затем еще раз выберите ее, чтобы зафиксировать изменения и активировать конвейер. Возможно, вам будет предложено разрешить доступ конвейера к ресурсам Azure, если появится запрос на выбор разрешения. Вам придется утвердить конвейер только один раз.

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

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

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

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

  11. Выберите удалить>secret.txt , чтобы скачать его.

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

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

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

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

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

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

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

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

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

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

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

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

az account set --subscription <YOUR_SUBSCRIPTION_ID>

az login

$spnObjectId = az ad sp show --id <YOUR_SERVICE_PRINCIPAL_ID>

az keyvault set-policy --name <YOUR_KEY_VAULT_NAME> --object-id $spnObjectId --secret-permissions get list