如何通过CloudFormation Template设置S3桶的SSE-S3/SSE-KMS加密
别担心,CloudFormation完全支持配置S3桶的默认加密——不管是SSE-S3还是SSE-KMS,都能通过模板自动化实现,根本不用局限于控制台操作。我给你整理了两种场景的实用示例模板,你可以直接参考:
使用SSE-S3配置默认加密的CloudFormation模板
SSE-S3采用AWS托管的AES-256密钥,配置起来非常简洁。只需要在Bucket资源中指定BucketEncryption属性,选择AES256作为加密算法即可:
AWSTemplateFormatVersion: '2010-09-09' Resources: EncryptedS3Bucket: Type: AWS::S3::Bucket Properties: BucketName: your-unique-bucket-name-here # 替换成你唯一的桶名 BucketEncryption: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: AES256
部署这个模板后,所有上传到该桶的对象默认都会使用SSE-S3加密,除非你在上传对象时手动指定了其他加密方式。
使用SSE-KMS配置默认加密的CloudFormation模板
如果你需要使用KMS密钥(不管是AWS托管的S3专用密钥,还是你自定义的KMS密钥),只需要修改加密算法为aws:kms,并指定对应的密钥ID或ARN即可。
场景1:使用AWS托管的S3 KMS密钥
AWS会自动为你创建并管理这个密钥,不需要额外创建资源:
AWSTemplateFormatVersion: '2010-09-09' Resources: KmsEncryptedS3Bucket: Type: AWS::S3::Bucket Properties: BucketName: your-unique-kms-bucket-name-here # 替换成你唯一的桶名 BucketEncryption: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: aws:kms KMSMasterKeyID: aws/s3 # 也可以省略这个参数,默认就是AWS托管的S3密钥
场景2:使用自定义KMS密钥
如果你需要完全掌控密钥的权限和生命周期,可以先在模板中定义KMS密钥资源,再关联到S3桶:
AWSTemplateFormatVersion: '2010-09-09' Resources: MyCustomKmsKey: Type: AWS::KMS::Key Properties: Description: Custom KMS key for S3 bucket encryption KeyPolicy: Version: '2012-10-17' Statement: - Effect: Allow Principal: AWS: !Sub arn:aws:iam::${AWS::AccountId}:root Action: kms:* Resource: '*' # 必须添加S3服务的权限,确保S3能使用该密钥进行加密/解密操作 - Effect: Allow Principal: Service: s3.amazonaws.com Action: - kms:Encrypt - kms:Decrypt - kms:ReEncrypt* - kms:GenerateDataKey* - kms:DescribeKey Resource: '*' CustomKmsEncryptedS3Bucket: Type: AWS::S3::Bucket Properties: BucketName: your-unique-custom-kms-bucket-name-here # 替换成你唯一的桶名 BucketEncryption: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: aws:kms KMSMasterKeyID: !GetAtt MyCustomKmsKey.Arn
额外提示
- 这些模板部署后,桶的默认加密规则会立即生效,所有新上传的对象都会自动应用加密设置。
- 如果需要修改已有桶的加密配置,直接更新CloudFormation栈即可,无需手动操作控制台。
- 注意桶名必须在全球范围内唯一,记得替换示例中的占位符。
内容的提问来源于stack exchange,提问作者Jae Carr




