使用 s3cmd,下面的策略允许我像这样列出 AllBuckets:
s3cmd ls
和 ListBucket 像这样:
s3cmd ls s3://backups/
但我无法上传这样的文件:
s3cmd put filename s3://backups/
我刚刚收到此错误:
ERROR: S3 error: Access Denied
该政策基于搜索和网络上的许多示例,但我只是看不出哪里出了问题。该策略是允许用户将文件上传到备份目录(最终我什至不知道他们要列出哪些存储桶,但我将其放入只是为了检查该策略实际上是否已被读取)。
其他可能相关的信息 -
- 我使用 Dragon Disk(S3 的前端)与其他用户创建了存储桶
- 该新 IAM 用户通过属于附加了该策略的组来连接到该策略。
这是策略,请注意,CreateObject 和 PutObject 是仅有的两个原始条目,添加其他条目几乎只是为了看看发生了什么:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl",
"s3:CreateObject",
"s3:*"
],
"Resource": "arn:aws:s3:::backups/*"
}
]
}
编辑 1 -
只是说,如果我添加此策略,它就可以正常工作,所以我知道这与我的策略有关:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
编辑2 - 我制定了另一项策略,用于创建一个名为“asdwasw432”的存储桶,以防万一我的 UI 创建的存储桶因某种原因无法使用。但我仍然无法上传任何文件(访问被拒绝)。我可以列出存储桶并创建新存储桶。所有的建议似乎都告诉我要完全按照我在下面做的事情去做,但如果有效的话就没有。我还漏掉了什么吗?
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1397834652000",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "Stmt1397834745000",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::asdwasw432",
"arn:aws:s3:::asdwasw432/*"
]
}
]
}
最佳答案
好吧,我已经解决了这个问题,但我仍然很困惑。
事实证明,当我运行时
s3cmd --configure
我接受了默认区域“美国”。这应该设置为“us-east-1”。我通过运行调试发现了这一点
s3cmd -d ..etc...
这向我显示了包含此内容的一行 -
'reason': 'Bad Request', 'data': '<?xml version="1.0"
encoding="UTF-8"?>\n<Error><Code>AuthorizationHeaderMalformed</Code>
<Message>The authorization header is malformed; the region \'US\' is
wrong; expecting \'us-east-1\'</Message><Region>us-east-1</Region>
重新运行配置并更正区域解决了这个问题。
如果该区域确实是问题所在,请有人解释一下为什么我能够在不正确的区域上正常工作?最近,我通过制作
使一切正常工作Action : "*"
这让我陷入了另一个死胡同,假设我一定使用了错误的命令。为了完整起见,此政策对我有效(只要区域正确!):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::asdwasw432",
"arn:aws:s3:::asdwasw432/*"
]
}
]
}
最后一点,我已将此策略附加到用户而不是组。这对我的使用来说是有意义的,但是当我提出问题时,我将其附加到一个组并将用户添加到该组。不确定这是否会产生影响。
关于amazon-web-services - 拒绝访问 Amazon S3 的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29307452/