我有一个桶名称列表,需要以编程方式启用登录。我正在使用boto3和lambda。我似乎无法在boto3 / s3中找到正确的功能来执行所需的操作,尽管我确信这是可能的。到目前为止,这是我的代码:
author
我的过程是我要遍历我拥有的存储桶列表并为其启用enable_logging!预先谢谢你。
答案 0 :(得分: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
参数,并且,如果需要,可以为拨款指定其他参数,如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}/'
}
}
)