Terraform:AssumeRole:服务:ec2做什么?

时间:2017-06-19 05:48:11

标签: amazon-web-services terraform

这个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

1 个答案:

答案 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_policyaws_iam_policy_attachment从角色角度管理策略通常适用于具有集中安全性的组织监督整个帐户访问的团队,而特定于服务的策略将访问控制决策委派给负责每个单独对象的人员或团队。这两种方法都可以结合使用,作为深度防御策略的一部分,例如使用角色和用户级策略来实现&#34; border&#34;访问控制(控制来自外部的访问)和内部访问控制的服务级别策略(控制帐户中对象之间的交互)。

有关角色的更多详细信息,请参阅AWS IAM指南IAM Roles。另请参阅Access Management,其中介绍了IAM中访问控制的一般概念。