web-dev-qa-db-fra.com

Comment définissez-vous le cryptage SSE-S3 ou SSE-KMS sur les compartiments S3 à l'aide du modèle de formation Cloud?

J'essaie d'utiliser un modèle CloudFormation pour faire tourner un compartiment S3 dans AWS. L'une des exigences de ce projet est que le compartiment soit chiffré en place. J'ai essayé de trouver un moyen de configurer cela via le modèle CloudFormation (j'ai lu toute la documentation sur laquelle je peux mettre la main pour SSE-S3, KMS, CFT et S3 ...). Mais tous les signes semblent indiquer qu'il n'est disponible que via la console.

Je crains de manquer quelque chose d'évident et je me demandais si quelqu'un savait comment utiliser CloudFormation Template (ou au moins quelque chose d'automatisé) pour définir le cryptage par défaut d'un compartiment S3 sur SSE-S3 ou SSE-KMS?

20
Jay Carr

AWS a ajouté cette fonctionnalité le 24 janvier 2018 :

Utilisez la propriété BucketEncryption pour spécifier le chiffrement par défaut d'un compartiment à l'aide du chiffrement côté serveur avec les clés gérées par Amazon S3 SSE-S3 ou le compartiment de clés gérées par 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.htmlhttps://docs.aws.Amazon.com/ AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-bucketencryption.html

27
kichik

Vous pouvez également utiliser l'option 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

Extrait d'ici: Création d'un compartiment S3 avec le chiffrement KMS via CloudFormation

2
Yuri

Si vous avez une clé KMS spécifique, utilisez ce qui suit

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