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

Sno*_*ash 16 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
}
Run Code Online (Sandbox Code Playgroud)

来自:https://www.terraform.io/docs/providers/aws/r/iam_role.html

Mar*_*ins 31

要理解这一点的含义,有必要了解IAM角色如何工作的一些细节.

IAM角色与其结构中的用户类似,但不是由一组固定的凭据访问,而是通过假定角色来使用它,这意味着请求并获取允许采取具有以下权限的特权的临时API凭证被授予该角色.

sts:AssumeRole操作是获取此类临时凭证的方式.要使用它,用户或应用程序使用一些已获取的凭据(例如用户的固定访问密钥)来调用此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这一政策有一个或多个角色,用户和组关联.如果您希望将单个策略附加到多个角色和/或用户,则此方法很有用.
  • 使用特定于服务的机制在服务级别附加策略.这是解决问题的另一种方法,而不是将策略附加到角色,而是将其附加到正在控制其访问的对象.执行此操作的机制因服务而异,但例如,policy属性aws_s3_bucket设置了特定于存储桶的策略; Principal策略文档中的元素可用于指定哪些主体(例如角色)可以采取某些操作.

IAM是一个灵活的系统,支持几种不同的访问控制方法.哪种方法适合您将在很大程度上取决于您的组织如何处理安全性和访问控制问题:从角色管理策略,使用aws_iam_role_policyaws_iam_policy_attachment通常适用于拥有集中安全团队来监督整个帐户访问的组织,同时服务 - 特定策略将访问控制决策委派给负责每个单独对象的人员或团队.作为深度防御策略的一部分,这两种方法可以结合使用,例如使用角色和用户级策略进行"边界"访问控制(控制外部访问)和服务级策略进行内部访问控制(控制内部访问控制之间的交互)您帐户中的对象).


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

  • +1并想添加 - 这可能是天真且错误的,但我经常将角色视为策略的存储桶。从这个意义上说,角色实际上比用户更接近组 - 至少就我个人认为应如何将权限分配给单个用户而言。组和角色之间的主要区别是,组可以分配给用户,而角色可以分配给非用户的事物。例如,EC2 实例可以凭借应用了正确策略的角色拥有对 Dynamo 的权限。 (3认同)
  • 我以为我不会读那么长的书,但是写得很好。+10 (2认同)
  • 这是一个很好的比喻,@JohnDibling!我认为名词“角色”的预期含义就像特定的人与人类所具有的工作角色之间的分离。我在任何地方都是马丁·阿特金斯,但在我的雇主的背景下,我是一名系统管理员,在我的牙医的背景下,我是一名患者,等等。在许多情况下,我被允许做的事情取决于什么角色我是在这样的背景下打球,而不是根据我个人的身份打球。访问控制系统中的“角色”表达了这种间接性。 (2认同)
  • 话虽如此,我们可以将 AssumeRole 政策理解为决定谁可以在牙医办公室扮演“牙齿保健员”的角色。有几个人同样被允许这样做,但我不能只是出现在那里并开始提供清洁牙齿的服务,因为我的“用户”不被允许承担“牙齿保健员”的角色。;) (2认同)