我在区域db-backup-production
Ireland (s3.eu-west-1.amazonaws.com)
的存储桶
我正在尝试使用以下政策上传文件:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::db-backup-production/*"
}
]
}
我一直收到以下错误
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
当我使用此政策上传时:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
上传有效。我做错了什么?
答案 0 :(得分:0)
如果你只是做了一个s3“put”,你的政策应该给你足够的权利。但是,如果您通过sdk,cli调用等列出或获取存储桶对象,则还需要存储桶本身的权限。
要提供这些权限,请将策略的“资源”部分用作数组,并将“arn:aws:s3 ::: db-backup-production”添加为此数组中的资源。我想是这样的:
"Resource": ["arn:aws:s3:::db-backup-production/*", "arn:aws:s3:::db-backup-production" ]
答案 1 :(得分:0)
在指定S3存储区权限时,您需要考虑存储区本身的权限,以及存储区内容的权限。
一种方法是要求为同一个存储桶指定两个资源:
"Resource": ["arn:aws:s3:::db-backup-production","arn:aws:s3:::db-backup-production/*"]
第一个资源指定存储桶级别范围,db-backup-production / *指定对象级别范围。
但是,您可以在两个语句中考虑单独的对象和存储区级别权限,如下所示:
"Version": "2012-10-17", "Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::db-backup-production"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::db-backup-production/*"]
} ] }
此表单可让您更精细地控制存储桶和对象级别的资源。
请参阅Writing IAM Policies: How to Grant Access to an Amazon S3 Bucket