【问题标题】:AWS lambda and IAM Network policyAWS lambda 和 IAM 网络策略
【发布时间】:2021-09-29 07:52:58
【问题描述】:

我正在我的 VPC 中部署一个 lambda 函数 - StatusCheck。该功能是使用 awscli 从我的 k8s 集群中的工作节点上运行的一个 pod 部署的。我将AWSLambdaVPCAccessExecutionRole 策略附加到 k8s 工作节点,该策略看起来像

    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface",
                "ec2:AssignPrivateIpAddresses",
                "ec2:UnassignPrivateIpAddresses"
            ],
            "Resource": "*"
        }
    ]
}

显然,默认情况下,它还允许 k8s 集群中的其他 pod 创建/删除网络接口,这是不可取的。

更新上述策略以添加资源不起作用。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface",
                "ec2:AssignPrivateIpAddresses",
                "ec2:UnassignPrivateIpAddresses"
            ],
            "Resource": "arn:aws:lambda:*:77777777:function:*StatusCheck*"
        }
    ]
}

错误: StatusCheck. Create Failed. Resource handler returned message: "The provided execution role does not have permissions to call CreateNetworkInterface on EC2 (Service: Lambda, Status Code: 400

是否可以将 ENI 的创建/删除仅限于 lambda 函数StatusCheck

【问题讨论】:

  • 这可能会有所帮助:docs.aws.amazon.com/lambda/latest/dg/…
  • 这是需要应用到 Lambda 函数的 IAM 策略,以便函数可以在 VPC 内正确运行。这不是您创建 Lambda 函数所需的 IAM 策略。列出了创建 Lambda 函数所需的策略 here。此外,您根本没有正确使用Resource

标签: kubernetes aws-lambda amazon-iam


【解决方案1】:

您的策略的问题是您指定的操作不适用于 Lambda 函数资源。 Lambda 使用它们来调用其他服务(以及其他非 Lambda 资源)。

查看IAM actions for EC2 页面上的CreateNetworkInterface 条目(您收到错误)表明它针对网络接口子网(以及可选安全组),因此如果您想将其限制为资源子集,则需要制作多个资源名称(使用通配符,就像您尝试过的那样)以匹配这些资源。

【讨论】:

    【解决方案2】:

    在使用 AWS SAM 时遇到了同样的问题。我还必须添加“ec2:DescribeInstances”权限。 所以我的完整政策是:

              - Effect: "Allow"
                Action:
                  [
                    "logs:CreateLogGroup",
                    "logs:CreateLogStream",
                    "logs:PutLogEvents",
                    "logs:DescribeLogStreams"
                  ]
                Resource: "arn:aws:logs:*:*:*"
    
              - Effect: "Allow"
                Action: 
                  [
                    "ec2:DescribeNetworkInterfaces",
                    "ec2:CreateNetworkInterface",
                    "ec2:AttachNetworkInterface",
                    "ec2:DescribeInstances",
                    "ec2:DeleteNetworkInterface"
                  ]
                Resource: "arn:aws:ec2:*:*:*"
    

    【讨论】:

      猜你喜欢
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2021-12-24
      • 2019-04-18
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多