如何为Cognito假定角色授予AWS Secrets Manager访问权限?
解决Cognito身份池角色访问AWS Secrets Manager权限问题
问题核心
报错明确指向:User: arn:aws:sts::****:assumed-role/for-cognito-access/CognitoIdentityCredentials is not authorized to perform: secretsmanager:GetSecretValue on resource: dev/App because no session policy allows the secretsmanager:GetSecretValue action
问题出在会话策略限制或权限策略未正确关联到目标角色上,以下是具体解决步骤:
解决步骤
1. 确认权限策略已绑定到目标角色
登录AWS IAM控制台,找到报错中的for-cognito-access角色:
- 进入该角色的权限标签,确认你配置的包含
secretsmanager:*的策略已附加 - 若未绑定,直接编辑角色的内联策略,遵循最小权限原则配置:
注:Secrets Manager的ARN会带随机后缀,用{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:us-east-1:你的AWS账号ID:secret:dev/App-*" } ] }dev/App-*可匹配目标Secret。
2. 检查Cognito身份池的会话策略
进入Cognito控制台,找到你的身份池:
- 点击编辑身份池,滚动到对应身份类型(未认证/已认证)的角色设置
- 若配置了会话策略,该策略会覆盖角色权限,需确保其包含允许
GetSecretValue的规则:
若无特殊限制需求,可直接清空会话策略字段。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:us-east-1:你的AWS账号ID:secret:dev/App-*" } ] }
3. 验证角色信任策略
确保for-cognito-access角色的信任策略允许Cognito身份池的身份假定该角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "你的Cognito身份池ID" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" } } } ] }
若使用已认证身份,将unauthenticated替换为authenticated。
4. 检查Secrets Manager资源策略
进入Secrets Manager控制台,找到dev/App Secret:
- 点击权限标签,查看资源策略是否存在拒绝
for-cognito-access角色的规则 - 若有,调整或删除拒绝规则,或添加允许规则:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::你的AWS账号ID:role/for-cognito-access" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }
5. 权限模拟验证
在IAM控制台中找到for-cognito-access角色,使用模拟策略工具:
- 选择动作
secretsmanager:GetSecretValue,输入目标Secret的ARN - 运行模拟,确认结果为允许。
内容的提问来源于stack exchange,提问作者TheMachineX
相关产品推荐
相关产品推荐

