Amazon Simple Storage Service
Entwicklerhandbuch (API-Version 2006-03-01)

Daten schützen durch serverseitige Verschlüsselung mit verwalteten AWS KMS-Schlüsseln (SSE-KMS)

Die serverseitige Verschlüsselung dient zum Schutz ruhender Daten. AWS Key Management Service (AWS KMS) ist ein Service, der sichere, hoch verfügbare Hard- und Software kombiniert, um ein System für die Schlüsselverwaltung bereitzustellen, das für die Cloud skaliert ist. AWS KMS verwendet Kundenmasterschlüssel (CMKs) für die Verschlüsselung Ihrer Amazon S3-Objekte. Sie können AWS KMS über den Abschnitt Encryption Keys in der IAM-Konsole oder über AWS KMS APIs verwenden, um zentral Verschlüsselungsschlüssel zu erstellen, die Richtlinien zu definieren, die die Verwendung der Schlüssel festlegen, und die Schlüsselnutzung überprüfen, um sicherzustellen, dass sie korrekt verwendet werden. Diese Schlüssel können Sie verwenden, um Ihre Daten in Amazon S3-Buckets hochzuladen.

Beim ersten Hinzufügen eines mit SSE-KMS verschlüsselten Objekts zu einem Bucket in einer Region wird automatisch ein Standard-CMK für Sie erstellt. Dieser Schlüssel wird für die SSE-KMS-Verschlüsselung verwendet, es sei denn, Sie wählen einen CMK aus, den Sie separat mithilfe von AWS Key Management Service erstellt haben. Die Erstellung eines eigenen CMK gewährt Ihnen größere Flexibilität, einschließlich der Möglichkeit, Zugriffssteuerelemente zu erstellen, zu rotieren, zu deaktivieren und zu definieren sowie die Verschlüsselungsschlüssel, mit denen die Daten geschützt werden, zu prüfen.

Weitere Informationen finden Sie unter Was AWS Key Management Service? im AWS Key Management Service Developer Guide. Wenn Sie AWS KMS verwenden, entstehen zusätzlichen Gebühren für die Verwendung von AWS-KMS-Schlüsseln. Weitere Informationen finden Sie unter AWS Key Management Service-Preise.

Anmerkung

Wenn Sie mit SSE-KMS verschlüsselte Objekte hochladen oder darauf zugreifen, benötigen Sie AWS Signature Version 4 für eine zusätzliche Sicherheit. Weitere Informationen darüber, wie Sie dies mit einem AWS SDK erledigen, finden Sie unter Specifying Signature Version in Request Authentication.

Die wichtigsten Punkte von SSE-KMS sind:

  • Sie können Verschlüsselungsschlüssel selbst erstellen und verwalten, oder Ihren Standardschlüssel verwenden, der speziell für einen Kunden abhängig vom Service und von der Region erstellt wurde.

  • Das ETag in der Antwort ist nicht das MD5 der Objektdaten.

  • Die für die Verschlüsselung Ihrer Daten verwendeten Datenschlüssel sind ebenfalls verschlüsselt und werden zusammen mit den Daten gespeichert, die sie schützen.

  • Von der IAM-Konsole aus können überprüfbare Masterschlüssel erstellt, rotiert und deaktiviert werden.

  • Die Sicherheitskontrollen in AWS KMS tragen dazu bei, dass Sie Ihre Compliance-Anforderungen bezüglich der Verschlüsselung erfüllen.

Amazon S3 unterstützt Bucket-Richtlinien, die Sie verwenden können, wenn Sie eine serverseitige Verschlüsselung für alle in Ihrem Bucket gespeicherten Objekte benötigen. Beispielsweise verweigert die folgende Bucket-Richtlinie jedem die s3:PutObject-Berechtigung zum Hochladen von Objekten, wenn die Anfrage nicht den x-amz-server-side-encryption-Header enthält, der eine serverseitige Verschlüsselung mit SSE-KMS anfordert.

{ "Version":"2012-10-17", "Id":"PutObjPolicy", "Statement":[{ "Sid":"DenyUnEncryptedObjectUploads", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::YourBucket/*", "Condition":{ "StringNotEquals":{ "s3:x-amz-server-side-encryption":"aws:kms" } } } ] }

Außerdem unterstützt Amazon S3 den s3:x-amz-server-side-encryption-aws-kms-key-id-Bedingungsschlüssel, den Sie verwenden können, um einen spezifischen KMS-Schlüssel für die Objektverschlüsselung anzufordern. Der von Ihnen in der Richtlinie angegebene KMS-Schlüssel muss das Format "arn:aws:kms:region:acct-id:key/key-id" " haben.

Anmerkung

Beim Hochladen eines Objekts können Sie den KMS-Schlüssel mit dem x-amz-server-side-encryption-aws-kms-key-id-Header angeben. Wenn der -Header in der Anforderung fehlt, geht Amazon S3 davon aus, dass der KMS-Standardschlüssel verwendet werden soll. Unabhängig davon muss die KMS-Schlüssel-ID, die Amazon S3 für die Objektverschlüsselung verwendet, mit der KMS-Schlüssel-ID in der Richtlinie übereinstimmen, andernfalls lehnt Amazon S3 die Anfrage ab.

Wichtig

Alle GET- und PUT-Anfragen für ein durch AWS KMS geschütztes Objekt schlagen fehl, wenn Sie nicht über SSL oder unter Verwendung von SigV4 erfolgen.

SSE-KMS verschlüsselt nur die Objektdaten. Objektmetadaten werden grundsätzlich nicht verschlüsselt.

Verwendung von AWS Key Management Service in der Amazon S3-Managementkonsole

Weitere Informationen über die Verwendung von verwalteten KMS-Verschlüsselungsschlüsseln in der Amazon S3-Management-Konsole finden Sie unter Hochladen von S3-Objekten im Amazon Simple Storage Service User Guide.

API-Unterstützung für AWS Key Management Service in Amazon S3

Die REST APIs zur Objekterstellung (siehe Angeben von AWS Key Management Service in Amazon S3 unter Verwendung der REST-API) stellen einen Anfrage-Header bereit, x-amz-server-side-encryption, den Sie verwenden können, um SSE-KMS mit dem Wert aws:kms anzufordern. Außerdem gibt es x-amz-server-side-encryption-aws-kms-key-id, die die ID des AWS KMS-Master-Verschlüsselungsschlüssels angibt, die für das Objekt verwendet wurde. Die Amazon S3 API unterstützt auch einen Verschlüsselungskontext mit dem x-amz-server-side-encryption-context-Header.

Der Verschlüsselungskontext kann ein beliebiger Wert sein, vorausgesetzt, der Header entspricht dem mit Base64-codierten JSON-Format. Da der Verschlüsselungskontext jedoch nicht verschlüsselt ist und protokolliert wird, wenn die AWS CloudTrail-Protokollierung aktiviert ist, sollte Ihr Verschlüsselungskontext keine sensiblen Informationen enthalten. Wir empfehlen zudem, dass Ihr Kontext die verschlüsselten oder entschlüsselten Daten beschreibt, damit Sie die von AWS KMS erstellten CloudTrail-Ereignisse besser verstehen. Weitere Informationen finden Sie unter Verschlüsselungskontext im AWS Key Management Service Developer Guide.

Außerdem kann Amazon S3 einen vordefinierten Schlüssel von aws:s3:arn mit dem Wert des Objekt-ARN für den von Ihnen bereitgestellten Verschlüsselungskontext bereitstellen. Das passiert nur, wenn der Schlüssel aws:s3:arn nicht bereits in dem von Ihnen angegebenen Verschlüsselungskontext enthalten ist. In diesem Fall wird dieser vordefinierte Schlüssel angehängt, wenn Amazon S3 Ihre Put-Anfragen verarbeitet. Wenn dieser aws:s3:arn-Schlüssel bereits in Ihrem Verschlüsselungskontext enthalten ist, wird der Schlüssel Ihrem Verschlüsselungskontext nicht noch einmal hinzugefügt.

Wenn dieser vordefinierte Schlüssel Teil Ihres Verschlüsselungskontexts ist, können Sie entsprechende CloudTrail-Anfragen nachverfolgen. Sie können also immer erkennen, welcher S3 Objekt-ARN für welchen Verschlüsselungsschlüssel verwendet wurde. Wenn dieser vordefinierte Schlüssel Teil Ihres Verschlüsselungskontexts ist, ist darüber hinaus garantiert, dass der Verschlüsselungskontext nicht identisch zwischen verschiedenen S3-Objekten ist, wodurch sich eine zusätzliche Sicherheit für Ihre Objekte ergibt. Ihr vollständiger Verschlüsselungskontext wird überprüft, ob der Wert gleich dem Objekt-ARN ist.

Diese Anfrage-Header werden von den folgenden Amazon S3-APIs unterstützt.

  • PUT-Operation – Wenn Sie Daten mit der PUT API hochladen (siehe PUT Object), können Sie dieses Anfrage-Header angeben.

  • Starten eines mehrteiligen Uploads – Diese Header können Sie angeben, wenn Sie große Objekte mithilfe der API für mehrteilige Uploads hochladen möchten. Sie geben diese Header in der Initiierungsanfrage an (siehe Initiate Multipart Upload).

  • POST-Operation – Wenn Sie statt der Anfrage-Header eine POST-Operation für das Hochladen eines Objekts verwenden (siehe POST Object), geben Sie dieselben Informationen in die Formularfelder ein.

  • COPY-Operation – Wenn Sie ein Objekt kopieren (siehe PUT Object – Copy), haben Sie ein Quellobjekt und ein Zielobjekt. Wenn Sie SSE-KMS-Header mit der COPY-Operation übergeben, werden sie nur auf das Zielobjekt angewendet.

Die AWS SDKs stellen auch Wrapper-APIs für Sie bereit, damit Sie eine SSE-KMS mit Amazon S3 anfordern können.