为啥我的 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?的主要内容,如果未能解决你的问题,请参考以下文章

Lambda 代入具有细粒度权限的 AWS IAM 角色

AWS cli:未授权执行:资源上的 sts:AssumeRole

为啥在 React 中,我的 axios API 调用有 Authorization Header,其中包含 Bearer <token> 但未被授权并给出 401 错误

使用无服务器框架的 lambda AWS 中的授权代码授予

无法删除 cfn 堆栈,角色无效或无法代入

Terraform aws 承担角色