Поделиться через


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

    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. Перейдите к Настройки>Свойства и скопируйте значение Tenant ID вашей управляемой идентичности для последующего использования.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Снимок экрана, демонстрирующий, как создать подключение к службе ARM (Azure Resource Manager) с управляемой идентификацией.

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

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

  2. Выберите Пайплайны и затем выберите Новый пайплайн.

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

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

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

  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. Выберите drop>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