无法从同一账户中的另一个 Lambda 函数调用 AWS Lambda 函数 URL

问题描述 投票:0回答:1

我在同一个 AWS 账户中有 2 个 python lambda 函数。函数 1 启用了函数 url 功能,并启用了 AWS_IAM 身份验证。函数 2 旨在使用 urllib 库调用函数 1。我在功能 1 上设置了以下资源策略

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "my-custom-id001",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::xxxxxxxxxxxx:role/service-role/Function-2-role"
      },
      "Action": "lambda:InvokeFunctionUrl",
      "Resource": "arn:aws:lambda:ap-southeast-2:xxxxxxxxxxxx:function:Function-1",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionUrlAuthType": "AWS_IAM"
        }
      }
    }
  ]
}

我希望这将允许函数 2 调用函数 1,但当我尝试从 AWS 控制台(通过在函数 2 上使用“test”)时,我收到 403 Forbidden。我知道这不是两端的代码,因为当我将身份验证从 AWS_IAM 更改为 NONE 时,调用工作正常。我哪里错了?我还尝试为 Function 2 提供一个明确的策略,允许它调用 Function 1 的函数 url,得到相同的结果:

功能 2 的政策

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "lambda:InvokeFunctionUrl",
            "Resource": "arn:aws:lambda:ap-southeast-2:xxxxxxxxxxxx:function:Function-1"
        }
    ]
}
python amazon-web-services aws-lambda amazon-iam
1个回答
0
投票

您的配置正确,应该在相同和不同的账户中工作,唯一缺少的部分是将 AWS Signature V4 添加到每个请求。

如果您的函数 URL 使用 AWS_IAM 身份验证类型,则您必须对每个函数进行签名 使用 AWS 签名版本 4 (SigV4) 的 HTTP 请求。工具如 awscurl、Postman 和 AWS SigV4 代理提供内置方法来签署您的 使用 SigV4 请求。

请参阅此文档 https://docs.aws.amazon.com/lambda/latest/dg/urls-invocation.html 并选择适合您的技术的库。

© www.soinside.com 2019 - 2024. All rights reserved.