Как создать минимально жизнеспособную политику 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/config
profile вы можете запустить следующее, чтобы прослушивать все события.
Не забудьте () 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 помогает повысить безопасность вашего рабочего процесса
Что настроить на стороне AWS