AWS boto - upload file to S3 cause S3ResponseError: 403 Forbidden
AWS boto - upload file to S3 cause S3ResponseError: 403 Forbidden
我有一个名为: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": "*"
}
]
}
上传成功。我做错了什么?
如果您只做 s3 "put",您的保单应该给您足够的权利。但是,如果您通过 sdk、cli 调用等列出或获取存储桶对象,您还需要存储桶本身的权限。
要提供这些权限,请将策略的 "Resource" 部分用作数组,并将 "arn:aws:s3:::db-backup-production" 作为资源添加到该数组中。我是这样想的:
"Resource": ["arn:aws:s3:::db-backup-production/*", "arn:aws:s3:::db-backup-production" ]
在指定 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
我有一个名为: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": "*"
}
]
}
上传成功。我做错了什么?
如果您只做 s3 "put",您的保单应该给您足够的权利。但是,如果您通过 sdk、cli 调用等列出或获取存储桶对象,您还需要存储桶本身的权限。
要提供这些权限,请将策略的 "Resource" 部分用作数组,并将 "arn:aws:s3:::db-backup-production" 作为资源添加到该数组中。我是这样想的:
"Resource": ["arn:aws:s3:::db-backup-production/*", "arn:aws:s3:::db-backup-production" ]
在指定 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