在迁移到AWS EC2时,我想出于正当理由限制我的实例的用户权限。实例需要做的一件事是访问S3上的文件并在那里写文件。但是,如果没有向该用户授予所有权限,我找不到任何方法来实现此目的。
s3cmd允许我在我赋予策略权限的s3存储桶上调用“ls”和“du”,但在尝试与其中一个文件夹进行PUT /同步时总是失败并显示403错误。如果我使用我的root凭据,则传输将直接进行。
所以,我不明白为什么如果我为所述桶提供所有权限,它不能PUT,但是如果我给它 arn:aws:s3 ::: * (所有桶)那么它可以。对我毫无意义。
之前有其他人曾经处理过此事吗?
答案 0 :(得分:28)
尝试这样的事情。我认为问题是你需要s3:ListAllMyBuckets和s3:ListBuckets才能使s3cmd工作。不知道为什么,但它不会工作,除非它可以获得桶的列表。我第一次尝试使用s3cmd权限时遇到了同样的问题,这就是解决方案。
{
"Statement": [
{
"Action": [
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
},
{
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket/path",
"arn:aws:s3:::bucket/path/*"
]
}
]
}
修改我添加了s3:PutObjectAcl
动作,这是较新版本的s3cmd所需要的,如下面的Will Jessop所述。
答案 1 :(得分:4)
bwight的答案几乎是正确的(它可能是旧版本的s3cmd),但我需要添加s3:PutObjectAcl
才能使其正常工作:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt123456",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "Stmt123457",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::bucketname",
"arn:aws:s3:::bucketname/*"
]
}
]
}
答案 2 :(得分:3)
我正在尝试上传大文件,但政策对我来说效果不佳,我结束了向用户添加下一个政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1397834652000",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "Stmt1397834745000",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:GetBucketLocation",
"s3:AbortMultipartUpload",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetObject",
"s3:PutObjectAcl",
"s3:PutObject",
"s3:GetObjectVersionAcl"
],
"Resource": [
"arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"
]
}
]
}
其中my_bucket是我需要通过s3cmd管理文件的存储桶
答案 3 :(得分:0)
如果您要访问子文件夹(如/ bucket-name / path /的原始答案)而不是整个存储桶, ListBucket 操作需要更具体一些:< / p>
{
"Sid": "AllowListingOfFilesInFolder",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket-name"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"path/*"
]
}
}
}
我认为,如果您提供对整个存储桶的访问权限,它也可以使用原始答案。