So habe ich einen Benutzer, dessen IAM-Berechtigungen auf Folgendes festgelegt sind. Es ist nur erlaubt, dass sie Create/Delete/List/etc. Objekte im "Target_Folder /" für den Bucket.Ordnerspezifische IAM-Berechtigungen für boto3 S3-API-Aufrufe
{
"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/*"
]
}
]
}
Mit boto3, binde ich die entsprechenden aws_access_key_id und aws_secret_access_key in der Config. Nachdem Sie das getan, ich finde ich bin nicht in der Lage alle Aktionen innerhalb der Preform „/ target_folder /“ wie:
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)
Letztendlich, egal in welchem Ansatz, erhalte ich ein "botocore.exceptions.ClientError: An error occured (SignatureDoesNotMatch)...."
. Umgekehrt, wenn ich ein key/secret_key-Paar mit viel mehr offenen Bucket-Berechtigungen verwende, habe ich keine Probleme mit der API zu interagieren.
Entschuldigung, wenn dies in einem anderen Thread beantwortet oder geklärt wurde, konnte ich bei der Suche keine guten finden.