Как обеспечить соблюдение стандартов и контроля при использовании CDK Pipeline

CDK Pipelines - это отлично, особенно для развертываний между аккаунтами. Это позволяет разработчикам определять и настраивать конвейер CI / CD для своего приложения по своему усмотрению.

Но чтобы оставаться совместимым с SoC, мы должны убедиться, что необходимые элементы управления, как показано ниже, проверены / применяются.

  1. Перед этапом, на котором выполняется развертывание в рабочей среде для нескольких аккаунтов, должен присутствовать этап ручного утверждения.
  2. Прямое развертывание в производственной среде в обход среды разработки / подготовки запрещено.
  3. Тестовые случаи (модульные тесты / интеграционные тесты) и тесты InfoSec должны пройти перед развертыванием

Я знаю, что описанные выше вещи легко реализовать в конвейерах CDK, но я не совсем уверен, как гарантировать, что каждый конвейер CDK всегда соответствует этим стандартам.

Я могу думать о решениях ниже

  • Ограничения веток - слияние с главной веткой (которую отслеживает конвейер CDK) должно быть ограничено и разрешено только через запросы на вытягивание.
  • Тесты - добавьте модульные тесты или интеграционные тесты, которые подтверждают, что сгенерированный шаблон формирования облака имеет определенные ресурсы / свойства.
  • Создайте стандартный этап производства со всеми необходимыми элементами управления и оберните его в библиотеку, которую разработчики должны использовать в своем определении конвейера CDK, если они хотят развернуть его в производстве.

Но как обеспечить соблюдение вышеуказанного контроля в автоматическом режиме? Разработчики могут обойти указанные выше элементы управления, просто не указав их при определении конвейера. И мы не хотим полагаться на утверждающего, чтобы проверять эти вещи вручную.

Итак, подытоживая, возникает вопрос: как при использовании конвейеров CDK предоставить разработчикам максимальную настраиваемость и свободу в проектировании своего решения CI / CD, гарантируя, что ограничения SoC и обязательные элементы управления проверяются и применяются в автоматическом режиме?


comment
Вы не можете предоставить им разрешения IAM для развертывания стеков, а развертывать конвейерный стек самостоятельно (с помощью любого автоматизированного процесса) только в том случае, если он правильно использует вашу библиотеку.   -  person kichik    schedule 23.01.2021
comment
@kichik Это уничтожит всю цель использования конвейеров CDK - мы хотим, чтобы разработчики могли указывать конвейер в соответствии с их требованиями - при условии, что он соответствует установленным стандартам, таким как развертывание в учетной записи prod, необходимо утверждать вручную.   -  person narayan    schedule 24.03.2021
comment
FTR - github.com/aws/ aws-cdk-rfcs / blob / master / text / документирует дизайн конвейеров CDK.   -  person narayan    schedule 24.03.2021
comment
Они все еще не могут спроектировать трубопровод. Они просто не могут развернуть его напрямую, не пройдя сначала ваши тесты.   -  person kichik    schedule 24.03.2021


Ответы (2)


Агент Open Policy Agent может быть полезен для проверки наличия внутренних правил на соответствие настраиваемым политикам в конвейере.

https://aws.amazon.com/blogs/opensource/realize-policy-as-code-with-aws-cloud-development-kit-through-open-policy-agent/

person Suhaib    schedule 12.02.2021
comment
Спасибо, Сухайб. Это очень полезно. Стадия валидации, которая запускает проверки с использованием Open Policy Agent, была бы одним из потенциальных способов решения заявленной проблемы. Но, к сожалению, он также будет страдать от той же проблемы - как добиться, чтобы разработчики всегда добавляли этот этап при построении своего конвейера CI / CD с использованием CDK? - person narayan; 14.02.2021
comment
Есть 2 способа: Процесс 1. Разрешить только одобренные пользовательские модули NPM / PIP, созданные из AWS CDK. В процессе развертывания этих модулей в Artifactory (частный репозиторий) вы можете обеспечить соблюдение требований безопасности с помощью OPA. Таким образом, вы можете со временем создать целую библиотеку шаблонов. Процесс 2. Разрешите разработчикам использовать общедоступные модули AWS CDK и на этапе развертывания запустить «cdk synth› Templete.yml »перед запуском« cdk deploy ». Это позволяет запускать классические инструменты линтинга облачной информации, такие как cfn-lint, на этой облачной информации, созданной aws cdk. Вы можете настроить свои собственные правила безопасности в cfn-lint. - person Suhaib; 17.02.2021
comment
Я согласен, что процесс-1 - это один из вариантов. Но я не уверен, что полностью понимаю Процесс-2. Как мне убедиться, что разработчики настроили этап развертывания для запуска cdk synth > template.yml, а затем запуска cfn-lint? - person narayan; 18.02.2021
comment
Вы создаете конвейер таким образом, что этап развертывания управляется инженерами, а не разработчиками. Фактически вы можете разбить этап развертывания на 2 (этап безопасности и этап развертывания). Оба эти этапа поддерживаются инженерно-техническим обеспечением. Разработчики должны управлять только этапом сборки, на котором модули npm / pip извлекаются из Artifactory (репозиторий частных пакетов) и выполняются этапы сборки. Роль IAM на этапе сборки не должна иметь доступа для развертывания. Если вы используете Codepipeline, где каждый этап представляет собой отдельный Codebuild. Спецификация сборки для этапа сборки помещается разработчиком в код. Остальные спецификации сборки управляются инженерами. - person Suhaib; 18.02.2021
comment
Спасибо за предложение @Suhaib. Хочу отметить, что мы очень небольшая команда без каких-либо четких различий между Dev / Eng и, я думаю, именно поэтому нам нравится CDK Pipelines - позволяет легко указать конвейер с минимальными усилиями. Похоже, что предлагаемый вами подход уберет простоту конвейера, от чего мы в настоящее время многое выигрываем и не уверены, хотим ли мы отказаться от него. В настоящее время я думаю о том, чтобы иметь какой-нибудь крючок. который выполняет проверку и блокирует развертывание. - person narayan; 24.03.2021

После долгих исследований пришел к выводу, что реализация этих проверок с помощью " правило "nofferol"> пользовательское правило - это настраиваемое правило. лучший подход.

Допустим, мы хотим убедиться, что

Этап ручного утверждения всегда присутствует в каждом конвейере, у которого есть этап, который развертывается в прод.

Нам нужно

  1. Включите AWS Config и настройте его для записи всех изменений в Codepipeline.
  2. Create a custom AWS Config rule using AWS Lambda function (say pipeline-compliance-checker)
    1. The lambda function gets triggered on every config change of any codepipeline and receives the latest config of the pipeline in question
    2. Он анализирует последнюю конфигурацию конвейера и проверяет, есть ли у конвейера этап утверждения вручную перед этапом, который развертывается в prod. Если да, конвейер считается СОВМЕСТНЫМ, иначе NON_COMPLIANT
  3. Создайте правило AWS EventBridge, чтобы получать уведомление в теме SNS (например, несоответствие конвейера), когда любой конвейер помечен как NON_COMPLIANT - (doc)
  4. Создайте еще одну функцию AWS Lambda (скажем, pipeline-compliance-enforcer), которая подписана на эту тему SNS. Он останавливает рассматриваемый несоответствующий конвейер (если он находится в состоянии НАЧАЛО), а затем отключает входящий переход к этапу, который развертывается в prod. При необходимости мы также можем удалить конвейер здесь.

Протестируйте указанную выше настройку, и она соответствует требованиям.

Позже также стало известно, что AWS говорит об одном и том же решении этой проблемы в этом выступлении - Безопасность конвейера CI / CD: расширенная Рекомендации по непрерывной доставке

person narayan    schedule 08.04.2021