You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过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

火山引擎 最新活动