Требуется ли роли IAM лямбда-функции разрешение IAM для вызова самого себя? - PullRequest
2 голосов
/ 31 марта 2020

Вопрос

Требуется ли для роли IAM лямбда-функции разрешение IAM для вызова себя?

Фон

Чтение Учебное пособие: обработка новых элементов с помощью DynamoDB Потоки и лямбда .

enter image description here

Похоже, что роль IAM лямбда-функции для обработки записей потока DynamoDB имеет разрешение IAM для вызова функции сам (и плюс).

"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:region:accountID:function:publishNewBark*"

WooferLambdaRolePolicy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:region:accountID:function:publishNewBark*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:region:accountID:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeStream",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:ListStreams"
            ],
            "Resource": "arn:aws:dynamodb:region:accountID:table/BarkTable/stream/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
aws iam put-role-policy --role-name WooferLambdaRole \
    --policy-name WooferLambdaRolePolicy \
    --policy-document file://role-policy.json

aws lambda create-function \
    --region us-east-1 \
    --function-name publishNewBark \
    --zip-file fileb://publishNewBark.zip \
    --role roleARN \                         <--- Replace roleARN with the ARN for WooferLambdaRole.
    --handler publishNewBark.handler \
    --timeout 5 \
    --runtime nodejs10.x

Существует ли причина, по которой разрешение IAM для вызова самой функции лямбды необходимо для быть привязанным к роли IAM лямбды? Или есть конкретная c причина, связанная с обработкой потока DynamoDB?

1 Ответ

3 голосов
/ 31 марта 2020

То, что вы описываете, является примером AWS Lambda Source Source Mapping и только для Kinesis, DynamDB и SQS.

Однако вы не даете разрешения для своей функции призвать себя. Вместо этого вы даете разрешения AWS Lambda Service (не вашей функции) на вызов вашей функции. Причиной является то, что служба Lambda будет обрабатывать поток DynamoDB от вашего имени в фоновом режиме и будет вызывать вашу функцию с записями потока, когда они будут доступны.

Обратите внимание, что политика доверия для роли WooferLambdaRole предназначена для lambda.amazonaws.com:

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

Политика доверия означает, что служба lambda (опять-таки не ваша функция, но aws Сам лямбда-сервис) сможет взять на себя роль, содержащую WooferLambdaRolePolicy. Впоследствии лямбда-сервис сможет работать с DynamoDB и вызывать вашу функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...