2015-10-24 1 views
0

J'essaie de parcourir et d'extraire les stratégies relatives à tous les compartiments S3 d'un compte.Comment analyser tous les buckets S3 dans un compte d'une région à l'autre

Je suis en train de ce qui suit ...

s3 = boto3.client('s3') 
buckets = s3.list_buckets() 
for bucket_name in buckets['Buckets']: 
    s3.get_bucket_policy(Bucket=bucket_name['Name']) 

Quand je cours, je reçois l'erreur suivante:

botocore.exceptions.ClientError: An error occurred (PermanentRedirect) when calling the GetBucketTagging operation: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint. 

J'ai essayé utilisé s3.meta.client.get_bucket_location(Bucket=bucket_name['Name']) comme par https://github.com/boto/boto3/issues/81, mais je reçois une valeur de None pour 'LocationConstraint'.

Comment puis-je connaître ou déterminer le point de terminaison et/ou la région corrects pour un compartiment arbitraire?

+0

Dans la boucle for, vous faites s3.get_bucket_policy (Bucket = bucket ['Name']) ... donc bucket_name n'est pas utilisé ... êtes-vous sûr qu'il ne devrait pas utiliser bucket_name (une sorte de faute de frappe?) – labheshr

+0

Oups, oui j'ai eu une faute de frappe! – Drew

+0

Je pense que vous avez besoin d'une autre édition de seau [..] à seau_nom [...] dans la ligne ... "J'ai essayé utilisé" ... aussi, ce n'est pas la cause de vos problèmes? – labheshr

Répondre

0

Vous le faites correctement, moins une friandise: une valeur de None indique la région US standard [1] ou us-east-1. De plus, vous n'avez pas besoin d'utiliser le méta-client. Le client que vous avez déjà créé possède la méthode get_bucket_location.