You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置IAM权限让my-role仅列出带指定标签的IAM角色?

解决IAM角色过滤ListRoles结果的问题

为什么原策略失败

IAM的iam:ListRoles属于全局列表类操作,不支持通过资源级条件(比如aws:ResourceTag)来限制返回结果。这类操作的授权逻辑是先检查是否允许执行该操作,而非先过滤资源再授权。你之前的策略添加了标签条件,但AWS不认可ListRoles操作的这类条件,因此直接返回权限拒绝。

正确的解决方案

方案1:按标签过滤结果

首先调整权限策略,允许执行ListRoles操作(无需资源级条件):

{
    "Sid": "AllowListRoles",
    "Effect": "Allow",
    "Action": [
        "iam:ListRoles"
    ],
    "Resource": "*"
}

然后在调用aws iam list-roles时,通过--filters参数在客户端过滤带指定标签的角色:

aws iam list-roles --filters Key=tag-key,Value=foo Key=tag-value,Value=bar

方案2:按角色名称过滤结果

同样使用上述基础权限策略,调用时通过--query参数基于角色名称过滤:

  • 匹配名称包含特定字符串的角色:
aws iam list-roles --query 'Roles[?contains(RoleName, `my-role`) == `true`]'
  • 完全匹配角色名称:
aws iam list-roles --query 'Roles[?RoleName == `my-role-target`]'

关于路径前缀的补充说明

--path-prefix参数仅过滤角色的路径属性(而非名称),你的目标角色路径为/,因此无法用该参数过滤名称的一部分,这也是该方法无效的原因。

更严格的权限控制(可选)

如果需要严格限制用户只能查看特定角色的详情,可以在权限策略中添加iam:GetRole的资源级授权,结合标签或名称匹配:

{
    "Sid": "AllowListAndGetSpecificRoles",
    "Effect": "Allow",
    "Action": [
        "iam:ListRoles"
    ],
    "Resource": "*"
},
{
    "Sid": "AllowGetTaggedRoles",
    "Effect": "Allow",
    "Action": [
        "iam:GetRole"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:ResourceTag/foo": "bar"
        }
    }
}

此时用户能列出所有角色,但仅能查看带foo=bar标签的角色详情。如果需要彻底隐藏其他角色,可通过自定义Lambda函数实现过滤逻辑,仅给角色调用该Lambda的权限。

内容的提问来源于stack exchange,提问作者Ondra K.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:17:40