具有服务器端加密 s3 存储桶的 AWS Cloudfront

web*_*elo 3 amazon-s3 amazon-web-services amazon-cloudfront

(这是根据我在解决这个问题时学到的知识对这个问题的概括/变体。)

我使用具有 S3 源的 AWS Cloudfront(即为 S3 对象提供服务)。

我想向我的存储桶添加服务器端加密,但仍然能够通过 cloudfront 访问对象。

我对所使用的精确 SSE 策略不可知(只要它是安全的)。

web*_*elo 5

如果您对 SSE 加密类型有自由度,则可以在不使用 lambda 的情况下添加 SSE。

密钥是将存储桶上的加密类型设置为SSE-S3(Amazon S3 密钥)。

主要步骤是:

  1. SSE-S3在“属性”(选项卡)~>“默认加密”(面板)~>“编辑”(按钮)中将存储桶加密设置为
  2. 创建 Cloudfront 发行版
  3. 通过原始访问身份链接存储桶和cloudfront分配
  4. 添加将源访问身份链接到存储桶的存储桶策略。

在文章“使用 CloudFront 从 S3 提供 SSE-KMS 加密内容”之后,这里是与此发行版相对应的替代 CloudFormation 堆栈:

Resources:
  S3Bucket:
    Type: "AWS::S3::Bucket"
    Properties:
      BucketName: !Join
        - "-"
        - - !Ref "AWS::StackName"
          - s3bucket
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256

  S3BucketPolicy:
    Type: "AWS::S3::BucketPolicy"
    Properties:
      Bucket: !Ref S3Bucket
      PolicyDocument:
        Statement:
          - Action:
              - "s3:GetObject"
            Effect: Allow
            Resource: !Join
              - ""
              - - "arn:aws:s3:::"
                - !Ref S3Bucket
                - /*
            Principal:
              CanonicalUser:
                Fn::GetAtt: [OAI, S3CanonicalUserId]

  OAI:
    Type: "AWS::CloudFront::CloudFrontOriginAccessIdentity"
    Properties:
      CloudFrontOriginAccessIdentityConfig:
        Comment: Origin Access Identity for S3

  Cloudfront:
    Type: "AWS::CloudFront::Distribution"
    Properties:
      DistributionConfig:
        Comment: How to serve content encrypted with SSE-S3 from S3 using CloudFront
        Origins:
          - DomainName: !Join
              - .
              - - !Ref S3Bucket
                - s3
                - !Ref "AWS::Region"
                - amazonaws.com
            Id: S3-regional-endpoint
            S3OriginConfig:
              OriginAccessIdentity: !Join
                - /
                - - origin-access-identity
                  - cloudfront
                  - !Ref OAI
        DefaultCacheBehavior:
          TargetOriginId: S3-regional-endpoint
          ForwardedValues:
            QueryString: "false"
          ViewerProtocolPolicy: redirect-to-https
        Enabled: "true"
Run Code Online (Sandbox Code Playgroud)
  • 相对于上面引用的文章,这需要指定源访问身份 ( OAI) 以及存储桶策略 ( S3BucketPolicy),但不需要指定 KMS 资源。
  • SSE-S3在 CloudFormation 和 terraform 中,您可以通过指定来指定加密类型AES256(请参见行SSEAlgorithm: AES256)。

如果您使用 terraform,有一些模块(例如,这里这里)基本上可以完成上述操作,并提供一些额外的好处。