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


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

Сервисы Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Azure Key Vault — это облачная служба, которая помогает разработчикам безопасно хранить конфиденциальные сведения и управлять ими, такими как ключи API, учетные данные и сертификаты. Служба Azure Key Vault поддерживает два типа контейнеров: хранилища и управляемые пулы HSM (аппаратный модуль безопасности). Хранилища могут хранить как ключи, секреты и сертификаты с поддержкой программного обеспечения, так и ключи, защищенные HSM, в то время как управляемые пулы HSM поддерживают исключительно ключи, защищенные HSM.

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

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

Категория Требования
Azure DevOps организация Azure DevOps.
проект Azure DevOps.
Azure Подписка Azure.

Получение кода

Если у вас нет собственного проекта, импортируйте следующий пример репозитория в репозиторий Azure.

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

  2. Выберите Repos, а затем нажмите кнопку "Импорт". Введите следующий URL-адрес репозитория, а затем нажмите кнопку "Импорт".

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

создать Azure Key Vault;

Выполните следующие действия, чтобы создать Azure Key Vault в Azure с помощью Azure CLI:

  1. Перейдите на портал Azure и выберите Cloud Shell в правом верхнем углу.

  2. Если ваша учетная запись связана с несколькими подписками Azure, задайте подписку по умолчанию:

    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 Key Vault:

    az keyvault secret set \
      --name <YOUR_SECRET_NAME> \
      --value <YOUR_ACTUAL_SECRET> \
      --vault-name <YOUR_KEY_VAULT_NAME>
    

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

Теперь, когда вы создали Azure Key Vault, необходимо настроить проверку подлинности. Выберите Управляемое удостоверение или Служебный принципал и следуйте инструкциям по настройке аутентификации.

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

  1. Перейдите на портал Azure, а затем найдите Управляемые Удостоверения в строке поиска.

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

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

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

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

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

  1. Перейдите на портал Azure и используйте панель поиска, чтобы найти хранилище ключей 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) с управляемой идентификацией.

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

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

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

  1. Войдите в Azure DevOps, а затем перейдите к проекту.

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

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

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

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

  6. Добавьте задачу Azure Key Vault в конвейер. Замените заполнители именем подключения к службе, которое вы создали ранее, и именем вашего Key Vault. Файл 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 Key Vault.

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

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

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

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

    az group delete --name <YOUR_RESOURCE_GROUP_NAME>
    

Устранение неполадок

Ошибка: "У пользователя или группы нет разрешения на список секретов":

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

az login

az account set --subscription <YOUR_SUBSCRIPTION_ID>

$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