IAM 政策 - 如何引用资源?

Posted

技术标签:

【中文标题】IAM 政策 - 如何引用资源?【英文标题】:IAM policy - How to reference resources? 【发布时间】:2019-07-15 17:50:31 【问题描述】:

以下是为限制任何Principal 仅执行以下操作而创建的策略模板:

Resources:
  MyPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      Description: RulesToCreateUpdatePolicy
      ManagedPolicyName: some-policy
      PolicyDocument:
        Version: "2012-10-17"
        Statement:

          - Effect: Allow
            Action:
              - "iam:CreatePolicy"
              - "iam:DeletePolicy"
              - "iam:CreatePolicyVersion"
            Resource:
              - !Sub "arn:aws:iam::$AWS::AccountId:policy/xyz-lambda-*"

在以名称 xyz-lambda- 开头的策略资源上。

此策略分配给具有角色的 EC2 主机。


在将此策略上传到 AWS 之前,此策略名称(如 xyz-lambda-*)是否应该已经存在于 AWS 中?

【问题讨论】:

【参考方案1】:

不,当您在策略文档中指定资源时,该资源根本不需要存在。

如果您考虑到此操作

iam:CreatePolicy

与您的资源一起,它的作用是授予必要的权限以创建具有特定名称 xyz-lambda-* 的策略。如果策略首先授予创建它的权限,则要求存在此类资源没有多大意义。

当您考虑删除操作时

iam:DeletePolicy

如果资源不存在,那么它什么也不做。一旦您创建了具有适当名称的策略,您就可以将其删除,但无论该策略是在创建此 ManagedPolicy 之前还是之后存在,还是您已多次删除并重新创建具有该名称的策略,都无关紧要。

最后,由于您已声明此策略附加到 EC2 角色,因此它应该可以正常工作。但我仍然建议授予 iam:ListPolicies 权限,以允许在 EC2 实例上运行的应用程序执行任何资源(策略)发现。如果您不允许在策略中执行此操作,您的应用程序将无法列出策略,并且您必须根据猜测或严格的命名方案设计一些容易出错的解决方法。

【讨论】:

啊,在你的台词中得到了它:“需要存在很有意义”【参考方案2】:

策略名称并不重要。仅 ARN 独有的资源。 IAM 资源在 AWS 账户中是唯一的,如果您在没关系之前不创建此资源

【讨论】:

以上是关于IAM 政策 - 如何引用资源?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Terraform 将资源动态附加到内联策略?

如何通过 SCP 保护 AWS 标记的资源?

如何创建 IAM 策略以根据子网名称标签控制对 Amazon EC2 资源的访问?

仅在不存在时如何创建 terraform 资源

模板错误:Fn::GetAtt 的实例引用了未定义的资源

IAM 权限策略是不是可以用于允许访问跨账户资源?