使用boto3启用存储桶日志记录

时间:2020-09-03 15:49:16

标签: python aws-lambda boto3

我有一个桶名称列表,需要以编程方式启用登录。我正在使用boto3和lambda。我似乎无法在boto3 / s3中找到正确的功能来执行所需的操作,尽管我确信这是可能的。到目前为止,这是我的代码:

author

我的过程是我要遍历我拥有的存储桶列表并为其启用enable_logging!预先谢谢你。

1 个答案:

答案 0 :(得分:1)

正如@jordanm在问题下方的评论中所建议的那样,使用资源而不是客户端将使您的生活更加轻松,因为它提供了更高级别的界面。

如果问题中bucketDump的唯一目的是检索帐户中的所有存储桶,则可以完全删除它,并使用已经返回可重复存储桶的标准函数s3.buckets.all()docs)。

假设您要在所有尚未启用日志的存储桶上启用日志记录 ,并且要从所有存储桶向同一存储桶传送日志,可以添加一个参数到``函数以指定此存储桶。以下建议的实现将启用日志记录,并导致日志的组织方式如下:

- name_of_bucket_in_wich_to_store_logs
  - bucket_name_1
    - logs
  - bucket_name_2
    - logs

如果您想以不同的方式组织日志,则必须使用TargetBucketTargetPrefix参数,并且,如果需要,可以为拨款指定其他参数,如docs中所述

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}/'
                    }
                }
            )