如何确定使用AWS Terraform资源所需的AWS IAM策略权限?

时间:2020-10-09 19:15:38

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

我需要确切确定创建,更新和删除一些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

1 个答案:

答案 0 :(得分: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生命周期的每个阶段,并且可能会没事。