这个AWS角色究竟做了什么?
最相关的位似乎是:
"Action": "sts:AssumeRole",
和
"Service": "ec2.amazonaws.com"
完整的角色在这里:
resource "aws_iam_role" "test_role" {
name = "test_role"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
来自:https://www.terraform.io/docs/providers/aws/r/iam_role.html
答案 0 :(得分:16)
要理解这一点的含义,有必要了解IAM角色如何工作的一些细节。
IAM角色在其结构中类似于用户,但它不是由一组固定的凭据访问,而是由假设角色使用,这意味着请求并获取临时API凭证,以允许采用授予该角色的权限进行操作。
The sts:AssumeRole
action是获取此类临时凭证的方式。为了使用它,用户或应用程序使用一些已经获得的凭证(例如用户的固定访问密钥)来调用该API,并且它返回(如果允许的话)一组新的凭证以充当角色。这是AWS服务可以代表您调用其他AWS服务的机制,IAM实例配置文件通过该机制在EC2中工作,用户可以通过该机制临时切换AWS控制台中的访问级别或帐户。
假设角色策略确定允许哪个主体(用户,其他角色,AWS服务)为此角色调用sts:AssumeRole
。在此示例中,EC2服务本身具有访问权限,这意味着EC2可以使用此角色代表您执行操作。
此角色资源单独无用,因为它没有任何关联的IAM策略,因此不会授予任何访问权限。因此,aws_iam_role
资源将始终伴随至少一个其他资源来指定其访问权限。有几种方法可以做到这一点:
aws_iam_role_policy
将策略直接附加到角色。在这种情况下,策略将描述允许角色执行的一组AWS动作,以及可选的其他约束。aws_iam_policy
创建独立策略,然后使用aws_iam_policy_attachment
将该策略与一个或多个角色,用户和组相关联。如果您希望将单个策略附加到多个角色和/或用户,则此方法很有用。aws_s3_bucket
上的policy
属性设置了特定于存储桶的策略;策略文档中的Principal
元素可用于指定哪些主体(例如角色)可以执行某些操作。 IAM是一个灵活的系统,支持几种不同的访问控制方法。哪种方法适合您将在很大程度上取决于您的组织如何处理安全性和访问控制问题:使用aws_iam_role_policy
和aws_iam_policy_attachment
从角色角度管理策略通常适用于具有集中安全性的组织监督整个帐户访问的团队,而特定于服务的策略将访问控制决策委派给负责每个单独对象的人员或团队。这两种方法都可以结合使用,作为深度防御策略的一部分,例如使用角色和用户级策略来实现&#34; border&#34;访问控制(控制来自外部的访问)和内部访问控制的服务级别策略(控制帐户中对象之间的交互)。
有关角色的更多详细信息,请参阅AWS IAM指南IAM Roles。另请参阅Access Management,其中介绍了IAM中访问控制的一般概念。