Lambda 无权执行:cognito-idp:AdminInitiateAuth

Posted

技术标签:

【中文标题】Lambda 无权执行:cognito-idp:AdminInitiateAuth【英文标题】:Lambda is not authorized to perform: cognito-idp:AdminInitiateAuth 【发布时间】:2021-02-10 04:32:57 【问题描述】:

我正在关注来自 part1、part 2 和 part 3 的 AWS Cognito 和 API Gateway 教程。

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

    注册 确认注册 忘记密码 重新发送验证码 注册成功

并且这些 lambda 中的每一个都有一个为它们自动生成的单独角色。

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

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

之后,我从第 3 部分转到 Create a New authorizer 部分,当我运行 /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

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


  "Version": "2012-10-17",
  "Statement": [
    
      "Effect": "Allow",
      "Principal": 
        "Service": "lambda.amazonaws.com"
      ,
      "Action": "sts:AssumeRole"
    
  ]

我在这里做错了什么?

【问题讨论】:

cognito-idp: AdminInitiateAuth 操作添加到您的允许中。 【参考方案1】:

在 AWS 控制台中找到角色 cognito-successful-registration-role-ck5hni20。完成此操作后,您可以将inline policy 添加到以下表单中:


    "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"
            
        
    ]

或者使用更一般的形式:


    "Version": "2012-10-17",
    "Statement": [
        
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "cognito-idp:AdminInitiateAuth",
            "Resource": "*"
        
    ]

【讨论】:

非常感谢您的帮助。你永远是救世主:D。只有一个问题:我可以将操作从 cognito-idp:AdminInitiateAuth 更改为 cognito-idp:* 以允许所有操作吗? @Junkrat 没问题。是的你可以。如果答案有帮助,我们将不胜感激。 接受了答案 :) 对于 cognito-idp,是否有可以直接附加的预先存在的策略?如果没有,是否应该为其制定政策以供将来使用? @Junkrat 现有策略,例如 AmazonCognitoPowerUserAmazonCognitoDeveloperAuthenticatedIdentities 等,但您必须在 AWS 控制台中检查它们的权限以检查它们是否适合您的用例。 【参考方案2】:

对于像这样刚接触 AWS 的人,这里有一个更详细的解决方案:

    转到您的 lambda 函数 在配置下,点击权限,然后你会看到执行角色和对应的角色名称。 点击角色名称 然后按照@Marcin 的建议编辑权限并添加新的内联策略。 最后,点击创建策略

【讨论】:

以上是关于Lambda 无权执行:cognito-idp:AdminInitiateAuth的主要内容,如果未能解决你的问题,请参考以下文章

Lambda 和 DynamoDB:无权执行:dynamodb:Scan

AWS Lambda 无权执行权限中列出的操作

AWS Lambda:提供的执行角色无权调用 EC2 上的 DescribeNetworkInterfaces

(具体资源)AWS Lambda:提供的执行角色无权调用EC2上的DescribeNetworkInterfaces

错误代码:AccessDeniedException。用户:arn:aws:iam::xxx:user/xxx 无权执行:lambda:CreateEventSourceMapping on reso

Lambda 无权访问 ECR 映像