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

如何通过AWS SDK查询IAM用户/角色的具体权限列表

问题背景

我们在基于JavaScript开发的静态网站中,使用AWS Cognito与AWS IAM管理用户身份及对应资源访问权限,需要在通过AWS SDK发起特定服务请求前,先获取用户通过其绑定角色所拥有的具体权限。

AWS控制台中可查看到如下示例权限策略配置:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "cognito-idp:GetUser",
                "iam:ListPoliciesGrantingServiceAccess",
                "cognito-idp:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}

我们尝试调用SDK提供的接口获取用户/角色关联的策略,实现代码如下:

const iam = new AWS.IAM();
iam.listPoliciesGrantingServiceAccess({
  Arn: arn, 
  ServiceNamespaces: [
      "iam", 
      "cognito-idp"
  ]
}, (err, data) => {
  if (err) {
      console.log(err);
  }
  else {
      console.log(data);
  }
})

现存问题

上述接口仅会返回关联的策略元信息,不会返回策略中包含的具体权限规则,接口返回示例如下:

[
   {
      "ServiceNamespace":"iam",
      "Policies":[
         {
            "PolicyName":"admin-policy",
            "PolicyType":"INLINE",
            "EntityType":"ROLE",
            "EntityName":"Cognito_Auth_Role"
         }
      ]
   },
   {
      "ServiceNamespace":"cognito-idp",
      "Policies":[
         {
            "PolicyName":"admin-policy",
            "PolicyType":"INLINE",
            "EntityType":"ROLE",
            "EntityName":"Cognito_Auth_Role"
         }
      ]
   }
]

目前未查询到可直接获取策略对应具体权限内容的SDK方法,需要明确获取指定用户/角色完整权限信息的操作方案。

解决方案

要获取角色/用户的完整权限内容,无法通过listPoliciesGrantingServiceAccess单接口完成,需要按策略类型分步调用对应接口:

  • 先解析listPoliciesGrantingServiceAccess返回的策略元数据,根据PolicyType字段区分策略类型,调用对应接口拉取策略详情:
    • 类型为INLINE(内联策略):如果策略挂载对象是角色,调用getRolePolicy接口,传入EntityName对应的角色名、PolicyName对应的策略名,即可直接拿到内联策略的完整权限规则;如果挂载对象是用户,调用getUserPolicy接口传入对应用户名和策略名即可。
    • 类型为MANAGED(托管策略,含AWS官方托管、客户自定义托管):先调用getPolicy接口传入策略ARN,获取策略当前生效的默认版本ID,再调用getPolicyVersion接口传入策略ARN和版本ID,就能拿到托管策略的完整权限文档。
  • 针对Cognito认证场景的特殊说明:Cognito用户获取的是角色的临时会话凭证,最终生效权限是角色基础策略、身份池配置的会话权限、角色信任策略三者的交集,自行拉取所有策略计算最终权限容易出现偏差。如果只是要判断用户是否有某个操作的权限,直接调用simulatePrincipalPolicy接口,传入角色ARN、待校验的操作名和资源ARN,就能直接得到该身份对应操作的权限判定结果,比拉取全量策略自行解析更准确。
  • 前端静态站点使用注意:前端持有的Cognito临时角色仅需授予上述策略查询、权限模拟接口的最小访问权限即可,不要配置过高的IAM操作权限,避免出现安全风险。

内容的提问来源于stack exchange,提问作者Cameron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:36:34