Cognito 用户池 - Post 确认触发器,拒绝访问异常
Cognito User Pool - Post confirmation trigger, access denied exception
我正在使用 GO SDK 创建一个 Cognito 用户池,我正在使用 API CreateUserPoolInput.
我有一个 post 确认触发器,用于此 lambda 函数。
所以当用户确认发生时,这个lambda函数应该被触发。
但是我收到一个错误 - 访问被拒绝。
当我登录到 AWS 控制台并为此触发器重新配置此 lambda 函数时,它起作用了。
参考 -
https://forums.aws.amazon.com/thread.jspa?messageID=748566
我想使用 AWS APIs 提供调用权限。
是否有任何 API 或代码示例可供我参考以提供所需的访问权限?
我不熟悉 GO,但从 AWS API 的角度来看,当您使用 AWS 控制台向 lambda 函数添加触发器时会发生什么,您有效地为另一个服务添加了调用您的服务的权限功能。 AWS图形控制台在场景下调用底层API,方便使用
如果您使用 AWS CLI 或开发工具包创建或配置 Lambda 函数,则需要显式调用 add-permission
API.
这是 AWS CLI 的文档。这是在开始编写代码之前练习和发现的好方法:https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html
这是对应于 Go SDK 的文档:https://docs.aws.amazon.com/sdk-for-go/api/service/lambda/#Lambda.AddPermission
还有bashshell中的两个例子(一个授权API网关,一个授权Amazon S3触发一个函数,不过我相信你可以适配这个轻松适用于您的用例)
aws lambda add-permission \
--region $REGION \
--function-name $FUNCTION_NAME \
--statement-id 1 \
--principal apigateway.amazonaws.com \
--action lambda:InvokeFunction \
--source-arn arn:aws:execute-api:$REGION:$ACCOUNT_ID:* >/dev/null
#
# Add permission to authorize S3 bucket to invoke Lambda
#
AWS_ACCOUNT_ID=$(echo $ROLE_EXEC_ARN | sed 's/^arn:aws:iam::\(.*\):.*$//')
aws lambda add-permission --function-name $FUNCTIONNAME --region $REGION --profile $PROFILE --statement-id Id-x --action "lambda:InvokeFunction" --principal s3.amazonaws.com --source-arn arn:aws:s3:::$BUCKETNAME --source-account $AWS_ACCOUNT_ID
我能够使用 AddPermission API 调用解决这个问题。
这是代码片段。
actionString := "lambda:InvokeFunction"
principalString := "cognito-idp.amazonaws.com"
sourceArn := userPoolArn
statementIdString := "cognitoaddpermission"
addPermissionInput := &lambda.AddPermissionInput{
Action: aws.String(actionString),
FunctionName: aws.String(lambdaFunctionName),
Principal: aws.String(principalString),
SourceArn: aws.String(sourceArn),
StatementId: aws.String(statementIdString),
}
resultAddPermission, errAddPermission := lambdaSessionClient.AddPermission(addPermissionInput)
我正在使用 GO SDK 创建一个 Cognito 用户池,我正在使用 API CreateUserPoolInput.
我有一个 post 确认触发器,用于此 lambda 函数。
所以当用户确认发生时,这个lambda函数应该被触发。
但是我收到一个错误 - 访问被拒绝。
当我登录到 AWS 控制台并为此触发器重新配置此 lambda 函数时,它起作用了。
参考 - https://forums.aws.amazon.com/thread.jspa?messageID=748566
我想使用 AWS APIs 提供调用权限。
是否有任何 API 或代码示例可供我参考以提供所需的访问权限?
我不熟悉 GO,但从 AWS API 的角度来看,当您使用 AWS 控制台向 lambda 函数添加触发器时会发生什么,您有效地为另一个服务添加了调用您的服务的权限功能。 AWS图形控制台在场景下调用底层API,方便使用
如果您使用 AWS CLI 或开发工具包创建或配置 Lambda 函数,则需要显式调用 add-permission
API.
这是 AWS CLI 的文档。这是在开始编写代码之前练习和发现的好方法:https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html
这是对应于 Go SDK 的文档:https://docs.aws.amazon.com/sdk-for-go/api/service/lambda/#Lambda.AddPermission
还有bashshell中的两个例子(一个授权API网关,一个授权Amazon S3触发一个函数,不过我相信你可以适配这个轻松适用于您的用例)
aws lambda add-permission \
--region $REGION \
--function-name $FUNCTION_NAME \
--statement-id 1 \
--principal apigateway.amazonaws.com \
--action lambda:InvokeFunction \
--source-arn arn:aws:execute-api:$REGION:$ACCOUNT_ID:* >/dev/null
#
# Add permission to authorize S3 bucket to invoke Lambda
#
AWS_ACCOUNT_ID=$(echo $ROLE_EXEC_ARN | sed 's/^arn:aws:iam::\(.*\):.*$//')
aws lambda add-permission --function-name $FUNCTIONNAME --region $REGION --profile $PROFILE --statement-id Id-x --action "lambda:InvokeFunction" --principal s3.amazonaws.com --source-arn arn:aws:s3:::$BUCKETNAME --source-account $AWS_ACCOUNT_ID
我能够使用 AddPermission API 调用解决这个问题。
这是代码片段。
actionString := "lambda:InvokeFunction"
principalString := "cognito-idp.amazonaws.com"
sourceArn := userPoolArn
statementIdString := "cognitoaddpermission"
addPermissionInput := &lambda.AddPermissionInput{
Action: aws.String(actionString),
FunctionName: aws.String(lambdaFunctionName),
Principal: aws.String(principalString),
SourceArn: aws.String(sourceArn),
StatementId: aws.String(statementIdString),
}
resultAddPermission, errAddPermission := lambdaSessionClient.AddPermission(addPermissionInput)