为什么我不能在 IAM 策略中使用通配符来调用 lambda 函数?

Why can't I put wildcard to invoke a lambda function in IAM policy?

我需要从另一个 lambda (lambdaA) 调用一个 lambda (lambdaB)。在 lambdaA 的 IAM 策略中,我有以下配置:

{
            "Action": [
                "lambda:invokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:ap-southeast-2:264100014405:function:handler:*"
            ],
            "Effect": "Allow"
        }

它不起作用,我在 lambdaA 中遇到以下错误:

lambdaA 无权执行:lambda:InvokeFunction 资源:arn:aws:lambda:ap-southeast-2:264100014405:handler 因为没有基于身份的策略允许 lambda:InvokeFunction 操作。

但是如果我从资源中删除通配符:

"Resource": [
                "arn:aws:lambda:ap-southeast-2:264100014405:function:handler"
            ],

它工作正常。

lambdaA 调用 aws-sdk 调用 lambda,lambda 名称为 handler.

我放通配符的原因是我想授予 lambdaA 权限以在将来调用 lambdaB 上的所有别名。我应该为 lambdaA 的角色设置什么正确的 IAM 策略?

您对AWS Lambda 函数的ARN 有一点误解。将 IAM 策略中的 ARN 更改为:

arn:aws:lambda:ap-southeast-2:264100014405:function:YOUR_FUNCTION_NAME

您可以在 AWS 控制台中找到 YOUR_FUNCTION_NAME 或使用 aws-cli 并调用 aws lambda list-functions

说明

Lambda 函数的 ARN 包括:

arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME

使用别名或版本时,您可以附加:

  • arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME:ALIAS
  • arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME:VERSION

你可以阅读更多in the Lambda documentation

Lambda 函数的 handler 就 Lambda 而言是一个配置变量。它在 Arns 中不起作用。如果您使用 aws-cli 执行 aws lambda list-functions 命令,您会看到处理程序是与 ARN 分开的 属性。例如,对于每个函数:

{
  "FunctionName": "stack-overflow-func",
  "FunctionArn": "arn:aws:lambda:us-west-2:111111111111:function:stack-overflow-func",
  "Runtime": "python3.9",
  "Role": "arn:aws:iam::111111111111:role/role-name-3IJQ",
  "Handler": "handler.lambda_handler",
  ...
}

您需要将通配符添加到不带冒号的 lambdaName 中。像这样: arn:aws:lambda:ap-southeast-2:264100014405:function:handler*

它将授予调用 handler 的全部 versions/aliases 的权限。