Инфраструктура как код прошла долгий путь. Если вы работаете с Azure, есть много вариантов того, как настроить ваш CI/CD для развертывания вашей инфраструктуры. В этом сообщении мы рассмотрим, как надежно развернуть нашу инфраструктуру в Azure, используя действия GitHub с шаблонами ARM и Key Vault Azure. Цель этого поста в блоге состоит не только в том, чтобы подчеркнуть важность автоматизации вашего конвейера выпуска, но также и то, как сделать это безопасно, используя правильные инструменты для работы. Безопасные разработки (Secdevops) ftw.
Предварительные условия
Чтобы следовать, вам понадобится следующее:
- Учетная запись GitHub ( бесплатно )
- Подписка на Azure ( бесплатно с кредитом 200 долларов США
Настройка Azure Ad и Key Pault для развертывания
Первое, что нам нужно сделать, это подготовить нашу подписку Azure для развертывания. Поскольку задачи развертывания будут выполняться как действие GitHub, нам нужна учетная запись, которая имеет правильные разрешения для развертывания в Azure. Нам также нужно будет настроить хранилище ключа Azure для хранения всей нашей конфиденциальной информации, такой как клавиши API, пароли и секреты, которые будут использоваться для настройки наших ресурсов Azure.
Мы начнем с создания основной учетной записи услуги. Если вы впервые сталкиваетесь с принципалами обслуживания, этот пост в блоге Отличная работа, объясняющая, что они есть и как их создать. Однако в этом случае команды немного отличаются, так как нам нужно настроить принцип службы для действий GitHub, и в синтаксисе существует небольшая разница — и вы можете использовать только CLI Azure для этого ( github Docs ) Анкет
Откройте сеанс Azure Cloud Shell или локальный Azure CLI и введите следующее:
az ad sp create-for-rbac --name "{sp-name}" --sdk-auth
Это должно генерировать следующий выход. Обязательно скопируйте это где -нибудь в безопасности, так как нам понадобится позже.
Затем нам необходимо обновить Vault Azure Key Vault, чтобы позволить использовать нашу принципала нашего сервиса для развертывания и иметь возможность получить секреты из Key Vault. В CLI введите следующее:
az keyvault set-policy --name "" --spn --secret-permissions list get
Вывод должен выглядеть так (некоторые детали опущены) 0
Мы также можем подтвердить, что это сработало путем проверки Политики доступа В нашем ключевом хранилище
Наконец, мы должны убедиться, что наше ключевое хранилище установлено для развертывания. В типе CLI следующее:
az keyvault update --name "ContosoKeyVault" --resource-group "ContosoResourceGroup" --enabled-for-deployment "true"
Это должно генерировать кучу JSON, но важный бит выделен ниже:
И опять же, мы можем подтвердить, что наше ключевое хранилище было настроено правильно, проверяя на портале:
На этом завершается необходимая конфигурация на стороне лазурности. Мы создали основную учетную запись услуги (которая является объектом Azure AD), которая может использоваться для развертывания и имеет правильные разрешения для доступа к Key Vault. Наше ключевое хранилище также было настроено, чтобы разрешить развертывание ARM.
Создайте шаблоны ARM, которые работают с Key Vault
Шаблоны ARM — это файлы JSON, которые описывают инфраструктуру, которую мы хотим развернуть в Azure. VS Code имеет несколько отличных расширений, чтобы позволить вам создавать и редактировать шаблоны ARM. Для этого примера я только развертываю сервер SQL Azure и базу данных. Поскольку Azure SQL требует учетной записи администратора, мне обычно нужно предоставить имя пользователя и пароль администратора и пароль. Тем не менее, проверка в этой информации в управление источником не является идеальной, поскольку она может поставить под угрозу безопасность нашей инфраструктуры. Кроме того, мы хотим не делать эту информацию легко доступной для всех, кто работает в проекте. В идеале, секреты должны храниться вдали от кода и разработчиков и быть доступными только для нескольких администраторов. По этой причине ключевое хранилище является идеальным решением. Он обеспечивает правильную безопасность и поставляется с сильной политикой и аудитом, которые предприятия могут использовать для обеспечения того, чтобы их решения оставались доступными только для правильных счетов.
Шаблоны ARM состоят из двух (или более) файлов. Определение инфраструктуры и файл параметров. Мы будем обновлять параметры JSON, чтобы вытащить необходимые секреты непосредственно из Key Vault, используя учетную запись Принципальной службы, которую мы создали ранее.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "location":{ "value": "East US" }, "serverName": { "value": "cmspdemosqlserver" }, "administratorLogin": { "reference": { "keyVault": { "id": "/subscriptions/d8011108-23b2-40d8-8bc4-1f3f77abe795/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/cmdeploymentdemo" }, "secretName": "sqlAdministratorLogin" } }, "administratorLoginPassword": { "reference": { "keyVault": { "id": "/subscriptions/d8011108-23b2-40d8-8bc4-1f3f77abe795/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/cmdeploymentdemo" }, "secretName": "sqlAdministratorLoginPassword" } } } }
Обратите внимание, как мы определяем два секретных параметра, ссылаясь на Key Vault вместо жесткого кодирования.
Настройте действие GitHub для безопасного входа в Azure
Наши шаблоны рук должны быть зарегистрированы в репозитории GitHub. В той же репо, мы определим действие GitHub для развертывания нашего шаблона рук. Однако первое, что нам нужно сделать, это позволить наше действие GitHub аутентифицировать подлинность в Azure, используя принцип службы, который мы создали ранее.
Возьмите JSON, который был сгенерирован AZ AD SP CREATE ...
Команда (я сказал вам сохранить его где -нибудь в безопасности, помните?). Если вы потеряли его, не беспокойтесь, просто повторно затроните команду:
az ad sp create-for-rbac --name test3 --sdk-auth
Примечание: это обновит текущий Clientsecret
Поэтому, если вы используете его в другом месте, вам нужно будет обновить эти задачи соответственно. Однако этот SP в идеале должен использоваться только для этой задачи развертывания
В вашем репо github перейдите к настройкам -> Секреты и создайте новый секрет.
Новое секретное имя должно быть Azure_credentials
и значение должно быть полным JSON нашей учетной записи SP
Создайте действие GitHub, чтобы развернуть шаблон ARM
Действия GitHub поступают с рядом предопределенных шаблонов, и есть Отличная документация Если вы хотите создать новые действия с нуля. В этом случае нам нужно два основных действий/шага:
- Azure login
- Развертывание Azure Arm
Yaml
Код (??) для нашего действия прикреплен ниже »
name: CI # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the main branch on: push: branches: [ main ] pull_request: branches: [ main ] # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 - name: Login via Az module uses: azure/login@v1 with: creds: ${{secrets.AZURE_CREDENTIALS}} enable-AzPSSession: true # Runs a single command using the runners shell - name: Deploy Azure Resource Manager (ARM) Template uses: Azure/arm-deploy@v1.0.1 with: # Provide the scope of the deployment. Valid values are: 'resourcegroup', 'managementgroup', 'subscription' scope: resourcegroup # Provide the Id of the subscription which should be used, only required for resource Group or Subscription deployments. subscriptionId: d8011108-0000-0000-0000-1f3f77abe795 # Provide the name of a resource group, only required for resource Group deployments. resourceGroupName: myResourceGroup # Specify the path or URL to the Azure Resource Manager template. template: ./azuredeploy.json # Supply deployment parameter values. parameters: ./azuredeploy.parameters.kv.json - name: Azure logout run: az logout
Теперь мы можем сохранить и запустить действие. Если все было настроено правильно, это ожидаемый результат в журналах действий
Резюме
Как вы можете видеть, с небольшим количеством предварительной настройки и конфигурации, мы можем создать безопасный конвейер CI/CD, используя Vault Key Vault, Azure AD и GitHub, полностью устранив необходимость управления секретами или клавишами.
Оригинал: «https://dev.to/425show/secure-devops-with-github-actions-and-azure-ad-no-more-credentials-5f1p»