Как разобрать ответ на программный документ по boto3

Я работаю над сценарием Python, который сканирует все сегменты S3 и файлы. Я хочу, чтобы скрипт регистрировал каждый файл, который открыт для публики в документе политики, я имею в виду: "Effect": "Allow" а также "Principal" : "*", Итак, у меня есть эта строка в моем коде:

bucket_policy = storageClient.get_bucket_policy(Bucket='mybucket-documents-2017')
print(bucket_policy)

Возвращает строку:

{
'Policy':
 u'{
 "Version":"2012-10-17",
 "Statement":[
 {
 "Sid":"",
 "Effect":"Allow",
 "Principal":
 {"AWS":"arn:aws:iam::000000000000:user/myuser"},
 "Action":"s3:GetObject",
 "Resource":"arn:aws:s3:::mybucket-documents-2017/*"
 },
 {
 "Sid":"",
 "Effect":"Allow",
 "Principal":{"AWS":"arn:aws:iam::0000000000000:user/myuser"},
 "Action":"s3:PutObject",
 "Resource":"arn:aws:s3:::mybucket-documents-2017/*"
 }]
 }', 
 'ResponseMetadata': {
 'HTTPStatusCode': 200, 'RetryAttempts': 0, 'HostId': '0EkHM/G1rnRjZH3lhTim1uaDG+5dCJmbJAhSVTnniGsNZIAl6SOMlYgbJOR0XAJOtzmXuu/CSd0=', 'RequestId': '037CADEB6342E9C
2', 'HTTPHeaders': {'x-amz-id-2': '0EkHM/G1rnRjZH3lhTim1uaDG+5dCJmbJAhSVTnniGsNZIAl6SOMlYgbJOR0XAJOtzmXuu/CSd0=', 'server': 'AmazonS3', 'transfer-encoding': 'chunked', 'x-amz-request-id': '037CADEB634
2E9C2', 'date': 'Fri, 11 Aug 2017 10:03:21 GMT', 'content-type': 'application/json'}
}

}

Когда я делаю что-то вроде:

 for policy in bucket_policy:
        print(policy[0])

или же

for policy in bucket_policy['Policy']:
        print(policy[0])

Я ничего не понимаю.

Как мне сделать, чтобы получить значение Effect а также Principal путем анализа документа политики?

1 ответ

Решение

Вы хотели бы начать с загрузки этой строки в собственные типы данных:

import json
policy = json.loads(bucket_policy['Policy'])

Это позволит вам затем пройти через Statement массив.

for statement in policy['statement']:
    print(statement['Effect'])
Другие вопросы по тегам