You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Cognito未认证角色调用RDS DescribeDBInstances API时遭遇IAM权限拒绝问题求助

排查Cognito未认证角色调用RDS DescribeDBInstances 权限拒绝问题

看起来你已经做了不少配置,但还是遇到了权限拒绝的问题,我来帮你梳理几个容易遗漏的关键点:

1. 确认身份池与UnAuth角色的绑定关系

有时候我们会不小心把策略加到错误的角色上,或者身份池没正确关联目标角色:

  • 打开AWS控制台的Cognito身份池页面,找到你的身份池
  • 进入身份池设置身份验证提供商未认证身份,检查这里指定的角色是否是你附加了自定义策略的Cognito_TestUnauth_Role
  • 如果绑定的是其他角色,修改为正确角色后等待1-5分钟让配置生效

2. 检查角色的信任策略是否允许未认证用户扮演角色

即使权限策略正确,若信任策略不允许Cognito为未认证用户分配该角色,也会触发权限问题。你的UnAuth角色信任策略应该包含以下内容:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "你的身份池ID"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "unauthenticated"
        }
      }
    }
  ]
}

你可以在IAM控制台找到该角色,进入信任关系标签页验证上述配置是否正确(替换你的身份池ID为实际值)。

3. 尝试使用更具体的资源ARN

虽然你用了*作为资源,但部分AWS API的权限检查对资源格式有更明确的要求。根据错误信息中的资源格式,修改你的自定义策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "rds:DescribeDBInstances",
      "Resource": "arn:aws:rds:us-east-1:你的账号ID:db:*"
    }
  ]
}

替换你的账号ID为实际AWS账号ID,保存后等待几分钟再测试。

4. 排查是否有其他策略限制访问

  • 服务控制策略(SCP):如果你的账号属于AWS组织,检查是否有SCP禁止了未认证用户访问RDS API,SCP会优先于IAM角色权限生效。
  • IAM拒绝策略:检查该UnAuth角色是否附加了包含Deny语句的其他策略,拒绝策略的优先级高于允许策略,会直接导致权限被拒绝。

5. 验证策略生效状态

IAM策略变更通常需要1-5分钟才能全局生效,如果你刚修改完就测试,可能还未生效。等待一段时间后重新调用API试试。

你也可以用AWS CLI模拟权限检查,快速定位问题:

aws iam simulate-principal-policy --policy-source-arn "arn:aws:sts::你的账号ID:assumed-role/Cognito_TestUnauth_Role/CognitoIdentityCredentials" --action-names "rds:DescribeDBInstances" --resource-arns "arn:aws:rds:us-east-1:你的账号ID:db:*"

这个命令会返回权限检查的详细结果,帮助你确认是否是策略本身的问题。

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

火山引擎 最新活动