【问题标题】:How to determine the AWS IAM policy permissions needed to use AWS Terraform Resources?如何确定使用 AWS Terraform 资源所需的 AWS IAM 策略权限?
【发布时间】:2020-10-10 12:17:44
【问题描述】:

我需要准确确定创建、更新和删除我们的某些 terraform 模板使用的多个 Terraform AWS 资源所需的最低 AWS IAM 权限。这样我们就可以提供客户运行我们的 terraform 模板所需的准确权限列表。

我的普通 AWS 用户是一个完整的管理员,因此访问顾问对于跟踪此任务并没有太大帮助。在我可以运行 terraform 之前,我没有创建一个没有权限的新用户并逐渐添加更多用户,而是想知道是否有更好的方法来找到所需的需求?

是否有在线 AWS 资源详细说明在特定资源类型上运行 CRUD 操作所需的最低权限? terraform 中是否有显示此内容的文档?当我对用户应用一般的* 管理规则时,有没有办法让访问顾问显示操作中使用的特定权限?

这里是我需要查找权限信息的 terraform 资源列表供参考:

aws_vpc
aws_iam_instance_profile
aws_iam_policy
aws_iam_role
aws_iam_role_policy_attachment
aws_eip
aws_instance
aws_lb_target_group_attachment
aws_network_interface
aws_security_group
aws_internet_gateway
aws_lb
aws_lb_listener
aws_lb_target_group
aws_route
aws_route
aws_route_table_association
aws_subnet
aws_autoscaling_group
aws_launch_configuration

【问题讨论】:

  • 这是一个具有挑战性的问题,尤其是当您对 AWS 资源使用任何形式的抽象时。通常,您会构建您需要的内容,然后查询 CloudTrail 以了解涉及哪些 API。

标签: amazon-web-services amazon-ec2 terraform amazon-iam amazon-vpc


【解决方案1】:

aws 提供程序是开源的。您可以转到插件并查看 golang 代码并查看进行了哪些 SDK 调用。这些对应于 aws iam 权限操作。

对于aws_vpchttps://github.com/terraform-providers/terraform-provider-aws/tree/master/aws/resource_aws_vpc.go

这很乏味,但我认为不存在这样的编译列表。但这是查看正在拨打什么电话的非常明确的方式。随着提供程序的更新,它可能需要维护。

此外,提供程序本身可能使用的调用也会在源代码中。

这并不一定像听起来那么辛苦。我看到他们在整个文件中给客户端会话的名称是conn。所有操作都将作为该结构上的方法访问。所以我快速搜索了所有conn.。然后我使用 vscode 的 cmd+shift_l 热键来多选所有实例。然后我使用 cmd+alt+rightarrow。这将选择所有出现的conn.<method>

然后我粘贴到一个新文件中。使用 vscode 插件删除非唯一行。然后我排序,只是因为我想。我得到:

conn.AssociateVpcCidrBlock
conn.CreateVpc
conn.DeleteVpc
conn.DescribeNetworkAcls
conn.DescribeRouteTables
conn.DescribeSecurityGroups
conn.DescribeVpcAttribute
conn.DescribeVpcClassicLink
conn.DescribeVpcClassicLinkDnsSupport
conn.DescribeVpcs
conn.DisableVpcClassicLink
conn.DisableVpcClassicLinkDnsSupport
conn.DisassociateVpcCidrBlock
conn.EnableVpcClassicLink
conn.EnableVpcClassicLinkDnsSupport
conn.ModifyVpcAttribute
conn.ModifyVpcTenancy

正如我所提到的,提供者可能有一些它需要的基线权限。我转到provider_test.go 文件并重复该方法以找到这些权限。所以这些动作也应该加进去。

conn.DescribeOrganization
conn.DescribeAccountAttributes
conn.DescribeSubnets

如果你使用 cloudtrail 日志,你最好调用每个资源的 CRUD 生命周期的每个阶段,你可能会没事。

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 2020-12-26
    • 2019-04-18
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2015-08-15
    • 2021-02-15
    相关资源
    最近更新 更多