Функция AWS Lambda для включения шифрования по умолчанию при создании корзины

#python-3.x #amazon-web-services #aws-lambda #amazon-cloudwatch #amazon-cloudtrail

Вопрос:

Я хочу написать лямбда-функцию с Python, чтобы включить шифрование по умолчанию в корзине S3, если вновь созданная корзина не включена для шифрования

Необходимо выполнить следующие действия

  • Запускайте лямбда-функцию при создании новой корзины S3
  • Если шифрование по умолчанию не включено, оно будет включено автоматически
  • Тема SNS будет активирована и отправлена по электронной почте администратору и создателю/владельцу корзины

Следующая лямбда-функция, которую я создал, будет периодически шифровать любую существующую корзину. Я хочу расширить его, чтобы он срабатывал при создании нового ведра

 import json

import boto3


def lambda_handler(event, context):
    s3 = boto3.client("s3")
    response = s3.list_buckets()
    buckets = [bucket['Name'] for bucket in response['Buckets']]
    status = 401
    unencrypted_buckets = []
    for bucket in buckets:
        try:
            s3.get_bucket_encryption(Bucket=bucket)
            print(f"Bucket {bucket} has already Encryption enabled")
        except s3.exceptions.ClientError:
            unencrypted_buckets.append(bucket)

    encryption_enabled_buckets = []
    for unencrypted_bucket in unencrypted_buckets:
        try:
            print(f"Bucket {unencrypted_bucket} has no Encryption enabled")
            s3.put_bucket_encryption(
                Bucket=unencrypted_bucket,
                ServerSideEncryptionConfiguration={
                    'Rules': [
                        {
                            'ApplyServerSideEncryptionByDefault':
                                {
                                    'SSEAlgorithm': 'AES256'
                                }
                        }
                    ]
                }
            )
            encryption_enabled_buckets.append(unencrypted_bucket)
            status = 200
        except s3.exceptions.ClientError:
            status = 500
            break

    return {
        'statusCode': status,
        'details': 'Default encryption enabled',
        'encryption enabling success': encryption_enabled_buckets,
        'encryption enabling failed': list(set(unencrypted_buckets) - set(encryption_enabled_buckets))   list(
            set(encryption_enabled_buckets) - set(unencrypted_buckets))
    }
 

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

1. Что вы пробовали? Вы что — нибудь пробовали? Переполнение стека не является архитектором или инженером решений по требованию.

2. Я создал функцию Lambda, чтобы включить шифрование по умолчанию для существующих сегментов. Я попытался добавить триггер к этой лямбда-функции при создании нового блока.

Ответ №1:

Возможно, вам вообще не придется это кодировать. Рассмотрите возможность использования правил конфигурации AWS для этого и других требований соответствия.

См. раздел Управляемые правила AWS Config:

AWS Config может отправлять уведомления через SNS, и вот пример того, как я могу получать уведомления, когда ресурс AWS не соответствует требованиям, используя AWS Config?