为啥我的 AWS 代入角色未被授权执行 cognito-idp:AdminGetUser?
Posted
技术标签:
【中文标题】为啥我的 AWS 代入角色未被授权执行 cognito-idp:AdminGetUser?【英文标题】:Why is my AWS assumed role not authorised to perform cognito-idp:AdminGetUser?为什么我的 AWS 代入角色未被授权执行 cognito-idp:AdminGetUser? 【发布时间】:2021-12-04 08:24:48 【问题描述】:我的 Laravel 应用程序调用 AdminGetUser 端点。
在本地环境中,成功返回资源。
部署到 Vapor 环境后,失败并显示以下错误消息:
User: arn:aws:sts::xxxx:assumed-role/laravel-vapor-role/xxxx is not authorized to perform: **cognito-idp:AdminGetUser** on resource: arn:aws:cognito-idp:us-east-1:xxxx:userpool/us-east-1_xxxx because no identity-based policy allows the cognito-idp:AdminGetUser action
有什么问题?
【问题讨论】:
IAM 角色,laravel vapo 角色的政策是什么? 那个角色允许14个服务,这个api调用需要什么服务? @ErmiyaEskandary 允许CloudWatch,CloudWatch Logs,DynamoDB,EC2,KMS,Lambda,Pinpoint Email,Route 53 Domains,S3,Secrets Manager,SES,SES v2,SQS,Systems Manager
。根据您的评论,我得到了想法并添加了 Cognito User Pools
的新服务,从而解决了这个问题。请添加带有解释的答案,以便我接受。谢谢。
【参考方案1】:
laravel-vapor-role 无权执行:cognito-idp:AdminGetUser 在资源上:arn:aws:cognito-idp:us-east-1:xxxx:userpool/us-east-1_xxxx
这意味着laravel-vapor-role
角色没有附加合适的策略来为其提供执行cognito-idp:AdminGetUser
操作的权限。
您可以通过两种方式解决此问题:
-
将 AWS 托管的
AmazonCognitoReadOnly
策略分配给角色
为角色添加内联策略,符合granting least privilege 的安全最佳实践
如果您预计稍后将需要更多只读权限,那么将 AWS 托管的 AmazonCognitoReadOnly
策略分配给角色会更容易更好。
它将提供对您的身份池和用户池的只读访问权限,包括属于cognito-idp:Get*
的cognito-idp:AdminGetUser
权限(文档here,直接策略链接here):
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Action": [
"cognito-identity:Describe*",
"cognito-identity:Get*",
"cognito-identity:List*",
"cognito-idp:Describe*",
"cognito-idp:AdminGet*",
"cognito-idp:AdminList*",
"cognito-idp:List*",
"cognito-idp:Get*",
"cognito-sync:Describe*",
"cognito-sync:Get*",
"cognito-sync:List*",
"iam:ListOpenIdConnectProviders",
"iam:ListRoles",
"sns:ListPlatformApplications"
],
"Resource": "*"
]
如果您只需要 cognito-idp:AdminGetUser
的单一权限,则为角色创建并分配内联策略,该策略仅向特定 Cognito 用户池授予该权限。
下面的图片应该是不言自明的:
【讨论】:
以上是关于为啥我的 AWS 代入角色未被授权执行 cognito-idp:AdminGetUser?的主要内容,如果未能解决你的问题,请参考以下文章
AWS cli:未授权执行:资源上的 sts:AssumeRole
为啥在 React 中,我的 axios API 调用有 Authorization Header,其中包含 Bearer <token> 但未被授权并给出 401 错误