如何只允许特定IP访问AWS S3

68次阅读
没有评论

问题描述

最近我们在测试AWS VPC时,项目的一个需求是只允许VPC内的节点访问S3存储桶,而拒绝来自其他IP地址的访问。有没有办法只允许特定IP访问AWS S3?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

您可以通过在AWS S3存储桶上附加策略来实现只允许特定IP访问的要求。以下是一个示例策略:

{
  "Id": "S3PolicyId1",
  "Statement": [
    {
      "Sid": "IPDeny",
      "Effect": "Deny",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::bucket/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "54.240.143.188/32"
        }
      }
    }
  ]
}

上述策略将拒绝除了IP地址为54.240.143.188之外的所有访问。您可以将上述策略中的IP地址替换为您要允许访问的特定IP地址。请注意,这个策略将拒绝所有访问,除非来自特定IP地址。

方案2

注意:下面的策略是不安全的,不建议使用。
另一种方法是使用以下策略来拒绝特定IP地址的访问:

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId1",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::bucket/*",
      "Condition": {
        "NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"}
      }
    }
  ]
}

上述策略将允许除了IP地址为54.240.143.188之外的所有访问。请注意,这个策略将允许所有访问,除非来自特定IP地址。
请注意,方案2中的策略是不安全的,不建议使用。它允许匿名用户从任何IP地址对存储桶执行任何操作,除了指定的IP地址之外。此外,方案2中关于策略功能的描述是不正确的。

注意事项

  • 请确保在使用策略之前备份您的存储桶数据,以防止意外的数据丢失。
  • 请避免在示例中使用真实的IP地址,最好使用RFC-5737中保留的地址,如192.0.2.0/24、198.51.100.0/24和203.0.113.0/24。这些地址在互联网上不可路由,因此在示例中使用它们不太可能引起任何问题。
  • 请确保您的AWS账户具有足够的权限来修改S3存储桶的策略。
  • 请参考AWS S3文档以获取更多关于策略的详细信息和示例。

正文完