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

使用@aws-sdk v3+Cognito未认证身份池调用SSM GetParameter遇权限问题

解决Cognito未认证身份池访问SSM Parameter Store的会话策略问题

首先修正代码中的一处笔误:你定义了input变量,但调用GetParameterCommand时传入的是param,这会导致运行错误,应改为:

const response = await ssm.send(new GetParameterCommand(input));

核心问题:会话策略限制

根据错误提示,问题出在会话策略(Session Policy)上。Cognito身份池通过STS生成临时凭证时,会同时应用角色权限策略和会话策略,两者的权限取交集生效——即使角色权限已允许ssm:GetParameter,如果会话策略未授权该操作,请求仍会被拒绝。

解决步骤

  1. 检查Cognito身份池的会话策略配置

    • 打开AWS Cognito控制台,找到目标身份池,进入「编辑身份池」页面
    • 在「未认证身份的角色」区域,查看是否配置了「会话策略」
    • 如果存在会话策略,确认其中包含允许ssm:GetParameter操作的规则;如果没有配置,直接添加如下策略(替换为你的实际资源ARN):
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "ssm:GetParameter",
            "Resource": "arn:aws:ssm:us-east-1:xxxxxxxxxxxx:parameter/config"
          }
        ]
      }
      
  2. 验证角色信任关系

    • 打开IAM控制台,找到你的未认证角色Cognito_CredentialsUnauth_Role
    • 查看「信任关系」,确保信任策略允许cognito-identity.amazonaws.com扮演该角色,且针对未认证用户的条件正确:
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Federated": "cognito-identity.amazonaws.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
              "StringEquals": {
                "cognito-identity.amazonaws.com:aud": "us-east-1:xxxx..."
              },
              "ForAnyValue:StringLike": {
                "cognito-identity.amazonaws.com:amr": "unauthenticated"
              }
            }
          }
        ]
      }
      
  3. 重新测试请求
    完成以上配置后,重新运行你的代码,即可正常访问目标SSM参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:50:14