Blog
Wie Sie die S3-Standardverschlüsselung durchsetzen

Die Amazon S3-Standardverschlüsselung legt Verschlüsselungseinstellungen für alle Objekt-Uploads fest, aber diese Einstellungen werden nicht erzwungen. Dies kann dazu führen, dass unverschlüsselte Objekte in den Bucket hochgeladen werden. In diesem Blog finden Sie eine Bucket-Richtlinie, die die Verschlüsselung aller Objekt-Uploads erzwingt.
Die folgende CloudFormation-Vorlage erzwingt die Verwendung der KMS-Verschlüsselung mit einer Bucket-Richtlinie.
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: aws:kms
KMSMasterKeyID: !GetAtt EncryptionKey.Arn
BucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref Bucket
PolicyDocument:
Statement:
- Sid: Restrict to Default- or KMS-encryption
Effect: Deny
Principal: '*'
Action: 's3:PutObject'
Resource: !Sub
- '${BucketArn}/*'
- BucketArn: !GetAtt Bucket.Arn
Condition:
'Null':
s3:x-amz-server-side-encryption: false
StringNotEquals:
s3:x-amz-server-side-encryption: 'aws:kms'
- Sid: Restrict KMS-key
Effect: Deny
Principal: '*'
Action: 's3:PutObject'
Resource: !Sub
- '${BucketArn}/*'
- BucketArn: !GetAtt Bucket.Arn
Condition:
StringNotEquals:
s3:x-amz-server-side-encryption: 'aws:kms'
StringNotEqualsIfExists:
s3:x-amz-server-side-encryption-aws-kms-key-id: !GetAtt EncryptionKey.Arn
EncryptionKey:
Type: AWS::KMS::Key
Properties:
KeyPolicy:
Version: '2012-10-17'
Statement:
- Sid: Enable IAM User Permissions
Effect: Allow
Principal:
AWS: !Sub 'arn:aws:iam::${AWS::AccountId}:root'
Action: 'kms:*'
Resource: '*'
In den Zeilen 7 bis 9 aktivieren Sie die Standardverschlüsselung, um alle hochgeladenen Objekte ohne Verschlüsselungsinformationen automatisch zu verschlüsseln. Die Standardverschlüsselung ist auf den Algorithmus KMS und den Schlüssel EncryptionKey eingestellt.
- ServerSideEncryptionByDefault:
SSEAlgorithm: aws:kms
KMSMasterKeyID: !GetAtt EncryptionKey.Arn
Die Bucket-Richtlinie erzwingt die Standardverschlüsselungseinstellungen, indem Uploads mit ungültigen Verschlüsselungsinformationen verweigert werden. Zur Durchsetzung der KMS-Verschlüsselung werden Uploads mit ungültigen Verschlüsselungsalgorithmen unter Verwendung des Schlüssels s3:x-amz-server-side-encryption-condition verweigert. Um KMS-key EncryptionKey zu erzwingen, verweigern wir Uploads mit einem ungültigen Verschlüsselungsschlüssel unter Verwendung des Schlüssels s3:x-amz-server-side-encryption-aws-kms-key-id-condition.
KMS-Verschlüsselung erzwingen
- Sid: Restrict to Default- or KMS-encryption
Effect: Deny
Principal: '*'
Action: 's3:PutObject'
Resource: !Sub
- '${BucketArn}/*'
- BucketArn: !GetAtt Bucket.Arn
Condition:
'Null':
s3:x-amz-server-side-encryption: false
StringNotEquals:
s3:x-amz-server-side-encryption: 'aws:kms'
Die Null-Bedingung erlaubt Uploads ohne Verschlüsselungsinformationen und die StringNotEquals-Bedingung verweigert Uploads mit ungültigen Verschlüsselungsinformationen. Beachten Sie, dass die Verwendung von StringNotEqualsIfExists für Uploads ohne Verschlüsselungsinformationen nicht funktioniert. Die Bedingung wird als wahr ausgewertet und verweigert den Upload aufgrund des Deny-Effekts.
KMS-Schlüssel erzwingen
- Sid: Restrict KMS-key
Effect: Deny
Principal: '*'
Action: 's3:PutObject'
Resource: !Sub
- '${BucketArn}/*'
- BucketArn: !GetAtt Bucket.Arn
Condition:
StringNotEquals:
s3:x-amz-server-side-encryption: 'aws:kms'
StringNotEqualsIfExists:
s3:x-amz-server-side-encryption-aws-kms-key-id: !GetAtt EncryptionKey.Arn
Die StringNotEquals-Bedingung beschränkt die Richtlinie auf KMS-verschlüsselte Uploads. Zusätzlich verweigert die StringNotEqualsIfExists-Bedingung Uploads mit ungültigen Verschlüsselungsschlüsseln. Beachten Sie, dass die Überprüfung des Verschlüsselungsschlüssels nicht ausreicht. S3 verwendet den von AWS verwalteten CMK, wenn der Algorithmus festgelegt ist, der Schlüssel jedoch nicht.
Wenn Sie x-amz-server-side-encryption:aws:kms angeben, aber keine x-amz-server-side-encryption-aws-kms-key-id zur Verfügung stellen, verwendet Amazon S3 den von AWS verwalteten CMK in AWS KMS zum Schutz der Daten.
Quelle: PutObject API-Referenz
Verfasst von
Laurens Knoll
As a cloud consultant I enjoy improving what your company does best. I enable your business using cloud technology and enable your engineers by applying software engineering practices to your infrastructure domain.
Unsere Ideen
Weitere Blogs
Contact



