我有一个 Amazon S3 存储桶,并且希望将其可供特定计算机上的脚本使用,而无需部署登录凭证。所以我的计划是只允许从该机器的 IP 进行匿名访问。我对亚马逊云还很陌生,存储桶策略看起来是不错的选择。我将以下策略添加到我的存储桶中:
{
"Version": "2008-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::name_of_my_bucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"my_ip_1/24",
"my_ip_2/24"
]
}
}
}
]
}
但是匿名访问还是不行。为了进行测试,我在 S3 管理控制台中向“Everyone”授予了访问权限。这很好用,但显然不是我想要做的。 ;-) 有什么提示我做错了什么以及如何让它工作吗?
我的用例是使用 EC2 和 S3 进行一些数据处理,因此通过 IP 进行访问控制比摆弄用户帐户要简单得多。如果有更简单的解决方案,我愿意接受建议。
但是匿名访问还是不行。
什么操作仍然不起作用确切地说,您是否偶然尝试列出存储桶中的对象?
很多时候,一个用例隐含地涉及亚马逊S3 http://aws.amazon.com/s3/API 调用还可以处理不同的资源类型Resource
已经明确成为政策的目标。具体来说,您需要了解之间的区别服务操作 http://docs.amazonwebservices.com/AmazonS3/latest/API/SOAPServiceOps.html (e.g. 列出所有我的存储桶 http://docs.amazonwebservices.com/AmazonS3/2006-03-01/API/SOAPListAllMyBuckets.html), 对桶的操作 http://docs.amazonwebservices.com/AmazonS3/latest/API/SOAPBucketsOps.html (e.g. 列表桶 http://docs.amazonwebservices.com/AmazonS3/2006-03-01/API/SOAPListBucket.html) and 对对象的操作 http://docs.amazonwebservices.com/AmazonS3/latest/API/SOAPObjectsOps.html (e.g. 获取对象 http://docs.amazonwebservices.com/AmazonS3/2006-03-01/API/SOAPGetObject.html).
特别是,Resource
您的策略规范当前仅处理存储桶内的对象(arn:aws:s3:::name_of_my_bucket/*
),这意味着您无法列出存储桶中的对象(尽管如此,您应该能够放置/获取/删除对象)-以便还允许通过以下方式列出存储桶中的对象:列表桶您需要相应地修改您的政策如下:
{
"Version": "2008-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
// ... your existing statement for objects here ...
},
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::name_of_my_bucket",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"my_ip_1/24",
"my_ip_2/24"
]
}
}
}
]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)