Lambda 无权执行:cognito-idp:AdminInitiateAuth

Jun*_*rat 7 amazon-web-services amazon-iam amazon-cognito aws-lambda aws-api-gateway

我正在关注第 1 部分、第 2 部分和第 3 部分中的 AWS Cognito 和 API Gateway 教程。

从第 1 部分开始,我创建了以下 lambda:

  1. 报名
  2. 确认注册
  3. 忘记密码
  4. 重新发送验证码
  5. 注册成功

每个 lambda 表达式都有一个自动生成的单独角色。

从第 2 部分开始,我将这些 lambda 连接到 API Gateway 中的各种 API 端点,并将路由/login连接到“成功注册”lambda。

在第 3 部分教程中,我创建了一个refresh_access_tokenlambda 函数以及test_user. 然后,在 API 网关中,我创建了一个新资源/user/test-user并添加了一个GET方法,并将其连接到test_userlambda。(refresh_access_token未连接到路线)。

之后,我转到第 3 部分中的创建新授权者部分,当我运行该/login路由时,我最终收到以下错误:

HTTP/1.1 200 OK
Date: Tue, 27 Oct 2020 19:42:15 GMT
Content-Type: application/json
Content-Length: 423
Connection: close
x-amzn-RequestId: 86e522e3-1843-4c05-8d70-c6731c5f110f
x-amz-apigw-id: VFezhGcvFiAFqOQ=
X-Amzn-Trace-Id: Root=1-5f987816-65f557256f2ccd172032ff15;Sampled=0

{
  "message": "An error occurred (AccessDeniedException) when calling the AdminInitiateAuth operation: User: arn:aws:sts::xxxxxxxx:assumed-role/cognito-successful-registration-role-ck5hni20/cognito-successful-registration is not authorized to perform: cognito-idp:AdminInitiateAuth on resource: arn:aws:cognito-idp:eu-central-1:xxxxxxxx:userpool/eu-central-1_xxxx,
  "error": true,
  "success": false,
  "data": null
}
Run Code Online (Sandbox Code Playgroud)

cognito -successful-registration-role-ck5hni20仅附加了AWSBasicExecutionRole,信任关系如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我在这里犯了什么错误?

Mar*_*cin 9

cognito-successful-registration-role-ck5hni20在 AWS 控制台中找到该角色。执行此操作后,您可以按以下形式添加内联策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "cognito-idp:AdminInitiateAuth",
            "Resource": {
                 "AWS": "arn:aws:cognito-idp:eu-central-1:xxxxxxxx:userpool/eu-central-1_xxxx"
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

或者使用更通用的形式:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "cognito-idp:AdminInitiateAuth",
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)