政策拒绝访问 Amazon S3
Policy Denying Access On Amazon S3
使用 s3cmd 下面的策略允许我像这样 ListAllBuckets :
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 创建的存储桶出于某种原因无法使用。但我仍然无法向其上传任何文件(拒绝访问)。我可以列出存储桶并创建新存储桶。所有的建议似乎都告诉我要完全按照我在下面做的事情去做,但是 none 如果可行的话。我还漏掉了什么吗?
{
"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/*"
]
}
]
}
"Resource": "arn:aws:s3:::backups/*"
...应该...
"Resource": "arn:aws:s3:::your_bucket_name/backups/*"
您在其他地方使用的 *
有点意外,因为它被解释为 "all my buckets."
好吧,我已经修复了,但我仍然很困惑。
原来当我 运行
s3cmd --configure
我接受了 "US" 的默认区域。这应该设置为 "us-east-1"。我通过 运行 debug
发现了这个
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/*"
]
}
]
}
最后一点,我已将此政策附加到用户而不是组。这对我的使用很有意义,但是当我问这个问题时,我将它附加到一个组并将用户添加到该组。不确定这是否会有所作为。
使用 s3cmd 下面的策略允许我像这样 ListAllBuckets :
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 创建的存储桶出于某种原因无法使用。但我仍然无法向其上传任何文件(拒绝访问)。我可以列出存储桶并创建新存储桶。所有的建议似乎都告诉我要完全按照我在下面做的事情去做,但是 none 如果可行的话。我还漏掉了什么吗?
{
"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/*"
]
}
]
}
"Resource": "arn:aws:s3:::backups/*"
...应该...
"Resource": "arn:aws:s3:::your_bucket_name/backups/*"
您在其他地方使用的 *
有点意外,因为它被解释为 "all my buckets."
好吧,我已经修复了,但我仍然很困惑。
原来当我 运行
s3cmd --configure
我接受了 "US" 的默认区域。这应该设置为 "us-east-1"。我通过 运行 debug
发现了这个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/*"
]
}
]
}
最后一点,我已将此政策附加到用户而不是组。这对我的使用很有意义,但是当我问这个问题时,我将它附加到一个组并将用户添加到该组。不确定这是否会有所作为。