Terraform - assume_role_policy - 与标准IAM策略类似但略有不同

时间:2017-06-19 10:41:07

标签: amazon-iam terraform

此页https://www.terraform.io/docs/providers/aws/r/iam_role.html提及:

  

注意:这个assume_role_policy非常相似但略有不同   而不仅仅是标准的IAM策略,不能使用aws_iam_policy   资源。但是,它可以使用aws_iam_policy_document数据源,   请参阅下面的示例,了解这是如何工作的。

assume_role_policy是否与standard IAM policy不同?

是否有任何理由

为什么?

1 个答案:

答案 0 :(得分:6)

假设角色策略是与角色相关联的特殊策略,该角色控制哪些主体(用户,其他角色,AWS服务等)可以"假设"角色。假设某个角色意味着生成临时凭据以使用与该角色关联的访问策略授予的权限进行操作。

假设角色政策在以下方面与正常政策不同:

  • 它是角色本身的属性,而不是与角色关联的单独对象。每个角色只有一个承担角色策略。
  • 假设角色策略中唯一有意义的Actionsts:AssumeRole,因为这是用于获取角色临时凭据的API操作。

这些差异中的第一个产生了Terraform文档中提到的差异:由于角色只有一个IAM策略并且直接作为角色的一部分声明,因此必须将其策略文档作为属性提供。 aws_iam_role资源。 aws_iam_policy_document数据源只是将其输入简单转换为IAM JSON策略文档格式,因此可用于生成assume_role_policy属性的值。

当AWS服务代表您调用其他API服务时,它会在内部获取您指定角色的临时凭证,然后可以使用该凭据来调用其他服务API。出于这个原因,有必要创建角色并将其分配给AWS Lambda,EC2(通过实例配置文件),Kinesis Firehose等服务。

我在an answer to another question中写了一个更详细的描述,其中给出了一些实际IAM角色的例子,假设角色政策和常规政策。