【问题标题】:Allow Lambda to be invoked by all EC2 instances允许所有 EC2 实例调用 Lambda
【发布时间】:2022-11-29 23:02:58
【问题描述】:

是否可以允许所有 EC2 实例调用 lambda 而无需在 EC2 端为此提供任何特定权限?

为此,我尝试添加以下内容基于资源的政策到我的 lambda 函数,希望它会允许我所有的 EC2 实例调用它:

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "InvokeLambdaFunction",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:eu-west-1:123456789012:myLambdaFunction",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:ec2:eu-west-1:123456789012:instance/*"
        }
      }
    }
  ]
}

但是,当我在 EC2 实例中使用 aws CLI 调用我的 lambda 时,访问被拒绝:

sh-4.2$ aws lambda invoke --function-name "myLambdaFunction" --payload "{\"instance-id\":\"$EC2_INSTANCE_ID\"}" --region eu-west-1 response.json

调用 Invoke 时发生错误(AccessDeniedException) 操作: 用户: arn:aws:sts::123456789012:承担角色/AmazonSSMRoleForInstancesQuickSetup/i-06e731b382734dc8f 无权在资源上执行:lambda:InvokeFunction: arn:aws:lambda:eu-west-1:123456789012:function:myLambdaFunction 因为没有基于身份的策略允许 lambda:InvokeFunction 行动

我在这里遗漏了什么或者这根本不可能吗?

【问题讨论】:

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


    【解决方案1】:

    虽然 lambda 资源策略允许从实例调用,但实例本身没有允许该操作的身份策略。

    您需要将实例配置文件附加到 EC2 实例,并且需要确保实例配置文件具有关联的 IAM 策略,该策略具有该 lambda 的 lambda:InvokeFunction 权限。

    一般来说,由于权限通常被隐式拒绝,因此您一方面需要基于资源的策略,另一方面需要基于身份的策略。

    【讨论】:

    • 感谢您的澄清。但是在那种情况下,如果我仍然必须在 EC2 端授予权限,我真的看不到拥有基于资源的策略的意义,因为除非我弄错了,否则仅向 EC2 授予权限就足够了(@ 987654322@) 允许它调用函数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2016-07-23
    • 2016-12-25
    相关资源
    最近更新 更多