我需要准确确定创建、更新和删除我们的一些地形模板使用的几个Terraform AWS资源所需的最低AWS IAM权限。这样,我们就可以提供客户运行地形模板所需的确切权限列表。
我的普通AWS用户是一名完全管理员,所以访问顾问对跟踪这项任务没有太大帮助。我想知道是否有更好的方法可以找到所需的需求,而不是创建一个没有权限的新用户,然后逐渐添加更多,直到我可以运行terraform?
是否有在线AWS资源详细说明在特定资源类型上运行CRUD操作所需的最低权限?有没有一份地形文件显示了这一点?当我对用户应用了通用*
管理规则时,有没有办法让访问顾问显示操作中使用的特定权限?
作为参考,这里是我需要查找的地形资源列表权限信息:
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提供程序是开源的。您可以访问插件并查看golang代码,然后查看进行了哪些SDK调用。这些对应于aws-iam权限操作。
对于aws_vpc
:https://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生命周期的每个阶段,这样您就可以了。