Перевод статьи подготовлен в преддверии старта курса "Infrastructure as a code in Ansible".
Также хотим порекомендовать вам супер-интенсив IaC Ansible за 5 дней которого вы научитесь делать выкатку кода простым и приятным процессом в духе "нажми одну кнопку", делать сетап новой машины полностью автоматизированным,автоматически поддерживать актуальными все проверки и триггеры в мониторинге и узнавать о проблемах еще до того, как они наступили и многое другое.
В моей последней статье (ссылка) мы рассмотрели модель управления инфраструктура как код (IaC), ее важность, причины ее применения многими компаниями, а также возможные способы повышения безопасности конвейера IaC.
Известно, что разработчики облачных систем нередко работают в условиях сильного давления, когда сроки поджимают и выдавать результат нужно быстро. В силу этого зачастую они не уделяют должного внимания написанию кода и конфигурации. А отсутствие надлежащих конфигураций является источником брешей в системе безопасности. Из этого следует, что в ходе всего процесса разработки архитектуры обязательно нужно полагаться на передовые методы проектирования, даже если сроки очень сжатые.
Теперь давайте разберем реальный пример того, как можно автоматически проконтролировать корректность методов разработки в конвейерах IaC для среды AWS посредством сотен проверок на соответствие правиламAWS Well-Architected Framework(безопасность, оптимизация затрат, производительность, высокие стандарты профессиональной деятельности и надежность) и другим стандартам.
Вот общее представление того, над чем мы будем работать:
Исходные требования
Для формирования нужной нам среды вам понадобятся следующие элементы:
-
Среда VSCode IDE, установленная на компьютере, ссылка для загрузки.
-
Установленный подключаемый модульCloud One Conformityв среде VSCode ссылка.
-
Учетная запись Cloud One Conformityзарегистрируйтесь и получите бесплатный пробный период.
-
Учетная запись AWSзарегистрируйтесь, если у вас ее нет.
Приступим к созданию вашего первого конвейера инфраструктура как код (IaC) с проверкой применения правильных методов разработки!
Этап1. Установка подключаемого модуля безопасности в среду программирования и получение токена API для сканирования шаблонов CloudFormation
После установки среды VSCode IDE не забудьте также установить подключаемый модуль Cloud Conformity Security, как показано здесь:
-
VSCode Marketplace подключаемый модуль Cloud ConformityССЛКА
Создайте свою учетную запись в Cloud One Conformity, воспользовавшись приведенной здесь ссылкой (создать учетную запись), войдите в нее и сформируйте токен API.
В среде Cloud Conformity: щелкнитеимя пользователявверху справа и выберите User Settings (Настройки пользователя)API Keys (Ключи API)New API Key (Создать ключ API), чтобы создать ключ API, который будет использоваться в подключаемом модуле VSCode. Обязательно скопируйте ключ и сохраните его в надежном месте. Получить его еще раз невозможно.
Скопируйте ключ API и вернитесь в среду VSCode
1. Щелкните значок расширений (слева) и нажмитеExtension Settings (Настройки расширений) для записи сканера шаблонов Cloud Conformity Template Scanner.
2. В среде Cloud Conformity выберитеEdit in settings.json (Изменить файл settings.json). Перейдите к разделу ApiKey.
3. Введите ключ API, сформированный на предыдущем шаге, и сохраните изменения.
Теперь шаблоны CloudFormation можно сканировать с использованием сотен проверок на соответствие правилам AWS Well-Architected Framework и другим стандартам, гарантируя превосходное качество разрабатываемой облачной инфраструктуры.
Вот пример шаблона CloudFormation, не соответствующего передовым методам разработки, который вы можете протестировать:
Чтобы испытать расширение в работе, откройте указанный выше шаблон CloudFormation с помощью VSCode, после чего откройтепалитру команд, нажав:
-
macOS: + + P
-
Windows/Linux:Ctrl + Shift + P
Найдите элемент Cloud One Conformity: Scan the Current Open Template (Cloud One Conformity: сканировать открытый шаблон) и нажмите <Enter>, после чего автоматически начнется сканирование этого шаблона CloudFormation:
Результат сканирования появится на второй вкладке под названием Scan Result (Результат сканирования), как на приведенном ниже изображении. Также можно воспользоватьсяоблачной базой знаний, которая поможет лучше понять выявленные нарушения рекомендуемых методов, а также узнать способы их устранения в вашем шаблоне CloudFormation или в производственных средах:
Превосходно, первый этап автоматизации безопасности IaC завершен.
Этап2. Создание конвейера CI/CD средствами AWS с последующей интеграцией в него сканера шаблонов Conformity
На первом этапе мы показали, как можно выполнять сканирование перед отправкой новой версии кода в репозиторий. Однако иногда разработчик может забыть сделать это и сохранить шаблон CFT, в котором есть проблемы. Сейчас мы создадим шлюз безопасности, который поможет предотвратить появление новых ресурсов, не соответствующих методам разработки, рекомендуемым вашей компанией.
С помощью такого шлюза можно отслеживать и выполнять аудит всех изменений в реальном времени и только затем производить развертывание в среду AWS.
В этом разделе мы покажем, как использовать сканер шаблонов в конвейере CI/CD сAWS CodeCommit,AWS CodeBuild иAWS CodePipeline. Приступим.
CodeCommit будет использоваться в качестве репозитория для размещения нашего кода. Многие люди и компании со всего мира используют для этого GitHub, GitLab и BitBucket. Чтобы ваша среда VSCode могла перемещать код в CodeCommit, нужно будет кое-что настроить.
Создание репозитория Git в AWS CodeCommit
-
Создайте пользователя IAM с разрешением использовать CodeCommit и доступом только с помощью ключа SSH. (Сведения о разрешении для Git и рекомендации приведены по этойссылкеот AWS.)
Перейдите в раздел Security credentials (Учетные данные безопасности) HTTPS Git credentials for AWS CodeCommit (Учетные данные Git HTTPS для AWS CodeCommit), чтобы сформировать учетные данные.
Загрузите учетные данные и сохраните их в надежное место.
Подробнее об этой процедуре на сайте AWS ССЛКА.
-
Создайте репозиторийAWS CodeCommit.
Можно выполнить команду git clone на своем компьютере и легко перенести на него git config.
git clone
https://git-codecommit.us-east-1.amazonaws.com/v1/repos/{ИМЯ ВАШЕГО
РЕПОЗИТОРИЯ}
Теперь можете воспользоваться собственным шаблоном CloudFormation или взять плохой шаблон CloudFormation, который я предоставил ранее, для передачи в AWS CodeCommit.
git add .
git commit -m "First Commit"
git push
Итак, первое сохранение в AWS CodeCommit выполнено. Теперь давайте перейдем к AWS CodeBuild и AWS CodePipeline.
Создание CodeBuild для автоматического сканирования шаблонов CloudFormation
Решение AWS CodeBuild очень похоже на GitHub Actions, Azure DevOps и GitLab. Это технология CI/CD, с помощью которой можно создавать новые проекты, автоматизировать процессы и развертывать новые приложения или инфраструктуры.
Мы будем использовать CodeBuild с определенным образом контейнера для запуска сканера шаблонов Conformity с целью выявления возможных проблем перед развертыванием новой IaC в производственной среде.
-
Создание проекта построения в AWS CodeBuild
Я буду использовать стандартный образ от AWS, но вы можете взять другой образ управления или создать собственный для автоматизации подобного типа.
Вот конфигурация для приведенного ниже образа:
Environment image: Managed ImageOperationg System: Amazon Linux 2Runtime: StandardImage: aws/codebuild/amazonlinux2-x8664-standard:3.0Image version: Always use the latestEnvironment type: LinuxService Role: NewRole Name: <NEW ROLE NAME>
Вот конфигурация для приведенного ниже образа:
Environment VariablesCC_API_KEY = <YOUR API KEY FROM CLOUD ONE - CONFORMITY>CC_REGION = <REGION SELECTED TO CREATE YOUR CONFORMITY TENANT>CC_RISK_LEVEL = <RISK LEVEL NOT BE ACCEPT>CFN_TEMPLATE_FILE_LOCATION = <YOUR CLOUDFORMATION TEMPLATE PATH>STACK_NAME = <THE CLOUDFORMATION STACK NAME
Вот конфигурация для приведенного ниже образа:
Build specifications: Insert build commandsBuild Commands:version: 0.2phases: install: runtime-versions: python: 3.7 pre_build: commands: - pip3 install awscli --upgrade --user build: commands: - pip3 install -r https://raw.githubusercontent.com/OzNetNerd/Cloud-Conformity-Pipeline-Scanner/master/requirements.txt - wget https://raw.githubusercontent.com/OzNetNerd/Cloud-Conformity-Pipeline-Scanner/master/src/scanner.py - CC_API_KEY=`jq -r '.CC_API_KEY' <<< $CC_API_KEY` - python3 scanner.py post_build: commands: - aws cloudformation deploy --template-file $CFN_TEMPLATE_FILE_LOCATION --stack-name $STACK_NAME --no-fail-on-empty-changese
Ссылка на Buildspec.yml
на GitHub
https://raw.githubusercontent.com/fernandostc/IaC-Security-Automation/master/buildspec.yml
Примечание. Сканер шаблонов, который я использую в этом примере, был создан Уиллом Робисоном (Will Robison) архитектором решений из компании Trend Micro вот ссылка на этот проект на GitHub:https://github.com/OzNetNerd/Cloud-Conformity-Pipeline-Scanner
Теперь нажмите Create build project (Создать проект построения), чтобы завершить процесс.
Создание секретного ключа в диспетчере секретов для хранения ключа API Cloud One Conformity
Теперь нажмите Store (Сохранить), чтобы завершить процесс.
Важно!Не забудьте создать политику, чтобы назначить своей службе ролей в CodeBuild следующее разрешение, с которым CodeBuild сможет получать значение от SecretManager:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:us-east-1:<AWS Account ID>:secret:<Secret Key ARN>" } ]}
Создание AWS CodePipeline для автоматизации триггера запуска сканирования шаблонов
AWS CodePipeline поможет автоматизировать процесс запуска сканера шаблонов после каждого обновления кода IaC. В CodePipeline можно создать несколько этапов, однако наш пример простой, для него достаточно одного этапа. Он очень прост для понимания.
Создадим новый конвейер в AWS CodePipeline
Можно задать имя конвейеру и создать новую роль службы, если до этого у вас ни одной роли службы не было.
Теперь нужно задать следующие параметры с учетом созданного ранее CodeCommit:
Source Provider (Поставщик исходного кода): <AWS
CodeCommit>Repository Name (Имя репозитория):
<CloudOneConformity или заданное вами ранее имя
репозитория>Branch Name (Имя ветви): <master>
Теперь нужно задать информацию о процессе построения:
Build provider (Поставщик построения): <AWS
CodeBuild>Project Name (Имя проекта):
<IaC-Security-Automation или заданное вами ранее имя
репозитория>
В данном случае мы не планируем использовать команды развертывания, поскольку развертывание мы выполняем внутри CodeBuild в рамках одного из этапов.Можно нажать Skip the deploy stage (Пропустить этап развертывания).
Можно просмотреть конфигурацию и нажать Create pipeline (Создать конвейер).
Тестирование автоматизированного конвейера
1. Создайте собственный шаблон CloudFormation или воспользуйтесь вот этим:ссылка.
2. Просканируйте шаблон CloudFormation с помощью подключаемого модуля Cloud One Conformity и проверьте результат.
Удостоверьтесь, что остались некоторые проблемы, которые нужно устранить перед сохранением в производственную среду.
3. Шаблон можно отправить в репозиторий, чтобы проверить его работоспособность в конвейере. Это своеобразный тест перед исправлением всех проблем, найденных в шаблоне CloudFormation.
4. Сохраните новый код в CodeCommit:
git add .git commit -m "Test Automation"git push
5. Сохранение нового кода в CodeCommit приведет к запуску CodePipeline.
После завершения процесса автоматизации вы увидите, что оба этапа выполнены успешно.
ПРИМЕЧАНИЕ.В случае возникновения каких-либо проблем проверьте процесс построения. Перейдите к последнему построению и просмотрите его журналы. Они очень полезны для отладки в случае возникновения затруднений.
Заключение
Итак, у вас есть полностью автоматизированный конвейер IaC с AWS CodeCommit, AWS CodeBuild, AWS CodePipeline и Cloud One Conformity, позволяющий анализировать всевозможные отклонения конфигурации в ходе процесса создания шаблонов CloudFormation.
Надеюсь, эта статья поможет вам и вашей группе не отступать в ходе разработки от передовых методов построения архитектур и эффективно работать над инновационными облачными решениями в сжатые сроки. Если вам нужна дополнительная информация, обязательно свяжитесь со мной!
Благодарности
Хочу сказать БОЛЬШОЕ спасибо некоторым людям, которые своими потрясающими отзывами помогли мне сделать эту статью лучше:
-
Raphael Bottino (Рафаэль Боттино)
-
Melissa Clow (Мелисса Клоу)
Если эта статья была вам полезна, жмите стрелочку вверх и пишите комментарии.
- Узнать подробнее о курсе"Infrastructure as a code in Ansible".
- Записаться на супер-интенсив IaC Ansible