【问题标题】:Why can't I put wildcard to invoke a lambda function in IAM policy?为什么我不能在 IAM 策略中使用通配符来调用 lambda 函数?
【发布时间】:2022-02-19 04:29:34
【问题描述】:

我需要从另一个 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 on resource:arn:aws:lambda:ap-southeast-2:264100014405:handler,因为没有基于身份的策略允许 lambda:InvokeFunction 操作。

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

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

效果很好。

lambdaA 调用 aws-sdk 以调用 lambda 名称为 handler 的 lambda。

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

【问题讨论】:

  • 但字符串 handlerhandler:* 不匹配。您是否尝试将两者都添加到 Resource

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


【解决方案1】:

您对 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 而言,Lambda 函数的handler 是一个配置变量。它在 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",
  ...
}

【讨论】:

  • 当我需要调用一个 lambda 时,我是否指定函数 arn 有或没有 version/alias 在末尾?
【解决方案2】:

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

它将授予调用handler 的所有版本/别名的权限。

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多