【发布时间】: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 ?
【问题讨论】:
-
这是需要应用到 Lambda 函数的 IAM 策略,以便函数可以在 VPC 内正确运行。这不是您创建 Lambda 函数所需的 IAM 策略。列出了创建 Lambda 函数所需的策略 here。此外,您根本没有正确使用
Resource。
标签: kubernetes aws-lambda amazon-iam