如何使用boto3在新建S3存储桶时直接启用加密
问题解答
完全可以,你可以在调用boto3创建S3桶的逻辑后,立刻调用加密配置接口完成配置,全程不需要额外手动操作,代码层面一次性执行即可。
前提条件
- 你的AWS身份已经配置好boto3的访问权限,持有
s3:CreateBucket、s3:PutEncryptionConfiguration权限 - 如果使用自定义KMS密钥加密,还需要持有对应KMS密钥的
kms:GenerateDataKey权限
代码示例
示例1:新建桶并配置SSE-S3加密(AWS托管密钥)
import boto3 # 替换为你的目标区域 s3_client = boto3.client('s3', region_name='ap-northeast-1') # 替换为你的桶名 bucket_name = 'your-target-bucket-name' # 1. 创建存储桶 s3_client.create_bucket( Bucket=bucket_name, CreateBucketConfiguration={ # 和前面的区域保持一致,us-east-1区域可以省略这个参数 'LocationConstraint': 'ap-northeast-1' } ) # 2. 配置桶默认加密为SSE-S3 s3_client.put_bucket_encryption( Bucket=bucket_name, ServerSideEncryptionConfiguration={ 'Rules': [ { 'ApplyServerSideEncryptionByDefault': { 'SSEAlgorithm': 'AES256' } } ] } ) print(f"桶{bucket_name}创建完成,已启用SSE-S3默认加密")
示例2:新建桶并配置SSE-KMS加密(自定义KMS密钥)
import boto3 # 替换为你的目标区域 s3_client = boto3.client('s3', region_name='ap-northeast-1') # 替换为你的桶名 bucket_name = 'your-target-bucket-name' # 替换为你的KMS密钥ARN kms_key_id = 'arn:aws:kms:ap-northeast-1:123456789012:key/xxxxxxx' # 1. 创建存储桶 s3_client.create_bucket( Bucket=bucket_name, CreateBucketConfiguration={ 'LocationConstraint': 'ap-northeast-1' } ) # 2. 配置SSE-KMS默认加密 s3_client.put_bucket_encryption( Bucket=bucket_name, ServerSideEncryptionConfiguration={ 'Rules': [ { 'ApplyServerSideEncryptionByDefault': { 'SSEAlgorithm': 'aws:kms', 'KMSMasterKeyID': kms_key_id }, # 开启桶密钥可以降低KMS调用成本,建议开启 'BucketKeyEnabled': True } ] } ) print(f"桶{bucket_name}创建完成,已启用SSE-KMS默认加密")
注意事项
- AWS自2023年1月5日起,所有新创建的S3桶默认自动启用SSE-S3加密,如果你没有自定义加密规则的需求,无需额外执行加密配置操作也默认加密。
- 上述加密配置仅作用于后续新上传到桶的对象,不会自动加密桶创建前就存在的对象,逻辑和现有桶配置加密一致。
- 如果你需要额外配置加密的例外规则,可以在
ServerSideEncryptionConfiguration的Rules参数里添加对应过滤条件。
内容的提问来源于stack exchange,提问作者vikas
相关产品推荐
相关产品推荐

