【问题标题】:Terraform - assume_role_policy - similar but slightly different than standard IAM policyTerraform - assume_role_policy - 与标准 IAM 策略相似但略有不同
【发布时间】:2017-11-21 12:59:06
【问题描述】:

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

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

assume_role_policystandard IAM policy 不同有什么原因吗?

为什么?

【问题讨论】:

    标签: amazon-iam terraform


    【解决方案1】:

    承担角色策略是与角色相关联的特殊策略,用于控制哪些委托人(用户、其他角色、AWS 服务等)可以“承担”该角色。假设一个角色意味着生成临时凭证以使用与该角色关联的访问策略授予的权限。

    代入角色策略在以下方面不同于普通策略:

    • 它是角色本身的属性,而不是与角色关联的单独对象。每个角色只有一个承担角色策略。
    • 在代入角色策略中唯一具有任何意义的 Action 值是 sts:AssumeRole 和它的一些其他变体(在撰写本文时,sts:AssumeRoleWithSAMLsts:AssumeRoleWithWebIdentity)。这些是用于获取角色临时凭证的 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 角色、假设角色策略和常规策略的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-25
      • 2022-01-19
      • 1970-01-01
      • 2021-05-21
      • 2021-06-04
      • 2020-11-11
      • 1970-01-01
      • 2020-09-22
      相关资源
      最近更新 更多