2017-08-11 3 views
1

私はすべてのS3バケットとファイルをスキャンしているpythonスクリプトを作成しています。ポリシー文書に公開されているすべてのファイルをスクリプトに記録させたいのですが、それは"Effect": "Allow""Principal" : "*"という意味です。だから私は私のコードでは、この行を持っている:ポリシー文書の応答を解析する方法boto3

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]) 

何もしないでください。

ポリシー文書を解析してEffectPrincipalの値を取得するにはどうすればよいですか。

答えて

1

あなたはネイティブのデータ型にその文字列をロードすることによって開始するとよいでしょう:

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

これは、その後Statement配列をループにあなたをできるようになります。

for statement in policy['statement']: 
    print(statement['Effect']) 
+0

ありがとうございました!それは私のために働いた – Somar

+0

私はこれをテストし、それは動作しませんでした、私はJSONのインポートでタイプエラーを取得します。 –

+0

あなたのエラーを投稿する@AlexEshoo私たちが見ることができます。 – MrName