繁体   English   中英

是否可以基于域或 IP 对私有 S3 文件进行 GET 访问?

[英]Is it possible to have a GET access to private S3 files based on domain or IP?

我在 S3 中有一个私有存储桶。 我可以在 S3 中上传文件,但是当我想查看/下载文件时,我收到“拒绝访问”消息。

现在,我无法使用 signedURL。

我想允许基于我的服务器 IP / 域下载我的文件。 是否可以在存储桶策略级别进行管理? 我在 inte.net 中找到的所有内容都将我的存储桶转换为公共存储桶,这不是我想要的。

您可以使用aws:Referer ,如下所示

{
  "Version":"2012-10-17",
  "Id":"http referer policy example",
  "Statement":[
    {
      "Sid":"Allow get requests originating from www.example.com and example.com.",
      "Effect":"Allow",
      "Principal":"*",
      "Action":["s3:GetObject","s3:GetObjectVersion"],
      "Resource":"arn:aws:s3:::awsexamplebucket1/*",
      "Condition":{
        "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
      }
    }
  ]
}

然而,这是相当容易规避的保护,不应该依赖于绝对安全:

aws:referer不应用于防止未经授权的各方直接发出 AWS 请求。 提供它只是为了让客户保护他们的数字内容,例如存储在 Amazon S3 中的内容,以免在未经授权的第三方网站上被引用。

不确定我们是否拥有了解您的问题的所有详细信息,例如,您是否拥有存储桶的所有权等。

鉴于您询问 IP 白名单,这里有一个指南: https://www.cloudsavvyit.com/5761/how-to-whitelist-ip-addresses-to-access-an-aws-s3-bucket/

所以是的,如果您对 s3 拥有必要的所有权,这一切都应该是可能的

根据您希望如何使用它,您可以使用以下选项。

签约Cookies

如果您试图限制对资产的访问,除非有人公开访问您的网站,这个想法的解决方案是在您的 S3 存储桶前面添加 CloudFront(最好为 S3 使用一个来源,为您的应用程序使用另一个来源,但都在同一域下) .

使用此方法 go 后,您可以使用Signed Cookies ,这将至少强制用户通过安全签名者访问。 与签名 URL 不同,这是一次性完成的,不会影响现有的代码库(没有资产的自定义 URL)。

推荐人 Header

虽然不理想,但您可以使用 referer header 作为存储桶策略的条件或附加到 CloudFront 分配时作为WAF规则。 需要明确的是,这只是一个 header ,任何人都可以设置。 如果任何信息是敏感的,则不要使用此选项。

有关此选项的更多信息,请参阅如何使用 AWS WAF、Amazon CloudFront 和 Referer 检查文档防止热链接

VPC 网关端点

如果与 S3 的唯一通信是通过连接到 S3 API 的实例(例如通过 SDK 或 CLI),则保持 S3 存储桶私有的首选方法。 如果您在浏览器中从 S3 向用户公开提供内容,这将不起作用。

通过为 S3 创建网关端点,您可以在 S3 存储桶策略中为aws:SourceVpce创建条件,这将允许您将GetObject操作限制为仅此连接。

IP 地址

正如您可以通过referer header 将其列入白名单一样,您也可以通过源地址 IP 将其列入白名单。 此选项仅适用于访问 object 的源是固定 IP 地址的情况,例如通过 NAT 连接出站的 EC2 实例。 如果您正在运行一个公共网站并且资产在浏览器中提供,则此选项不可行,因为需要列入白名单的 IP 将是客户端而不是服务器。

这可以通过使用IpAddress条件的存储桶策略或通过将IPSet附加到附加到 CloudFront 的 WAF 来执行。

概括

以上是所有可用的选项,其中一些选项优于其他选项。 这完全取决于您如何使用 S3,并且您可以使用其中的多个来进一步锁定它。

您可以使用 NotIpAddress 条件将特定 IP 地址限制到存储桶。 如果您仍然收到访问被拒绝的信息,请检查文件的内容是否未使用 KMS 密钥加密,如果您没有访问 KMS 密钥的权限,这将阻止用户通过 UI 下载文件。

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId1",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
     "arn:aws:s3:::awsexamplebucket1",
         "arn:aws:s3:::awsexamplebucket1/*"
      ],
      "Condition": {
     "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"}
      }
    }
  ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM