【发布时间】:2022-12-20 19:53:22
【问题描述】:
我计划创建一个使用 GitHub 操作工作流运行的冒烟测试,以测试我的 EKS 集群基础设施作为代码,但我不知道我的 Terraform 环境成功应用所需的最低权限应该是什么。
出于安全原因,我不想将我的工作流程授予许多权限!
有没有一种简单的方法可以确定我需要哪些权限?
【问题讨论】:
标签: amazon-web-services terraform amazon-iam policy aws-iam-policy
我计划创建一个使用 GitHub 操作工作流运行的冒烟测试,以测试我的 EKS 集群基础设施作为代码,但我不知道我的 Terraform 环境成功应用所需的最低权限应该是什么。
出于安全原因,我不想将我的工作流程授予许多权限!
有没有一种简单的方法可以确定我需要哪些权限?
【问题讨论】:
标签: amazon-web-services terraform amazon-iam policy aws-iam-policy
使用 CSM (Client Side Metrics),您可以监控客户端哪些 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 配置文件,您可以运行以下命令来监听所有事件。
不要忘记 SIGHUP (ctrl+c) 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 参数。
要了解如何使用此策略,请查看此项目,该项目为给定的 git 存储库设置一个 oidc 提供程序,允许该存储库访问此策略中定义的 AWS 资源。
现在您可以在 AWS 端设置一个 oidc-provider 并验证您的工作流程以获得细粒度的权限。
OIDC 如何帮助加强您的工作流程安全性
在 AWS 端配置什么
【讨论】: