【问题标题】:AWS lambda AccessDeniedException calling another lambda functionAWS lambda AccessDeniedException 调用另一个 lambda 函数
【发布时间】:2018-06-09 10:03:38
【问题描述】:

在我的项目中,我在 python 代码中创建了一个 lambda 函数,在一种方法中必须使用 boto3 调用另一个 lambda 函数。 在我的主要 lambda 中,我创建了这样的客户端:

client = boto3.client('lambda')

然后我以这种方式调用我的方法:

response = client.invoke(
            FunctionName='arn:aws:lambda:eu-west-1:1577:function:test',
            InvocationType='RequestResponse',
            LogType='None',
            Payload=json.dumps(d)
            )

但是当我测试我的主 lambda 控制台时返回此错误:

调用 Invoke 操作时发生错误(AccessDeniedException):用户

我尝试在我的环境变量中设置 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 但是当我尝试保存时,返回此错误:

Lambda 无法配置您的环境变量,因为您提供的环境变量包含当前不支持修改的保留键。此请求中使用的保留密钥:AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY

如何使用 IAM 用户在 lambda 中设置调用?

提前致谢

【问题讨论】:

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


    【解决方案1】:

    不要使用 IAM 用户,而是将 Lambda 调用权限附加到附加到您的父 Lambda 函数的现有 IAM 角色。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "InvokePermission",
                "Effect": "Allow",
                "Action": [
                    "lambda:InvokeFunction"
                ],
                "Resource": "*"
            }
        ]
    }  
    

    注意:您可以指定为资源调用的 Lambda 函数的 ARN。

    【讨论】:

      【解决方案2】:

      如果可能,限制范围,使调用者只能调用您的目标函数,而不是允许它调用 any lambda 函数的“*”资源。

      {
         "Version": "2012-10-17",
         "Statement": [
          {
              "Sid": "InvokePermission",
              "Effect": "Allow",
              "Action": [
                  "lambda:InvokeFunction"
              ],
              "Resource": "arn:aws:lambda:eu-west-1:1577:function:test"
          }
        ]
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-01
        • 2018-08-21
        • 2020-03-23
        • 2019-06-28
        • 2018-05-19
        • 1970-01-01
        相关资源
        最近更新 更多