Cognito User Pool - триггер пост-подтверждения, исключение в доступе - PullRequest
1 голос
/ 05 июля 2019

Я создаю пул пользователей Cognito с помощью GO SDK, я использую API CreateUserPoolInput.

У меня есть триггер пост-подтверждения для этой лямбда-функции.

Поэтому, когда пользовательподтверждение происходит, эта лямбда-функция должна сработать.

Но я получаю ошибку - Доступ запрещен.

Когда я вхожу в консоль AWS и перенастраиваю эту лямбда-функцию для этого триггера, она работает.

Ссылка -https://forums.aws.amazon.com/thread.jspa?messageID=748566

Я хочу предоставить разрешение на вызов с помощью API-интерфейсов AWS.

Есть ли какой-либо API или пример кода, к которому я могу обратиться, чтобы обеспечить требуемый доступ?

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Мне удалось решить эту проблему с помощью вызова API AddPermission.

Вот фрагмент кода.

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)
0 голосов
/ 05 июля 2019

Я не знаком с GO, но с точки зрения API AWS, что происходит, когда вы используете консоль AWS для добавления триггера к лямбда-функции, вы фактически добавляете разрешение для другой службы вызывать вашу функцию.Графическая консоль AWS вызывает базовый API-интерфейс под сценой, чтобы упростить его использование.

Если вы создаете или настраиваете функцию Lambda с помощью интерфейса командной строки AWS или SDK, вам необходимо сделать явный вызовadd-permission API.

Вот документация для интерфейса командной строки AWS.Это хороший способ попрактиковаться и узнать, прежде чем начать писать свой код: 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

И вот два примерав оболочке bash (один для авторизации API Gateway и один для авторизации 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::\(.*\):.*$/\1/')
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

...