2015-10-24 2 views
0

Я пытаюсь выполнить итерацию и получение политик всех кодов S3 в учетной записи.Как перебрать все ведра S3 в учетной записи по регионам

Я пытаюсь следующий ...

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

Когда я запускаю это, я получаю следующее сообщение об ошибке:

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. 

Я попытался использоваться s3.meta.client.get_bucket_location(Bucket=bucket_name['Name']) как на https://github.com/boto/boto3/issues/81, но я получаю значение None для 'LocationConstraint'.

Как я могу узнать или установить правильную конечную точку и/или область для произвольного ковша?

+0

в цикле for, вы делаете s3.get_bucket_policy (Bucket = bucket ['Name']) ... так что bucket_name не используется ... вы уверены, что он не должен использовать bucket_name (какая-то опечатка?) – labheshr

+0

Упс, да, у меня была опечатка! – Drew

+0

Я думаю, вам нужно еще одно редактирование из ведра [..] в bucket_name [...] в строке ... «Я пробовал использовать» ... также, это не причина ваших проблем? – labheshr

ответ

0

Вы делаете это правильно, минус один лакомый кусочек: значение None указывает Стандартная область США [1], или us-east-1. Кроме того, вам не нужно использовать мета-клиент. Клиент, который вы уже создали, имеет метод get_bucket_location.

Смежные вопросы