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

Azure DevOps Services | Azure DevOps Server 2020 | 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. Выберите Repos, а затем выберите "Инициализировать", чтобы инициализировать новый репозиторий с помощью README.

    A screenshot showing how to initialize a repository.

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

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

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

    A screenshot showing how to select Azure Repos source control.

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

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

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

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

    A screenshot showing how to access the task assistant panel.

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

    A screenshot showing how to search for the Azure Key Vault task.

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

    A screenshot showing how to configure the Azure Key Vault task.

    Примечание

    Функция "Сделать секреты доступными для всего задания" не поддерживается в 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. Не закрывайте вкладку браузера, мы возобновим оставшиеся шаги после настройки разрешений хранилища ключей.

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

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

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

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

    A screenshot showing how to search for your Azure Key Vault.

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

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

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

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

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

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

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

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

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

    A screenshot showing the command-line task logs.

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

    A screenshot showing the pipeline summary and the published artifact.

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

    A screenshot showing how to open the published artifact.

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

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

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

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

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

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

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

    az group delete --name PipelinesKeyVaultResourceGroup
    

ВОПРОСЫ И ОТВЕТЫ

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

Ответ. Если возникает ошибка, указывающая, что у пользователя или группы нет разрешения списка секретов в хранилище ключей, выполните следующие команды, чтобы разрешить приложению доступ к ключу или секрету в 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;

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