2017-08-02 1 views
0

Je veux retirer les stratégies seau s3 de tous les seaux s3 que j'ai et les stocker dans leur fichier .json individuel. Cela devrait être formaté en json. Cependant, dans ma tentative de solution, il stocke la politique dans le fichier avec les métadonnées de réponse et pas au format jSOn.Comment écrire une stratégie de compartiment S3 dans un fichier?

"ResponseMetadata": {"HTTPStatusCode": 200, ...... "content-type": "application/json"}}} 

Est-ce que cela peut être fait dans python/boto3? Voici mon code.

try: 
    s3client = get_s3Client('us-east-1') 
    response = s3client.list_buckets() 
    if response and response['Buckets']: 
     for bucket in response['Buckets']: 
      bucketName = bucket['Name'] 
      print (bucketName) 
      policyname = policy_output + '\\' + bucketName + '.json' 
      print (policyname) 

      response = s3client.get_bucket_policy(
       Bucket=bucketName 
      ) 
      print (response) 
      with open(policyname, 'w') as f: 
       json.dump(response, f) 
       #f.write(response) 

Répondre

3

La réponse de boto3 get_bucket_policy() est un dict. Vous devez récupérer l'élément 'Policy'.

Essayez quelque chose comme ceci:

import json 
import boto3 
from botocore.exceptions import ClientError 

s3client = boto3.client('s3') 
response = s3client.list_buckets() 

if response and response['Buckets']: 
    for bucket in response['Buckets']: 
     bucketName = bucket['Name'] 
     print(bucketName) 
     policyname = bucketName + '.json' 
     print(policyname) 

     try: 
      response = s3client.get_bucket_policy(
       Bucket=bucketName 
      ) 
      p = response['Policy'] 
      s = json.dumps(json.loads(p), indent=4) 
      with open(policyname, 'w') as f: 
       f.write(s) 
     except ClientError as e: 
      if e.response['Error']['Code'] == 'NoSuchBucketPolicy': 
       pass 
      else: 
       print(e) 
+0

Cette solution fonctionne très bien, mais il ne la sortie JSON à une ligne dans le fichier. Cela peut-il être formaté? – Geddon

+1

Avoir modifié pour inclure jolie impression de JSON. – jarmod