Список блоков S3 и политики его жизненного цикла в .csv - PullRequest
0 голосов
/ 03 февраля 2020
def main():
    with open('S3.csv', 'w') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow([
            'Account Name',
            'Region',
            'Bucket Name',
            'Policy'

        ])
        with open('role.json') as ec2_file:
            ec2_data = json.load(ec2_file)
        region_list = ['eu-west-1']
        for region in region_list:
            for index in range(len(ec2_data['Items'])):
                Account_Number = ec2_data['Items'][index]['Aws_Account_Number']
                Account_Name = ec2_data['Items'][index]['Acc_Name']
                ARN = ec2_data['Items'][index]['ARN']
                b = get_assume_arn_to_keys(Account_Number,Account_Name,ARN)
                ds_client = boto3.client('s3',region_name=region,aws_access_key_id=``,aws_secret_access_key=``,aws_session_token=``)


                s3 = boto3.resource('s3')

                for bucket in s3.buckets.all():
                    writer.writerow([
                        Account_Name,
                        region,
                        bucket.name,
                        ds_client.get_bucket_lifecycle(Bucket=bucket.name)

main()

Я хотел бы перечислить корзины s3 и их политики жизненного цикла в .csv. Я могу перечислить все ведра.

Но, список политик жизненного цикла дает мне проблему. Я не могу перечислить все ведра. Вероятно, это просто дает мне политику первого ведра.

Я могу получить политики жизненного цикла, если в строке указать имя корзины. Политики одиночного сегмента 'k' перечислены во всех сегментах.

ds_client.get_bucket_lifecycle(Bucket='k')

Но, если я хотел получить для всех сегментов, я попробовал это

ds_client.get_bucket_lifecycle(Bucket=bucket.name)

Редактировать ::: Новая попытка перечислить ведение журнала, регион и управление версиями.

import boto3
s3_client = boto3.client('s3')

bucket_list = ds_client.list_buckets()

for bucket in bucket_list['Buckets']:
    try:
        lifecycle = ds_client.get_bucket_lifecycle(Bucket=bucket['Name'])
        rules = lifecycle['Rules']
    except:
        rules = 'No Policy'                 
    versioning = ds_client.get_bucket_versioning(Bucket=bucket['Name'])
    logging = ds_client.get_bucket_logging(Bucket=bucket['Name'])
    print(bucket['Name'], rules, versioning, logging)

Но не мог получить это. Добрый совет. Спасибо

1 Ответ

1 голос
/ 03 февраля 2020

Попытка получить политику жизненного цикла для корзины, которая имеет , а не , имеет политику, приведет к исключению.

Следовательно, вам нужно будет использовать try/except, например так:

import boto3

s3 = boto3.resource('s3')

for bucket in s3.buckets.all():
    try:
        rules = bucket.Lifecycle().rules
    except:
        rules = 'No Policy'
    print(bucket.name, rules)

Или версия клиента:

import boto3

s3_client = boto3.client('s3')

bucket_list = s3_client.list_buckets()

for bucket in bucket_list['Buckets']:

    try:
        lifecycle = s3_client.get_bucket_lifecycle(Bucket=bucket['Name'])
        rules = lifecycle['Rules']
    except:
        rules = 'No Policy'
    print(bucket['Name'], rules)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...