[英]enabling bucket logging using 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)
我的过程是我想遍历我拥有的存储桶列表并为它们启用日志记录! 先感谢您。
正如@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}/'
}
}
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.