2

我的 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

问题是什么?

4

1 回答 1

6

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操作的权限。

您可以通过 2 种方式解决此问题:

  1. 将 AWS 托管AmazonCognitoReadOnly策略分配给角色
  2. 向角色添加内联策略,符合授予最低权限的安全最佳实践

如果您预计稍后将需要更多只读权限,则将 AWS 托管AmazonCognitoReadOnly策略分配给角色会更容易、更好。

它将提供对您的身份池和用户池的只读访问权限,包括以下cognito-idp:AdminGetUser权限(此处cognito-idp:Get*的文档,此处的直接策略链接):

{
    "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 用户池该权限的角色。

下面的图像应该是不言自明的:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

于 2021-10-16T16:47:56.500 回答