【发布时间】:2017-07-10 15:28:44
【问题描述】:
所以我有一个用户的 IAM 权限设置为以下。这意味着只允许他们创建/删除/列表/等。桶的“Target_Folder/”中的对象。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt123456789",
"Effect": "Allow",
"Action": [
"s3:CreateBucket",
"s3:DeleteObject",
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::bucket/Target_Folder/*"
]
}
]
}
使用 boto3,我在配置中嵌入了相关的 aws_access_key_id 和 aws_secret_access_key。这样做之后,我发现我无法在“/Target_Folder/”中执行任何操作,例如:
import boto3
import boto.s3.transfer
#Need to manually import S3Transfer() for some reason.
from boto.s3.transfer import S3Transfer
bucket = 'bucket'
prefix = 'Test_Folder/'
client = boto3.client(s3)
#Attempt to print objects under the Target_Folder
response = client.list_objects(Bucket = bucket, Prefix = prefix)
for file in response['Contents']:
print(file['key'])
#Attempt to upload file
transfer = S3Transfer(client)
transfer.upload_file('C:/filepath/file', bucket, prefix)
最终,无论采用何种方法,我都会收到"botocore.exceptions.ClientError: An error occured (SignatureDoesNotMatch)...."。相反,如果我使用具有更多开放存储桶权限的 key/secret_key 对,我与 API 交互没有问题。
抱歉,如果这已在另一个线程中得到回答或澄清,我在搜索时找不到任何好的。
【问题讨论】:
标签: python-3.x amazon-s3 boto3