使用@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,如果会话策略未授权该操作,请求仍会被拒绝。
解决步骤
检查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" } ] }
验证角色信任关系
- 打开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" } } } ] }
- 打开IAM控制台,找到你的未认证角色
重新测试请求
完成以上配置后,重新运行你的代码,即可正常访问目标SSM参数。
内容的提问来源于stack exchange,提问作者Pedro Voy
相关产品推荐
相关产品推荐

