限制 lambda 访问 VPC 的权限

dem*_*ito 7 policy lambda vpc amazon-web-services amazon-iam

将 lambda 函数部署到 VPC 时,您需要向 lambda 执行角色授予一系列与网络接口相关的权限。AWS 手册建议为此使用 AWSLambdaVPCAccessExecutionRole 托管策略,如下所示:

{
    "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": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,这一策略并不限制 lambda 可以修改的网络接口,因此可能会允许它扰乱自己的 VPC 外部的网络。我想限制 lambda 可以对其实际部署到的 VPC 或子网执行的操作。然而,到目前为止,我还没有为此制定出可行的政策。

我尝试像这样检查策略中的 VPC:

"Condition": {"StringEquals": {"ec2:Vpc": "${my_vpc_arn}" }}
Run Code Online (Sandbox Code Playgroud)

但仍然被拒绝许可。

CloudTrail 事件包含以下授权消息),用aws sts decode-authorization-message)解码:https: //pastebin.com/P9t3QWEY,其中我看不到任何有用的密钥来检查。

那么是否可以限制 VPC 部署的 lambda 仅修改特定网络接口?

Mar*_*cin 7

您无法将策略限制为单个 NI,因为只有在创建它们之后您才知道它们的 ID。但您应该能够使用以下 lambda 执行策略来限制对特定 VPC 的访问:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AccessToSpecificVPC",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterface",
                "ec2:UnassignPrivateIpAddresses",
                "ec2:AssignPrivateIpAddresses",
                "ec2:DescribeNetworkInterfaces"
            ],
            "Resource": "*",
            "Condition": {
                "ArnLikeIfExists": {
                    "ec2:Vpc": "arn:aws:ec2:<your-region>:<your-account-id>:vpc/<vpc-id>"
                }
            }
        },
        {
            "Sid": "CWLogsPermissions",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",

                "logs:CreateLogGroup",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)