Lambda 无权执行:cognito-idp:AdminInitiateAuth
Lambda is not authorized to perform: cognito-idp:AdminInitiateAuth
我正在关注来自 part1, part 2 and part 3 的 AWS Cognito 和 API 网关教程。
在第 1 部分中,我创建了以下 lambda:
- 注册
- 确认注册
- 忘记密码
- 重新发送验证码
- 注册成功
并且这些 lambda 表达式中的每一个都有一个自动为它们生成的单独角色。
从第 2 部分开始,我将这些 lambda 连接到 API 网关中的各种 API 端点,/login
路由连接到“成功注册”lambda。
在第 3 部分教程中,我创建了一个 refresh_access_token
lambda 函数以及 test_user
。然后,在 API 网关中,我创建了一个新资源 /user/test-user
并添加了一个 GET
方法,我将其连接到 test_user
lambda。 (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
}
cognito-successful-registration-role-ck5hni20 刚刚附加了 AWSBasicExecutionRole,信任关系如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
我在这里做错了什么?
在 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": "*"
}
]
}
对于像这样刚接触AWS的人,这里有一个更详细的解决方案:
- 转到您的 lambda 函数
- 配置下,点击权限,即可看到执行角色及对应的角色名称。
- 点击角色名称
- 然后按照@Marcin 的建议编辑权限并添加新的内联策略。
- 最后,点击创建策略
我正在关注来自 part1, part 2 and part 3 的 AWS Cognito 和 API 网关教程。
在第 1 部分中,我创建了以下 lambda:
- 注册
- 确认注册
- 忘记密码
- 重新发送验证码
- 注册成功
并且这些 lambda 表达式中的每一个都有一个自动为它们生成的单独角色。
从第 2 部分开始,我将这些 lambda 连接到 API 网关中的各种 API 端点,/login
路由连接到“成功注册”lambda。
在第 3 部分教程中,我创建了一个 refresh_access_token
lambda 函数以及 test_user
。然后,在 API 网关中,我创建了一个新资源 /user/test-user
并添加了一个 GET
方法,我将其连接到 test_user
lambda。 (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
}
cognito-successful-registration-role-ck5hni20 刚刚附加了 AWSBasicExecutionRole,信任关系如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
我在这里做错了什么?
在 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": "*"
}
]
}
对于像这样刚接触AWS的人,这里有一个更详细的解决方案:
- 转到您的 lambda 函数
- 配置下,点击权限,即可看到执行角色及对应的角色名称。
- 点击角色名称
- 然后按照@Marcin 的建议编辑权限并添加新的内联策略。
- 最后,点击创建策略