【问题标题】:Does a lambda function IAM role require an IAM permission to invoke itself?lambda 函数 IAM 角色是否需要 IAM 权限才能调用自身?
【发布时间】:2020-07-11 12:12:16
【问题描述】:

问题

lambda 函数的 IAM 角色是否需要 IAM 权限才能调用自身?

背景

阅读Tutorial: Process New Items with DynamoDB Streams and Lambda

看起来处理 DynamoDB 流记录的 lambda 函数的 IAM 角色具有调用函数本身(和附加)的 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

为什么需要将调用 lambda 函数本身的 IAM 权限附加到 lambda 的 IAM 角色?或者是否有与 DynamoDB 流处理相关的特定原因?

【问题讨论】:

  • 您正在授予 lambda 服务(不是您的函数)调用您的函数的权限。原因是 lambda 服务将代表您处理 dynamodb 流,并在可用时使用流数据调用您的函数。这个过程是

标签: amazon-web-services aws-lambda amazon-iam amazon-dynamodb-streams


【解决方案1】:

您所描述的是AWS Lambda Event Source Mapping 的示例,它仅适用于 Kinesis、DynamDB 和 SQS。

但是,您没有授予函数调用自身的权限。相反,您授予 AWS Lambda 服务(不是您的函数)调用您的函数的权限。原因是 Lambda 服务将在后台代表您处理 DynamoDB 流,并在可用时使用流记录调用您的函数。

请注意,WooferLambdaRole 角色的信任策略适用于 lambda.amazonaws.com

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

信任策略意味着 lambda 服务(同样不是您的函数,而是 aws lambda 服务本身)将能够承担包含 WooferLambdaRolePolicy 的角色。随后,lambda 服务将能够与 DynamoDB 一起使用并调用您的函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多