Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services can';基于标签限制访问时,不能访问其他角色_Amazon Web Services_Amazon Cloudformation_Amazon Iam - Fatal编程技术网

Amazon web services can';基于标签限制访问时,不能访问其他角色

Amazon web services can';基于标签限制访问时,不能访问其他角色,amazon-web-services,amazon-cloudformation,amazon-iam,Amazon Web Services,Amazon Cloudformation,Amazon Iam,我希望允许我的角色仅访问具有特定标记的角色。因此,我创建了一个策略: "Statement": [ { "Action": [ "iam:GetRole" ], "Resource": "*", "Effect": "Allow", "Condition": { "StringLike":

我希望允许我的角色仅访问具有特定标记的角色。因此,我创建了一个策略:

    "Statement": [
        {
            "Action": [
                "iam:GetRole"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
                "StringLike": {
                    "iam:ResourceTag/key": "value"
                }
            }
        }
    ]
}
对于每个相关角色,我都添加了属性为-key-value的标记

但是,当我使用特定角色时,我会不断出现以下错误:
AccessDenied。用户没有调用iam:GetRole的权限


有什么想法吗

我用这个json创建了一个策略,并将其附加到一个角色,我使用lambda运行该角色。我成功地获得了IAM:Role的arn,该角色具有键值标记,而对一个没有键值标记的角色的访问被拒绝。可能您没有正确附加策略,或者您试图使用其他角色执行操作,请尝试创建实例配置文件并将其附加到ec2,然后从那里或通过lambda运行命令。 太长,读不下去了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的一部分?基本上,试着解释一下你在做什么,因为我是一只又大又挑剔的野兽,要真正掌握它需要很多时间。我知道这看起来应该很简单,但事实并非如此。没有什么非常复杂的东西——我在vpc中有一个角色,拥有一个受信任的实体。从另一个实体中,我试图使用这个角色来更新堆栈(例如更新lambda函数的代码)。每个lambda都有执行角色,我已经在其中添加了提到的标记。由于某种原因,它不起作用。如果我已经消除了这个条件,它确实有效。我希望这能更好地解释问题。如果呼叫来自ec2,则角色需要将ec2.amazonaws.com作为受信任的实体。如果您在我的回答中编辑了“服务原则”,请以云的形式运行它,并将角色附加到您试图从中执行此操作的实例上,它应该会起作用。该呼叫是作为用户的请求发出的。我已将受信任的实体添加到执行请求的帐户中。事实上,当移除该条件时,它是有效的。所以它一定与我使用的条件/标记有关。不确定原因,但使用“条件”:{“ForAllValues:StringEquals”:{“iam:ResourceTag/key”:“value”}解决了这个问题。