kubernetes - AWS lambda 和 IAM 网络策略
问题描述
我正在部署一个 lambda 函数 -StatusCheck
在我的 VPC 中。该功能是使用 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
?
解决方案
使用 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:*:*:*"
推荐阅读
- regex - 在 Python 中使用 RegEx 从 URL 中弹出多个字母数字字符串
- database - 在 MS Access 中创建一个查询,如果未提供输入,则返回所有条目;如果提供输入,则返回所选条目
- c - 如何在字符串的开头和结尾识别来自 MC60 的每个响应的 CR 和 LF?
- python - Google App Engine - Python - Babel - write_mo()
- mysql - 如何限制 SQL Left JOIN 只返回从表的最新记录
- python-3.x - 根据索引拆分DataFrame
- sql-server - 当某些参数可能留空时,使用 AND/OR 从 SQL Server 检索数据
- html - 在此循环进度条中编辑尺寸 CSS
- javascript - 如何在中使用导入语句