включение ведения журнала корзины с помощью boto3

#python #aws-lambda #boto3

#python #aws-lambda #boto3

Вопрос:

У меня есть список имен корзин, которые мне нужны, чтобы включить ведение журнала программно. Я использую boto3 и lambda. Кажется, я не могу найти правильную функцию в boto3 / s3, чтобы делать то, что мне нужно, хотя я уверен, что это возможно. Вот мой код на данный момент:

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

def lambda_handler(event, context):
    # TODO implement

    # print("hanlder:event")
    # print(event)
    # bucketDump()
    setBucketPolicy(bucketDump())


def bucketDump():
    ##This program lists all exsisting buckets within an aws account (Tommy's Personal Account)
    response = s3.list_buckets()

    buckets = []
    for bucket in response['Buckets']:
            value = bucket["Name"]
            buckets.append(value)
    return buckets

##setting a bucket policy
def setBucketPolicy(buckets):
    for bucket in buckets:
        value = s3.get_bucket_logging(bucket)
        print(value)


        ##TODO if bucket in buckets does not have loggin enabled, enable it!

        # print(bucket)
  

Мой процесс заключается в том, что я хочу повторить список имеющихся у меня корзин и включить для них ведение журнала! Заранее благодарю вас.

Комментарии:

1. boto3.amazonaws.com/v1/documentation/api/latest/reference/…

Ответ №1:

Как предложил @jordanm в комментарии под вашим вопросом, использование ресурса вместо клиента значительно упростит вашу жизнь, поскольку он предоставляет интерфейс более высокого уровня.

Если единственной целью bucketDump вашего вопроса было получение всех сегментов в вашей учетной записи, то вы могли бы полностью удалить его и использовать стандартную функцию s3.buckets.all() , которая уже возвращает итерацию сегментов (docs).

Предполагая, что вы хотите включить ведение журнала во всех ваших сегментах, для которых он еще не включен, и что вы хотите доставлять журналы из всех сегментов в одно и то же ведро, вы могли бы добавить параметр в ` функцию для указания этого сегмента. Предлагаемая ниже реализация позволит вести журнал и приведет к тому, что журналы будут организованы следующим образом:

 - name_of_bucket_in_wich_to_store_logs
  - bucket_name_1
    - logs
  - bucket_name_2
    - logs
  

Если вы хотите организовать свои журналы по-другому, вам придется поиграть с параметрами TargetBucket и TargetPrefix , и, при необходимости, вы можете указать другие параметры для грантов, как подробно описано в документах.

 import boto3

s3 = boto3.resource('s3')


def lambda_handler(event, context):
    # TODO implement
    setBucketPolicy(target_bucket='name_of_bucket_in_wich_to_store_logs')


def setBucketPolicy(target_bucket: str):
    for bucket in s3.buckets.all():
        bucket_logging = s3.BucketLogging(bucket.name)
        if not bucket_logging.logging_enabled:
            bucket_logging.put(
                BucketLoggingStatus={
                    'LoggingEnabled': {
                        'TargetBucket': target_bucket,
                        'TargetPrefix': f'{bucket.name}/'
                    }
                }
            )