如何将对静态s3网站的访问限制为VPN

时间:2015-07-03 03:47:30

标签: amazon-web-services amazon-s3

我试图访问内部静态网站。

公司中的每个人都使用VPN访问我们的Amazon VPC,因此如果您使用VPN,我希望限制对该网站的访问。

所以我在AWS上发现了这个documentation来使用VPC端点,这似乎是我正在寻找的。

所以我用下面的政策创建了一个VPC端点。

{
  "Statement": [
    {
        "Action": "*",
        "Effect": "Allow",
        "Resource": "*",
        "Principal": "*"
    }
  ]
}

在我的S3存储桶上,我验证了我可以从常规Web和VPN访问index.html。

然后我添加了以下存储桶策略以仅限制为VPC端点。

{
  "Id": "Policy1435893687892",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1435893641285",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::mybucket/*",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789:user/op"
        ]
      }
    },
    {
       "Sid": "Access-to-specific-VPCE-only",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::mybucket/*"],
       "Condition": {
         "StringNotEquals": {
           "aws:sourceVpce": "vpce-1234567"
         }
       },
       "Principal": "*"
     }
  ]
}

现在常规网络获得了403,但当我在公司VPN后面时,我也获得了403.

我错过了什么吗?

2 个答案:

答案 0 :(得分:8)

@Michael - sqlbot是对的。

您正在做的是限制访问S3存储桶,您可以使用VPC端点将静态Web内容存储到来自特定AWS VPC的请求。

VPC端点在AWS服务之间建立关联,以允许来自INSIDE的请求来自VPC。

使用VPC和S3 ACL配置无法获得所需内容,但您可以通过ACL和一些VPN配置获得它。

让我们假设连接到您公司的VPN并不意味着所有流量,包括VPN客户端和AWS S3之间的互联网流量都将通过该VPN连接进行路由,因为这是VPN配置通常的工作方式。如果不是这样,请省略以下步骤:

  1. 将一个静态路由添加到您的S3存储桶到您的VPN服务器配置,因此每个客户端都尝试通过VPN访问存储桶,而不是尝试与它建立直接的Internet连接。例如,在OpenVPN上,编辑server.conf,添加以下行:

    push "route yourS3bucketPublicIP 255.255.255.255"

  2. 之后你会看到当客户端连接到VPN时,它会在路由表中添加一个额外的条目,对应于静态路由,告诉它通过VPN到达桶。

    1. 使用S3存储桶ACL“IpAddress”字段设置所需的配置。看起来应该是这样的:
    2. {
        "Version": "2012-10-17",
        "Id": "S3PolicyId1",
        "Statement": [
          {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::examplebucket/*",
            "Condition": {
               "IpAddress": {"aws:SourceIp": "54.240.143.0/24"},
               "NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"} 
            } 
          } 
        ]
      }
      

      您使用IpAddress字段允许使用CIDR notation的IP或IP范围,NotIpAddress字段以相同的方式限制IP或IP范围(您可以省略一个)。在IpAddress上指定的IP(或IP范围)应该是网关接口的公共地址,该网关接口用于路由公司的VPN Internet流量(S3看到的IP地址)你VPN上的某个人试图连接到它。)

      更多信息:

      http://www.bucketexplorer.com/documentation/amazon-s3--access-control-list-acl-overview.html

      http://aws.amazon.com/articles/5050/

      http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-3

      https://openvpn.net/index.php/open-source/documentation/howto.html

答案 1 :(得分:1)

实际上,@ Michael - sqlbot 直到2015年5月15日。你做的是正确的。您找到了(再次,正确)文档,允许您在VPC中设置S3存储桶(可能无法访问外部世界),就像设置EC2计算机一样。因此,

  

在我的S3存储桶上,我验证了我可以从常规Web和VPN访问index.html。

是个问题。如果您没有犯错,那么不应该能够从常规网络访问存储桶。之后你所做的一切都无关紧要 - 因为你没有在你的VPN连接的VPC中创建 S3桶

你没有详细说明你在第一步中所做的事情;最简单的可能是删除这个桶并从头开始。需要设置路由表,哪些不容易出错。 This是一套简单的指示 - 但它并没有涵盖您所遵循的文档。

但是,任何超出此功能的链接(即2015年5月之前的任何链接)都无关紧要。