具有操作的 IAM 策略:自动缩放:AttachLoadBalancerTargetGroups,基于目标组的 ARN 过滤访问不起作用

Posted

技术标签:

【中文标题】具有操作的 IAM 策略:自动缩放:AttachLoadBalancerTargetGroups,基于目标组的 ARN 过滤访问不起作用【英文标题】:IAM Policy with action: autoscaling:AttachLoadBalancerTargetGroups, Filters access based on the ARN of a target group is not working 【发布时间】:2022-01-23 00:32:18 【问题描述】:

我们有一个包含 2 个目标组的自动扩缩组。我们希望允许团队分离/附加这些目标组之一,并防止他们分离/附加另一个目标组。所以我们构建了这个 IAM 政策声明:


        "Sid": "AsgPolicy",
        "Effect": "Allow",
        "Action": [
            "autoscaling:AttachLoadBalancerTargetGroups",
            "autoscaling:DetachLoadBalancerTargetGroups"
        ],
        "Resource": "arn:aws:autoscaling:*:$account:autoScalingGroup:*:autoScalingGroupName/app-$env-frontend",
        "Condition": 
            "StringLike": 
                "autoscaling:TargetGroupARNs": "arn:aws:elasticloadbalancing:*:$account:targetgroup/app-$env-target/*"
            
        
    

即使一切看起来都正确,但每当我使用具有此策略的角色来分离/附加目标组时,我都会收到此错误:

Detaching target groups failed
User: arn:aws:sts::11111111111:assumed-role/role-name/username is not authorized to perform: autoscaling:DetachLoadBalancerTargetGroups on resource: arn:aws:autoscaling:eu-west-1:11111111111:autoScalingGroup:ad6d28fa-b472-44e9-9ec4-e39bab5cd364:autoScalingGroupName/app-dev-frontend because no identity-based policy allows the autoscaling:DetachLoadBalancerTargetGroups action

我不明白问题出在哪里。 条件很重要,因为应该只更新一个目标,而不是另一个目标。

谢谢

【问题讨论】:

【参考方案1】:

为了使权限声明正常工作,指定的“资源”资源类型应由“操作”下列出的操作支持。并非每个操作都可以指定每种资源类型。如果您指定的资源对该操作无效,则使用该操作的任何请求都会失败,并且该语句的效果不适用。

在您的情况下,操作“autoscaling:AttachLoadBalancerTargetGroups”和“autoscaling:DetachLoadBalancerTargetGroups”不支持资源级权限(在Actions Table 的“资源类型”列下的操作表中显示为空白)并且您必须指定所有政策中的资源(“*”)。

你可以试试这个政策:


    "Sid": "AsgPolicy",
    "Effect": "Allow",
    "Action": [
        "autoscaling:AttachLoadBalancerTargetGroups",
        "autoscaling:DetachLoadBalancerTargetGroups"
    ],
    "Resource": "*",
    "Condition": 
        "StringLike": 
            "autoscaling:TargetGroupARNs": "arn:aws:elasticloadbalancing:*:$account:targetgroup/app-$env-target/*"
        
    

【讨论】:

刚刚试过了,还是不行:(谢谢【参考方案2】:

这是这个问题的解决方案,效果很好:


    "Sid": "AsgDetach",
    "Effect": "Allow",
    "Action": [
        "autoscaling:AttachLoadBalancerTargetGroups",
        "autoscaling:DetachLoadBalancerTargetGroups"
    ],
    "Resource": "*",
    "Condition": 
        "ForAnyValue:StringLike": 
            "autoscaling:TargetGroupARNs": "arn:aws:elasticloadbalancing:*:*xxx"
        
    

【讨论】:

以上是关于具有操作的 IAM 策略:自动缩放:AttachLoadBalancerTargetGroups,基于目标组的 ARN 过滤访问不起作用的主要内容,如果未能解决你的问题,请参考以下文章

创建附加到用户的 IAM 策略,限制用户使用某些操作创建自定义托管策略

AWS IAM 策略允许用户创建具有特定策略/角色的 IAM 用户

AWS IAM 找到具有特定策略的角色?

AWS IAM 策略模拟器的功能测试工具

编写 IAM 策略,其中任何具有 EC2 完全访问权限的用户都不能删除 AWS 账户中任何其他用户的实例

影响其他组的 S3 资源的 AWS IAM 组策略?