【问题标题】:can't access other roles when limiting the access based on tags基于标签限制访问时无法访问其他角色
【发布时间】:2020-03-10 20:18:45
【问题描述】:

我希望我的角色只能访问带有特定标签的角色。因此,我创建了一个策略:

    "Statement": [
        {
            "Action": [
                "iam:GetRole"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
                "StringLike": {
                    "iam:ResourceTag/key": "value"
                }
            }
        }
    ]
}

对于每个相关的角色,我都添加了带有-key-value 属性的标签。

但是,当我使用特定角色时,我不断收到以下错误: AccessDenied. User doesn't have permission to call iam:GetRole

有什么想法吗?

【问题讨论】:

  • 不知道为什么,但是使用:"Condition": { "ForAllValues:StringEquals": { "iam:ResourceTag/key": "value" } } 解决了这个问题。

标签: amazon-web-services amazon-cloudformation amazon-iam


【解决方案1】:

我用这个 json 创建了一个策略,并将它附加到一个我用 lambda 运行的角色。我成功地获得了具有键值标签的 IAM:Role 的 arn,并且拒绝了没有的访问。也许您没有正确附加策略,或者您正在尝试使用不同的角色执行操作,请尝试创建实例配置文件并将其附加到 ec2 并从那里或通过 lambda 运行命令。 tldr; json 很好,问题在其他地方。

{
"Version": "2012-10-17",
"Statement": [
    {
        "Condition": {
            "StringLike": {
                "iam:ResourceTag/key": "value"
            }
        },
        "Action": [
            "iam:GetRole"
        ],
        "Resource": "*",
        "Effect": "Allow"
    }
]

}

这是我使用的完整 CF 堆栈。它是 yaml,显然应该根据您的需要更改原理。

 Resources:
  Role: 
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - lambda.amazonaws.com
            - edgelambda.amazonaws.com
          Action: sts:AssumeRole
      ManagedPolicyArns:
      - !Ref Policy
  Policy:
      Type: AWS::IAM::ManagedPolicy
      Properties:
          ManagedPolicyName: Get_Role_With_Tag__Policy
          Path: /
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action:
                - iam:GetRole
                Condition:
                  StringLike:
                    iam:ResourceTag/key: "value"
                Resource: "*"

【讨论】:

  • 非常感谢您的回复。不确定还有什么问题 - 我通过控制台附加策略并通过控制台添加标签。所以这应该是微不足道的。我通过受信任的实体拥有我正在使用的角色。这可能会导致问题吗?
  • 您能否在问题中提供更多详细信息?是一个人来运行这个还是一个服务,这个服务是 aws 的一部分吗?基本上试着解释你在做什么,因为 IAM 是一个大而挑剔的野兽,真正掌握它需要很多时间。我知道它看起来应该很简单,但事实并非如此。
  • 没什么复杂的——我在一个受信任实体的 vpc 中担任角色。从另一个实体,我试图使用这个角色来更新堆栈(例如更新 lambda 函数的代码)。每个 lambda 都有执行角色,我在其中添加了提到的标签。由于某种原因,它不起作用。如果我消除了这种情况,它确实有效。我希望这能更好地解释事情。
  • 如果呼叫来自 ec2,则角色需要将 ec2.amazonaws.com 作为可信实体。如果您编辑我的回答,上面写着服务原则,请在云结构中运行它并将角色附加到您尝试执行此操作的实例。
  • 呼叫来自用户的请求。我已将受信任实体添加到我正在执行请求的帐户中。事实上,当删除条件时,它会起作用。所以它必须与我正在使用的条件/标签有关。
猜你喜欢
  • 2018-11-28
  • 2010-09-11
  • 2019-03-23
  • 2011-04-25
  • 2013-08-28
  • 1970-01-01
  • 2014-01-25
  • 2015-11-20
  • 2013-05-08
相关资源
最近更新 更多