限制对 Amazon S3 URL 的全球访问

Posted

技术标签:

【中文标题】限制对 Amazon S3 URL 的全球访问【英文标题】:Restrict world access to Amazon S3 URLs 【发布时间】:2015-02-20 03:27:20 【问题描述】:

我已经使用 CloudFront 配置了一个 S3 存储桶,并使用了 CludFront 提供的备用域名(我在我的 DNS 区域文件中设置了域别名 images.mydomain.com)。 在我的 DNS 主机上,我指向 xyz.cloudfront.net 的 CNAME。我的 s3 存储桶名称和 CNAME 域别名都是 images.mydomain.com。

我希望世界能够访问我在 images.mydomain.com/image.jpg 上的图像,这非常有效。

问题是世界也可以通过以下两个 URL 直接访问相同的资源,我不希望这种情况发生。我只希望 images.mydomain.com/image.jpg 为世界工作,而不是以下两个。

images.mydomain.com.s3.amazonaws.com/image.jpg s3.amazonaws.com/images.mydomain.com/image.jpg

我如何实现这一目标?请帮忙。

【问题讨论】:

【参考方案1】:

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html

您通过创建源访问来限制对 Amazon S3 内容的访问 身份,这是一个特殊的 CloudFront 用户。您更改 Amazon S3 授予原始访问身份访问权限的权限 您的对象,并删除其他所有人的权限。当你的 用户使用 CloudFront URL 访问您的 Amazon S3 对象, CloudFront 源访问身份获取用户的对象 代表。如果您的用户尝试使用 Amazon S3 URL 访问对象, 他们被拒绝访问。源访问身份有权 访问您的 Amazon S3 存储桶中的对象,但用户不能。

【讨论】:

我已经完全按照您的解释做了,事实上我遵循了您引用的相同资源。其他两个 URL 仍在工作。在这种情况发生之前,我是否需要等待一段时间。以下是我对 s3 存储桶的政策:` "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ "Sid": "1", "Effect": " Allow", "Principal": "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ***************" , "Action": "s3:GetObject", "资源": "arn:aws:s3:::images.mydomain.com/*" ] ` 另外,当我在我的 DNS 主机上创建 CNAME 记录时,我应该使用云端域名 (xyz.cloudfront.net) 还是 s3 路径 (images.mydomain.com.s3.amazonaws. com)?哪个是正确的? 我为我的 S3 存储桶创建的新策略仍然不起作用:` "Id": "Policy1419249708936", "Statement": [ "Sid": "Stmt******* *****”、“动作”:“s3:*”、“效果”:“拒绝”、“资源”:“arn:aws:s3:::images.mydomain.com/*”、“主体” : "AWS": [ "" ] , "Sid": "Stmt************", "Action": [ "s3:GetObject" ], "效果”:“允许”、“资源”:“arn:aws:s3:::images.mydomain.com/”、“主体”:“AWS”:[“arn:aws:iam:: cloudfront:user/CloudFront 源访问身份 **************" ] ] ` 删除所有存储桶、IAM 用户和我在努力实现上述目标时创建的云端分配后,我创建了一个新存储桶,然后创建了一个云端分配以使用新存储桶,一切正常。坦克你的帮助@E.J.布雷南 @user3708270 那么问题出在哪里?我遇到了同样的问题,删除所有存储桶后才有效?

以上是关于限制对 Amazon S3 URL 的全球访问的主要内容,如果未能解决你的问题,请参考以下文章

使用预签名 URL 上传到 Amazon S3 时限制对象大小

除非 url 被签名,否则限制对 S3 对象的访问

使用 Amazon S3 阻止公有访问

仅将 S3 对象 URL 限制为网站上的登录用户

Amazon S3 存储桶策略只允许访问特定的 http

Amazon S3 存储桶策略,我做错了啥?