Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure Key Vault предлагает безопасное решение для управления учетными данными, такими как ключи, секреты и сертификаты с простой безопасностью. С помощью Azure Pipelines можно упростить процесс доступа к хранилищам ключей и использовать их, что упрощает хранение и получение учетных данных.
В некоторых сценариях организации назначают приоритеты безопасности путем ограничения доступа к хранилищам ключей исключительно назначенным виртуальным сетям Azure, чтобы обеспечить высокий уровень безопасности критически важных приложений.
В этом учебнике вы узнаете, как:
- Создание субъекта-службы
- Создание подключения службы
- Настройте точки доступа для входящего трафика
- Запрос закрытого хранилища ключей Azure в вашем конвейере
Требования
Организация Azure DevOps и проект. Создайте организацию или проект, если вы еще не сделали этого.
Подписка Azure. Создайте бесплатную учетную запись Azure, если у вас еще нет учетной записи .
Один Azure Key Vault. Создайте azure Key Vault , если вы еще не сделали этого.
Доступ к хранилищу закрытых ключей
Azure Pipelines позволяет разработчикам связывать Azure Key Vault с группой переменных и сопоставлять с ней выбранные секреты хранилища. Доступ к хранилищу ключей, используемому в качестве группы переменных, можно получить:
В Azure DevOps при настройке группы переменных.
Из самостоятельно размещенного агента во время выполнения задания конвейера.
Создание субъекта-службы
Начните с создания нового субъекта-службы, это позволит вам получить доступ к ресурсам Azure. Затем необходимо создать новое подключение службы ARM в Azure DevOps, а затем настроить федеративные учетные данные для субъекта-службы в Azure перед проверкой и сохранением подключения к службе в Azure DevOps.
Перейдите на портал Azure.
Откройте Cloud Shell в строке меню и выберите Bash.
Чтобы создать новую учетную запись службы, выполните следующую команду:
az ad sp create-for-rbac --name YOUR_SERVICE_PRINCIPAL_NAMEОбязательно скопируйте выходные данные, так как мы будем использовать его для создания подключения к службе на следующем шаге.
Создание подключения службы
Войдите в организацию Azure DevOps и перейдите к проекту.
Выберите Параметры проекта>Подключения к службам>Новое подключение к службе.
Выберите Azure Resource Manager и нажмите кнопку "Далее".
Для типа удостоверения личности выберите регистрацию приложения (автоматически) в раскрывающемся меню.
Для учетные данные оставьте рекомендуемое значение по умолчанию: федерация удостоверений идентичности рабочей нагрузки.
Для уровня области выберите **Подписка, а затем выберите свою подписку в раскрывающемся меню.
Выберите группу ресурсов, если требуется ограничить доступ только к указанной группе ресурсов.
Укажите имя для подключения к вашей службе, а затем установите флажок "Предоставить доступ ко всем конвейерам", чтобы разрешить всем конвейерам использовать это подключение к службе.
Выберите Сохранить, когда вы закончите.
Создать федеративную учетную запись
Перейдите в портал Azure, введите идентификатор клиента вашего субъекта-службы в строке поиска и выберите приложение.
В разделе Управление выберите Сертификаты и секреты>Федеративные учетные данные.
Выберите "Добавить учетные данные", а затем для сценария федеративных учетных данных выберите "Другой издатель".
Для Issuer вставьте следующий URL-адрес, заменив местозаполнитель идентификатором GUID вашей организации. Идентификатор вашей организации можно найти, перейдя в параметры организации>Microsoft Entra>. Загрузите список организаций Azure DevOps, подключенных к вашему каталогу.
https://login.microsoftonline.com/<TENANT_ID>/v2.0Для идентификатора субъекта вставьте следующий URL-адрес, заменив заполнитель именем организации, именем проекта и именем подключения службы.
ENTRA_PREFIX/sc/ORGANIZATION_NAME/PROJECT_NAME/SERVICE_CONNECTION_NAMEУкажите имя федеративных учетных данных и нажмите кнопку "Добавить" после завершения.
Создание подключения службы
Войдите в организацию Azure DevOps и перейдите к проекту.
Выберите Параметры проекта>Подключения к службам>Новое подключение к службе.
Выберите Azure Resource Manager, >Далее, затем выберите сервисный принципал (вручную)>Далее.
Выберите Azure Cloud для среды и подписки на уровне области, а затем введите идентификатор подписки и имя подписки.
Введите сведения об учетной записи службы и выберите Проверить.
После успешной проверки назовите подключение к службе, добавьте описание и установите флажок «Предоставить доступ ко всем конвейерам». Нажмите кнопку "Проверить и сохранить " после завершения.
Совет
Если вы не можете проверить подключение субъекта-службы, предоставьте субъекту-службе доступ читателя к подписке.
Доступ к хранилищу закрытых ключей из Azure Devops
В этом разделе мы рассмотрим два метода доступа к хранилищу закрытых ключей из Azure DevOps. Во-первых, мы будем использовать группы переменных для связывания и сопоставления секретов из нашего хранилища ключей, затем настроим входящий доступ, разрешив статические диапазоны IP-адресов. Мы устанавливаем входящий доступ, так как Azure Pipelines использует общедоступный опубликованный IP-адрес Azure DevOps при обращении к Azure Key Vault из переменной группы. Поэтому, добавив входящие подключения к брандмауэру Azure Key Vault, мы можем успешно подключиться к Azure Key Vault.
Во втором подходе мы продемонстрируем, как динамически добавить IP-адрес агента, размещенного на Microsoft, в разрешенный список брандмауэра хранилища ключей, выполнить запрос к хранилищу ключей и затем удалить IP-адрес после завершения процесса. Этот второй подход предназначен для демонстрационных целей и не рекомендуется Azure Pipelines.
1. Соотнесение секретов хранилища ключей с группой переменных
Войдите в организацию Azure DevOps и перейдите к проекту.
Выберите
Библиотека конвейеров , а затем выберите + группа переменных .Присвойте группе переменных имя, а затем нажмите кнопку переключателя, чтобы включить кнопку Связать секреты из Azure Key Vault как переменные.
Выберите созданное ранее подключение к службе, выберите хранилище ключей и нажмите кнопку "Авторизовать".
В разделе "Переменные" выберите "Добавить ", чтобы добавить секрет, а затем нажмите кнопку "Сохранить " после завершения.
Примечание.
Убедитесь, что подключение к службе имеет разрешения на получение и список, и что вашему субъекту-службе назначена роль Key Vault Secrets User в вашем личном хранилище закрытых ключей.
1.1. Настройка разрешений подключения службы
Перейдите в хранилище ключей Azure и выберите политики доступа.
Нажмите кнопку "Создать" и в разделе "Разрешения секрета", добавьте разрешения "Получить " и "Список " и нажмите кнопку "Далее".
Добавьте подключение к службе в строке поиска, выберите его и нажмите кнопку "Далее".
Нажмите кнопку "Далее " еще раз, просмотрите параметры и нажмите кнопку "Проверить и создать " после завершения.
1.2. Настройка разрешений служебного принципала
Перейдите в хранилище ключей Azure и выберите элемент управления доступом (IAM).
Выберите Добавить>Добавить назначение роли>, а затем перейдите на вкладку Роль.
Выберите роль пользователя секретов Key Vault, а затем выберите Далее.
Выберите "Выбрать участников>", затем добавьте ваш служебный принципал >Выбрать.
Нажмите «Рецензировать и назначить», когда закончите.
Войдите в организацию Azure DevOps и перейдите к проекту.
Выберите
Библиотека конвейеров , а затем выберите + группа переменных .Присвойте группе переменных имя, а затем нажмите кнопку переключателя, чтобы включить кнопку Связать секреты из Azure Key Vault как переменные.
Выберите подключение службы Azure, созданное ранее в раскрывающемся меню, а затем выберите хранилище ключей.
Если возникло сообщение об ошибке: указанное подключение службы Azure должно иметь разрешения на управление секретами "Get, List" в выбранном хранилище ключей, как показано выше. Перейдите к хранилищу ключей в портале Azure, выберите Элемент управления доступом (IAM)>Добавить назначение роли>пользователь секретов хранилища ключей>Далее, затем добавьте ваш субъекта-службу и выберите Проверить и назначить после завершения.
Добавьте секреты и нажмите кнопку "Сохранить " после завершения.
2. Настройка входящего доступа из Azure DevOps
Чтобы включить доступ к хранилищу ключей из Azure DevOps, необходимо предоставить доступ из определенных статических диапазонов IP-адресов. Эти диапазоны определяются географическим расположением организации Azure DevOps.
Войдите в организацию Azure DevOps.
Выберите Параметры организации.
Перейдите к обзору, где вы найдете географическое расположение, указанное в нижней части страницы.
Найдите диапазоны географических IP-адресов V4.
Внимание
Для входящих подключений Сша обязательно добавьте диапазоны IP-адресов для всех регионов США.
Настройте хранилище ключей, чтобы разрешить доступ из статических диапазонов IP-адресов.
3. Запрос хранилища закрытых ключей с помощью группы переменных
В этом примере мы используем группу переменных, настроенную ранее и авторизованную с помощью субъекта-службы, для запроса и копирования секрета из нашего частного хранилища ключей Azure с помощью связанной группы переменных. Azure Pipelines использует опубликованный общедоступный IP-адрес при запросе Azure Key Vault из группы переменных, поэтому убедитесь, что вы настроили входящий доступ для правильной работы:
variables:
- group: mySecret-VG
steps:
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Альтернативный метод — разрешать динамически IP-адреса агентов, размещенных Microsoft.
В этом втором подходе мы начнем с запроса IP-адреса агента, размещенного корпорацией Майкрософт, в начале нашего потока. Затем мы добавим его в список разрешений хранилища ключей, запустите остальные задачи и, наконец, удалите IP-адрес из списка разрешений брандмауэра хранилища ключей.
Примечание.
Этот подход предназначен только для демонстрационных целей и не является рекомендованным подходом Azure Pipelines.
- task: AzurePowerShell@5
displayName: 'Allow agent IP'
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
azurePowerShellVersion: LatestVersion
ScriptType: InlineScript
Inline: |
$ip = (Invoke-WebRequest -uri "http://ifconfig.me/ip").Content
Add-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -ResourceGroupName "YOUR_RESOURCE_GROUP_NAME" -IpAddressRange $ip
echo "##vso[task.setvariable variable=agentIP]ip"
- task: AzureKeyVault@2
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
KeyVaultName: 'YOUR_KEY_VAULT_NAME'
SecretsFilter: '*'
RunAsPreJob: false
- task: AzurePowerShell@5
displayName: 'Remove agent IP'
inputs:
azureSubscription: 'YOUR_SERVICE_CONNECTION_NAME'
azurePowerShellVersion: LatestVersion
ScriptType: InlineScript
Inline: |
$ipRange = $env:agentIP + "/32"
Remove-AzKeyVaultNetworkRule -VaultName "YOUR_KEY_VAULT_NAME" -IpAddressRange $ipRange
condition: succeededOrFailed()
Внимание
Убедитесь, что служебный принципал, который вы используете для доступа к вашему хранилищу ключей из конвейера, имеет роль участника хранилища ключей в разделе Управление доступом (IAM) вашего хранилища ключей.
Доступ к хранилищу приватных ключей из самостоятельно размещённого агента
Чтобы иметь возможность получать доступ к хранилищу закрытых ключей из агента Azure Pipelines, вам потребуется использовать самостоятельно размещенный агент (Windows, Linux, Mac) или агенты в масштабируемом наборе. Это связано с тем, что агенты на платформе Microsoft, как и другие универсальные вычислительные службы, не включаются в список доверенных служб хранилища ключей.
Чтобы установить подключение к вашему хранилищу закрытых ключей, необходимо предоставить прямое соединение, настроив частную конечную точку для вашего хранилища ключей. Эта конечная точка должна быть маршрутизируемой и иметь свое частное DNS-имя, разрешаемое со стороны агента на собственном хостинге.
1. Настройка входящего доступа от агента, размещенного локально
Выполните указанную инструкцию по созданию виртуальной сети.
В портал Azure используйте панель поиска в верхней части страницы, чтобы найти Azure Key Vault.
Обнаружив хранилище ключей в результатах поиска, выберите его и перейдите в раздел Настройки>Сеть.
Выберите подключения к частной конечной точке и нажмите кнопку "Создать ", чтобы создать новую частную конечную точку.
Выберите группу ресурсов, в которую размещена виртуальная сеть, созданная ранее. Укажите имя экземпляра и имя сетевого интерфейса и убедитесь, что вы выбрали тот же регион, что и созданная ранее виртуальная сеть. Нажмите кнопку "Далее", когда вы закончите.
Выберите "Подключиться к ресурсу Azure" в моем каталоге для метода подключения, а затем выберите Microsoft.KeyVault/vaults в раскрывающемся меню для типа ресурса. Выберите ваш ресурс в раскрывающемся меню. Целевой подресурс будет автоматически заполнен значением: хранилище. Нажмите кнопку "Далее", когда вы закончите.
На вкладке виртуальная сеть выберите виртуальную сеть и подсеть, созданную ранее, и оставьте остальные поля по умолчанию. Нажмите кнопку "Далее", когда вы закончите.
Перейдите на вкладки DNS и теги , принимая параметры по умолчанию. На вкладке «Просмотр и создание» нажмите «Создать», когда вы закончите.
После развертывания ресурса перейдите к вашему хранилищу ключей, затем в >, Сеть и >, где ваша частная конечная точка должна быть отображена с утвержденным состоянием подключения подключения. Если вы связываетесь с ресурсом Azure в другом каталоге, вам потребуется подождать, пока владелец ресурса утвердит запрос на подключение.
2. Разрешите вашу виртуальную сеть
Перейдите к портал Azure и найдите Azure Key Vault.
Выберите "Параметры>сети" и убедитесь, что вы находитесь на вкладке "Брандмауэры и виртуальные сети".
Выберите "Добавить виртуальную сеть>" "Добавить существующие виртуальные сети".
Выберите свою подписку в раскрывающемся меню, а затем выберите виртуальную сеть, созданную ранее, и выберите подсети.
Нажмите кнопку "Добавить ", а затем прокрутите страницу внизу страницы и нажмите кнопку "Применить ", чтобы сохранить изменения.
3. Запрос в хранилище закрытых ключей с использованием самостоятельно размещённого агента
В следующем примере агент, настроенный на виртуальной машине виртуальной сети, используется для запроса хранилища закрытых ключей через группу переменных:
pool: Self-hosted-pool
variables:
group: mySecret-VG
steps:
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Если вы предпочитаете не предоставлять входящий доступ Azure DevOps к хранилищу закрытых ключей, можно использовать задачу AzureKeyVault для запроса хранилища ключей. Однако необходимо убедиться, что вы разрешаете виртуальной сети, размещающей ваш агент, доступ в настройках брандмауэра хранилища ключей.
pool: Self-hosted-pool
steps:
- task: AzureKeyVault@2
inputs:
azureSubscription: '$(SERVICE_CONNECTION_NAME)'
keyVaultName: $(KEY_VAULT_NAME)
SecretsFilter: '*'
- task: CmdLine@2
inputs:
script: 'echo $(mySecret) > secret.txt'
- task: CopyFiles@2
inputs:
Contents: secret.txt
targetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Устранение неполадок
Если возникают следующие ошибки, выполните действия, описанные в этом разделе, чтобы устранить проблему:
Public network access is disabled and request is not from a trusted service nor via an approved private link.
Это означает, что общедоступный доступ отключен, и ни подключение к частной конечной точке, ни исключения брандмауэра не настроены. Выполните действия в разделе [#configure-inbound-access-from-a-self-hosted-agent] и настройте входящий доступ из Azure DevOps , чтобы настроить доступ к хранилищу закрытых ключей.
Request was not allowed by NSP rules and the client address is not authorized and caller was ignored because bypass is set to None Client address: <x.x.x.x>
Это сообщение об ошибке указывает, что общедоступный доступ к хранилищу ключей отключен, а опция Разрешить доверенным службам Microsoft обходить этот брандмауэр не установлена, но IP-адрес клиента не был добавлен в брандмауэр хранилища ключей. Перейдите к хранилищу ключей в портал Azure, а затем настройте>сеть и добавьте IP-адрес клиента в список разрешений брандмауэра.
Error: Client address is not authorized and caller is not a trusted service.
Убедитесь, что добавили диапазоны IPv4 вашего региона в список разрешённых IP-адресов хранилища ключей. Дополнительные сведения см. в статье "Настройка входящего доступа из Azure DevOps ". Кроме того, вы можете перейти к разделу Динамическое разрешение IP-адресов агентов, размещенных на платформе Microsoft, чтобы узнать, как добавить IP-адрес клиента в брандмауэр хранилища ключей во время выполнения.