AWS Lambda函数,在创建桶时启用默认加密



我想用Python写一个lambda函数,启用S3桶默认加密,如果新创建的桶没有启用加密

需要有以下步骤

  • 当创建新的S3桶时触发Lambda函数
  • 如果未启用默认加密,它将自动启用
  • SNS主题将被触发并发送邮件给管理员&桶的创造者/所有者

我创建的lambda函数将定期对任何现有的bucket进行加密。我想将它扩展为在创建新桶时触发

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

您可能根本不需要编写这些代码。考虑使用AWS配置规则来满足这个和其他合规性要求。

请参阅AWS配置管理规则:

  • s3-bucket-server-side-encryption-enabled.html
  • s3-default-encryption-kms.html

AWS配置可以通过SNS发送通知,这是怎么通知的一个例子,当一个AWS资源使用AWS配置不一致?

最新更新