Amazon s3 遵守预签名URL或IP地址拒绝的Bucket策略?
我希望能够以多种方式限制对S3存储桶中文件的访问。这是因为存储的文件可以以不同的方式访问。我们这样做是因为我们有TBs的文件,所以我们不想复制bucket 一种访问方法是通过使用S3 bucket作为源的标记化CDN交付。为了可以提取文件,我设置了文件的权限,允许每个人下载。使用bucket策略,我可以限制可以获取bucket中文件的IP地址。因此,我将它们限制在CDN IP块中,那些IP地址之外的任何人都无法获取该文件 另一种是访问方法,即使用我们的存储系统直接下载,该存储系统生成S3时间到期的预签名URL 由于CDN拉取有效地需要文件公开可读,有没有办法:Amazon s3 遵守预签名URL或IP地址拒绝的Bucket策略?,amazon-s3,Amazon S3,我希望能够以多种方式限制对S3存储桶中文件的访问。这是因为存储的文件可以以不同的方式访问。我们这样做是因为我们有TBs的文件,所以我们不想复制bucket 一种访问方法是通过使用S3 bucket作为源的标记化CDN交付。为了可以提取文件,我设置了文件的权限,允许每个人下载。使用bucket策略,我可以限制可以获取bucket中文件的IP地址。因此,我将它们限制在CDN IP块中,那些IP地址之外的任何人都无法获取该文件 另一种是访问方法,即使用我们的存储系统直接下载,该存储系统生成S3时间到期
我有一个有效的IP限制bucket策略,但它会阻止预签名访问…删除bucket策略会修复预签名访问,但文件是公共的。默认情况下Amazon S3中的对象是私有的。然后可以通过以下任何方法授予访问权限:
- 每对象ACL(主要用于授予公共访问权限)
- 具有规则的Bucket策略,用于定义在何种情况下允许哪些API调用(例如仅从给定的IP地址范围)
- IAM策略——类似于Bucket策略,但可以应用于特定的用户或组
- 一个预先签名的URL,允许对对象进行有时间限制的访问
非常奇怪的是,你说IP限制“扼杀了预先签署的访问”——这应该是不可能的。问题解决了——以下是我的结论。我意识到我对IP地址部分使用了一个“拒绝”(看到代码发布在某个地方,它自己工作)来覆盖任何允许,所以我需要翻转它 我还确保我对bucket中的对象没有任何匿名权限
{
"Version": "2012-10-17",
"Id": "S3PolicyId2",
"Statement": [
{
"Sid": "Allow our access key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789:user/myuser"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::mybucket/*"
},
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"192.168.0.1/27",
"186.168.0.1//32",
"185.168.0.1/26"
]
}
}
}
]
如果删除IP限制策略允许下载所有文件,那么签名的URL将无法正常工作,因为听起来各个对象都是公共的。他们不应该这样。如果操作正确,只需允许来自白名单IP的匿名访问,而不是拒绝来自“非”白名单IP的访问。您能否澄清您的CDN是CloudFront,还是其他什么?原因是CloudFront支持一个对象访问标识,可以专门允许CloudFront访问S3存储桶。很奇怪,你说IP限制“阻止预签名访问”——这应该是不可能的。你能提供你创建的策略的(修订)副本吗?我在IP地址中使用了拒绝的事实是问题所在…谢谢你对这方面的见解,Michael。我在下面列出了我的最终代码,以供将来遇到这种情况的人使用。非常感谢您——这篇文章和另一篇文章对我帮助很大。我的问题是,我正在使用拒绝来拒绝策略中未列出的任何IP地址。拒绝总是覆盖允许,所以这就是发生的情况。将我的代码调整到上面的位置可以修复这种情况。