Как создать минимально жизнеспособную политику AWS IAM из моего terraform?

Я планирую создать дымовой тест, который запускается с использованием рабочего процесса действий GitHub, чтобы протестировать инфраструктуру моего кластера EKS как код, но я не знаю, какие минимальные разрешения требуются моей среде Terraform для успешного применения.

Я НЕ хочу давать своему рабочему процессу множество разрешений из соображений безопасности!

Есть ли простой способ выяснить, какие разрешения мне требуются?

1 ответ

Используя CSM (клиентские метрики ), вы можете отслеживать на стороне клиента, какие вызовы API выполняются из ваших скриптов terraform.

Это можно включить с помощью:

      export AWS_CSM_ENABLED=true

При запуске с этого терминала всего, что взаимодействует с AWS, событие будет получено на локальном порту 31000.

Теперь откройте второй терминал и запустите netcat для мониторинга трафика на сервере мониторинга.

      nc -kluvw 1 localhost 31000

В исходном терминале, куда вы экспортировали переменную, попробуйте запустить команду AWS. Например

      aws sts get-caller-identity

В другом терминале теперь вы видите, какие вызовы API связаны с этой командой. Например:

      {"Version":1,"ClientId":"","Type":"ApiCallAttempt","Service":"STS","Api":"GetCallerIdentity","Timestamp":1652343233117,"AttemptLatency":116,"Fqdn":"sts.eu-west-1.amazonaws.com","UserAgent":"aws-cli/2.6.3 Python/3.9.12 Darwin/21.4.0 source/x86_64 prompt/off command/sts.get-caller-identity","AccessKey":"**********","Region":"eu-west-1","SessionToken":"*******
{"Version":1,"ClientId":"","Type":"ApiCall","Service":"STS","Api":"GetCallerIdentity","Timestamp":1652343233116,"AttemptCount":1,"Region":"eu-west-1","UserAgent":"aws-cli/2.6.3 Python/3.9.12 Darwin/21.4.0 source/x86_64 prompt/off command/sts.get-caller-identity","FinalHttpStatusCode":200,"Latency":117,"MaxRetriesExceeded":0}

Однако это по-прежнему не говорит вам, какие именно разрешения IAM вам понадобятся. К счастью, есть еще один инструмент, который позволяет вам в реальном времени перехватывать все вызовы API и записывать их в политику AWS в формате json. См.: https://github.com/iann0036/iamlive .

С ~/.aws/configprofile вы можете запустить следующее, чтобы прослушивать все события.

Не забудьте () netcat, так как только один процесс может прослушивать порт.

      iamlive --set-ini --profile my-profile --output-file policy.json --refresh-rate 5

Или просто используя defaultесли вы не используете профиль.

      iamlive --set-ini --output-file policy.json --refresh-rate 5

Теперь в терминале с AWS_CSM_ENABLEDэкспортирован, вы можете запускать свои команды terraform. Теперь вы увидите, что все разрешения добавлены в политику.

Когда закончите, вы можете сделать ctrl+cк SIGHUPв iamliveкоманду и запишите политику в указанный --output-fileаргумент.

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

Теперь вы можете настроить oidc-провайдера на стороне AWS и аутентифицировать свой рабочий процесс, чтобы получить подробные разрешения.

Как OIDC помогает повысить безопасность вашего рабочего процесса

https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect

Что настроить на стороне AWS

https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services

Другие вопросы по тегам