【问题标题】:How can I generate a minimum viable AWS IAM policy from my terraform?如何从我的 Terraform 生成最小可行的 AWS IAM 策略?
【发布时间】:2022-12-20 19:53:22
【问题描述】:

我计划创建一个使用 GitHub 操作工作流运行的冒烟测试,以测试我的 EKS 集群基础设施作为代码,但我不知道我的 Terraform 环境成功应用所需的最低权限应该是什么。

出于安全原因,我不想将我的工作流程授予许多权限!

有没有一种简单的方法可以确定我需要哪些权限?

【问题讨论】:

    标签: amazon-web-services terraform amazon-iam policy aws-iam-policy


    【解决方案1】:

    使用 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+cSIGHUP iamlive 命令并将策略写入给定的 --output-file 参数。

    要了解如何使用此策略,请查看此项目,该项目为给定的 git 存储库设置一个 oidc 提供程序,允许该存储库访问此策略中定义的 AWS 资源。

    现在您可以在 AWS 端设置一个 oidc-provider 并验证您的工作流程以获得细粒度的权限。

    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

    【讨论】:

    • 不幸的是,这些实际上都不起作用,而且根本无法起作用,因为某些 AWS API 调用其他 API 并要求委托人拥有相关权限,而客户端却看不到相应的 API 调用,您还需要检查 Cloudtrail 日志。此外,您需要为状态创建、任何可能的状态修改以及所有状态删除运行所有这些,这是不可行的。找出小型 IAM 策略主要是反复试验,永远不会无缝运行。不过还是很有趣的想法。
    • 这种方法对我有用。非常简洁,我使用管理员凭据运行 terraform 并且 iamlive + CSM 能够捕获对 AWS 进行的所有 api 调用 + 生成 IAM 策略(运行我的 terraform 的最低权限)
    猜你喜欢
    • 2021-06-04
    • 2022-01-19
    • 2020-11-14
    • 2013-12-05
    • 2017-06-09
    • 1970-01-01
    • 2016-06-05
    • 2020-12-26
    • 1970-01-01
    相关资源
    最近更新 更多