允许lambda函数访问S3存储桶,但阻止外部IP

时间:2020-05-11 02:49:00

标签: amazon-web-services amazon-s3 aws-lambda

我试图借助lambda函数在S3存储桶中进行编写,但希望S3存储桶仅可用于办公室网络中的IP。

我已经使用了此存储桶策略,但这不允许我的lambda写入S3存储桶,当我删除I​​P阻止部分时,lambda函数可以正常工作。

我如何更改此存储桶策略,以便它允许lambda写入但不允许外部IPS访问S3存储桶?

谢谢!

{


"Version": "2012-10-17",

    "Id": "",
    "Statement": [
        {
            "Sid": "AllowSESPuts",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::mybucket.net/*",
            "Condition": {
                "StringEquals": {
                    "aws:Referer": "230513111850"
                }
            }
        },
        {
            "Sid": "AllowECSPuts",
            "Effect": "Allow",
            "Principal": {
                "Service": "ecs-tasks.amazonaws.com"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::mybucket.net/*"
        },
        {
            "Sid": "",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::abc.net/*",
                "arn:aws:s3:::abc.net"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "AROAJIS5E4JXTWB4RTX3I:*",
                        "230513111751"
                    ]
                },
                "NotIpAddress": {
                    "aws:SourceIp": [
                      "81.111.111.111/24" --dummy IP
                    ]
                }
            }
        }

    ]
}

2 个答案:

答案 0 :(得分:1)

通常,如果可以避免在策略中使用Deny条语句,则会使工作更加轻松。

因此,您可以配置:

  • 具有桶策略的Amazon S3存储桶,该存储桶允许从所需的CIDR范围进行访问
  • 用于Lambda函数的 IAM角色,允许访问Amazon S3存储桶

由于默认情况下拒绝访问,因此存储桶策略中无需使用Deny语句。

答案 1 :(得分:0)

一种典型的方法是将lambda函数放置在专用VPC子网内。然后将一个S3网关VPC端点附加到该端点,并将相应的S3存储桶策略设置为仅允许从VPC端点执行某些操作。 [ref]