Как вы устанавливаете шифрование SSE-S3 или SSE-KMS на ведрах S3 с использованием шаблона облачной разработки?

Я пытаюсь использовать шаблон CloudFormation, чтобы развернуть ведро S3 в AWS. Одним из требований к этому проекту является то, что ковш будет зашифрован на месте. Я пытаюсь найти способ установить это с помощью шаблона CloudFormation (я прочитал всю документацию, которую я могу получить для SSE-S3, KMS, CFT и S3s...). Но все признаки указывают на то, что они доступны только через консоль.

Я беспокоюсь, я просто пропустил что-то очевидное, и я подумал, знает ли кто-нибудь, как я могу использовать шаблон CloudFormation (или, по крайней мере, что-то автоматическое), чтобы установить шифрование по умолчанию S3 Bucket на SSE-S3 или SSE-KMS

Ответ 1

AWS добавил эту функцию 24 января 2018 года:

Используйте свойство BucketEncryption, чтобы указать шифрование по умолчанию для корзины с использованием шифрования на стороне сервера с ключами, управляемыми Amazon S3, SSE-S3 или AWS KMS-управляемыми ключами (SSE-KMS).

JSON

{
  "Resources": {
    "MyBucket": {
      "Type" : "AWS::S3::Bucket",
      "Properties" : {
        "BucketEncryption": {
          "ServerSideEncryptionConfiguration": [
            {
              "ServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
              }
            }
          ]
        }
      }
    }
  }
}

YAML

Resources:
  MyBucket:
    Type: "AWS::S3::Bucket"
    Properties: 
      BucketEncryption: 
        ServerSideEncryptionConfiguration: 
        - ServerSideEncryptionByDefault:
            SSEAlgorithm: AES256

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3 -bucket-bucketencryption.html

Ответ 2

Вы также можете использовать опцию ForceEncryption:

AWSTemplateFormatVersion: '2010-09-09'
Description: Amazon S3 Bucket with 

Resources:
  CodeFlexS3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: Private
      BucketName: !Join ["-", ["codeflex-example", Ref: "AWS::Region"]]

  ForceEncryption:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref CodeFlexS3Bucket
      PolicyDocument:
        Version: "2008-10-17"
        Statement:
          - Sid: DenyUnEncryptedObjectUploads
            Effect: Deny
            Principal: "*"
            Action:
              - s3:PutObject
            Resource:
              - !Join ["", ["arn:aws:s3:::", !Ref CodeFlexS3Bucket, "/*"]]
            Condition:
              StringNotEquals:
                "s3:x-amz-server-side-encryption":
                  - "aws:kms"
    DependsOn: CodeFlexS3Bucket

Взяты отсюда: Создание S3 Bucket с шифрованием KMS через CloudFormation

Ответ 3

Если у вас есть определенный ключ KMS, используйте следующее

  ConfigBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: "mytestbucketwithkmsencryptionkey"
      AccessControl: PublicRead
      BucketEncryption: 
        ServerSideEncryptionConfiguration: 
        - ServerSideEncryptionByDefault:
            SSEAlgorithm: aws:kms
            KMSMasterKeyID: "YOUR KMS KEY ARN"