You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改S3 Bucket Policy实现单文件专属IP访问控制?

解决方案:给S3特定文件设置独立IP访问权限

要实现这个需求,核心是利用S3 Bucket Policy的资源匹配优先级条件组合——更具体的资源(比如单个文件)对应的规则会优先于桶级规则,同时通过条件过滤来区分不同文件的访问权限。下面是具体的实现步骤和完整Policy:

思路拆解

我们需要三个核心规则来达成目标:

  1. 保留原有IP段对除目标文件外所有内容的访问权限
  2. 仅允许指定IP访问目标文件onefile.txt
  3. 明确拒绝原有IP段访问目标文件(可选,但能更清晰地强化规则逻辑)

完整Bucket Policy

{
  "Version": "2012-10-17",
  "Id": "mixed-ip-restriction-policy",
  "Statement": [
    {
      "Sid": "AllowOriginalIPsForNonTargetFiles",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::MYBUCKET/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "1.1.1.0/20",
            "2.2.2.0/22"
          ]
        },
        "StringNotEquals": {
          "s3:key": "onefile.txt"
        }
      }
    },
    {
      "Sid": "AllowSpecificIPsForTargetFile",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::MYBUCKET/onefile.txt",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "3.3.3.0/32",
            "4.4.4.0/32"
          ]
        }
      }
    },
    {
      "Sid": "DenyOriginalIPsForTargetFile",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::MYBUCKET/onefile.txt",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "1.1.1.0/20",
            "2.2.2.0/22"
          ]
        }
      }
    }
  ]
}

规则详解

  • 第一个Statement(AllowOriginalIPsForNonTargetFiles)
    保留了你原来的IP段访问权限,但通过StringNotEquals条件排除了onefile.txt——也就是说,只有当访问的不是这个目标文件时,原有IP段的用户才能正常读取内容。

  • 第二个Statement(AllowSpecificIPsForTargetFile)
    专门针对onefile.txt设置允许规则,仅放行3.3.3.04.4.4.0这两个IP(这里用/32表示单个IP,如果你实际是网段可以调整掩码)。

  • 第三个Statement(DenyOriginalIPsForTargetFile)
    这是一个可选但推荐的规则,明确拒绝原有IP段访问目标文件。虽然S3默认是"隐式拒绝"(没有允许规则就会拒绝),但加上这个规则可以让权限逻辑更清晰,避免后续规则变更导致的意外权限泄漏。

验证方法

你可以通过以下方式测试规则是否生效:

  • 1.1.1.0/202.2.2.0/22内的IP访问桶内其他文件(比如s3://MYBUCKET/otherfile.txt),应该能正常读取;访问onefile.txt则会被拒绝。
  • 3.3.3.04.4.4.0访问onefile.txt,可以正常读取;访问其他文件会被拒绝(因为这些IP不在原有允许列表里)。
  • 用其他任意IP访问任何文件,都会被拒绝。

内容的提问来源于stack exchange,提问作者spcsLrg

火山引擎 最新活动