2017-07-10 1 views
0

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.

Antwort

2

Zunächst sollte der s3-Bucket bucket existieren.

Sie benötigen s3:ListBucket Berechtigung für den s3 Eimer zuweisen, dann können Sie das Objekt die Zugriffsberechtigung in diesem Eimer geben

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:ListBucket", 
      "s3:GetBucketLocation" 
     ], 
     "Resource":"arn:aws:s3:::bucket" 
    }, 
    { 
     "Sid": "Stmt123456789", 
     "Effect": "Allow", 
     "Action": [ 
      "s3:CreateBucket", # and this should be removed. 
      "s3:DeleteObject", 
      "s3:GetObject", 
      "s3:ListBucket", 
      "s3:PutObject" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::bucket/Target_Folder/*" 
     ] 
    } 
    ] 
}