Schützen von Daten durch serverseitige Verschlüsselung mit AWS Key Management Service (SSE-KMS) - Amazon Simple Storage Service

Schützen von Daten durch serverseitige Verschlüsselung mit AWS Key Management Service (SSE-KMS)

Die serverseitige Verschlüsselung ist die Verschlüsselung von Daten an ihrem Ziel durch die Anwendung oder den Service, der sie empfängt. AWS Key Management Service (AWS KMS) ist ein Service, der sichere, hochverfügbare Hard- und Software kombiniert, um ein für die Cloud skaliertes Schlüsselmanagementsystem bereitzustellen. Amazon S3 verwendet AWS KMS keys, um Ihre Amazon-S3-Objekte zu verschlüsseln. AWS KMS verschlüsselt nur die Objektdaten. Objektmetadaten werden grundsätzlich nicht verschlüsselt.

Wenn Sie KMS-Schlüssel verwenden, können Sie AWS KMS über die AWS Management Console oder die AWS KMS-APIs verwenden, um Folgendes zu tun:

  • KMS-Schlüssel zentral zu erstellen

  • Richtlinien zu definieren, die steuern, wie KMS-Schlüssel verwendet werden können

  • deren Verwendung zu prüfen, um zu beweisen, dass sie korrekt verwendet werden

Die Sicherheitskontrollen in AWS KMS tragen dazu bei, dass Sie Ihre Compliance-Anforderungen bezüglich der Verschlüsselung erfüllen. Sie können mit diesen KMS-Schlüsseln Ihre Daten in Amazon-S3-Buckets schützen. Wenn Sie die SSE-KMS-Verschlüsselung mit einem S3-Bucket verwenden, muss sich der AWS KMS keys in derselben Region wie der Bucket befinden.

Für AWS KMS keys fallen zusätzliche Gebühren an. Weitere Informationen finden Sie unter AWS KMS key-Konzepte im AWS Key Management Service-Entwicklerhandbuch und in den AWS KMS-Preisen.

Berechtigungen

Um ein mit einem AWS KMS key verschlüsseltes Objekt auf Amazon S3 hochzuladen, benötigen Sie kms:GenerateDataKey-Berechtigungen für den Schlüssel. Um ein mit einem AWS KMS key verschlüsseltes Objekt herunterzuladen, benötigen Sie kms:Decrypt-Berechtigungen. Informationen zu AWS KMS-Berechtigungen, die für mehrteilige Uploads erforderlich sind, finden Sie unter API für mehrteilige Uploads und Berechtigungen.

AWS KMS keys

Wenn Sie serverseitige Verschlüsselung mit AWS KMS (SSE-KMS) verwenden, können Sie den standardmäßigen AWS-verwalteten Schlüssel verwenden oder einen kundenverwalteten Schlüssel angeben, den Sie bereits erstellt haben. AWS KMS verwendet Envelope-Verschlüsselung, um Ihre Daten zusätzlich zu schützen. Envelope-Verschlüsselung bezeichnet das Verschlüsseln Ihrer Klartextdaten mit einem Datenschlüssel und die anschließende Verschlüsselung dieses Datenschlüssels mit einem Stammschlüssel.

Wenn Sie keinen vom Kunden verwalteten Schlüssel angeben, erstellt Amazon S3 automatisch einen von AWS KMS key in Ihrem AWS-Konto, wenn Sie erstmals ein mit SSE-KMS verschlüsseltes Objekt zu einem Bucket hinzufügen. Standardmäßig verwendet Amazon S3 diesen KMS-Schlüssel für SSE-KMS.

Wenn Sie einen vom Kunden verwalteten Schlüssel für SSE-KMS verwenden möchten, können Sie den kundenverwalteten Schlüssel erstellen, bevor Sie SSE-KMS konfigurieren. Wenn Sie dann SSE-KMS für Ihren Bucket konfigurieren, können Sie den vorhandenen vom Kunden verwalteten Schlüssel angeben.

Durch die Erstellung eines vom Kunden verwalteten Schlüssels erhalten Sie mehr Flexibilität und Kontrolle. Beispielsweise können Sie kundenverwaltete Schlüssel erstellen, drehen und deaktivieren. Sie können auch Zugriffskontrollen definieren und die vom Kunden verwalteten Schlüssel prüfen, mit denen Sie Ihre Daten schützen. Weitere Informationen über kundenverwaltete und AWS-verwaltete Schlüssel finden Sie unter AWS KMS concepts (KMS-Konzepte) im AWS Key Management Service-Entwicklerhandbuch.

Wenn Sie Ihre Daten mit einem KMS-Schlüssel oder einem vom Kunden verwalteten Schlüssel verschlüsseln möchten, führen AWS KMS und Amazon S3 die folgenden Aktionen aus:

  • Amazon S3 fordert einen Klartext-Datenschlüssel und eine mit dem angegebenen KMS-Schlüssel verschlüsselte Kopie des Schlüssels an.

  • AWS KMS generiert einen Datenschlüssel, verschlüsselt diesen Datenschlüssel mit dem KMS-Schlüssel und sendet sowohl den Klartext-Datenschlüssel als auch den verschlüsselten Datenschlüssel an Amazon S3.

  • Amazon S3 verschlüsselt die Daten mit dem Datenschlüssel und entfernt anschließend den Klartextschlüssel schnellstmöglich aus dem Arbeitsspeicher.

  • Amazon S3 speichert den verschlüsselten Datenschlüssel im Metadatenformat zusammen mit den verschlüsselten Daten.

Wenn Sie eine Entschlüsselung Ihrer Daten anfordern, führen Amazon S3 und AWS KMS die folgenden Aktionen aus:

  • Amazon S3 sendet den verschlüsselten Datenschlüssel an AWS KMS.

  • AWS KMS entschlüsselt den Datenschlüssel mithilfe des passenden KMS-Schlüssels und sendet anschließend den Klartext-Datenschlüssel an Amazon S3 zurück.

  • Amazon S3 entschlüsselt den Chiffretext und entfernt den Klartext-Datenschlüssel schnellstmöglich aus dem Arbeitsspeicher.

Wichtig

Wenn Sie einen AWS KMS key für serverseitige Verschlüsselung in Amazon S3 verwenden, müssen Sie einen symmetrischen KMS-Verschlüsselungsschlüssel wählen. Amazon S3 unterstützt nur symmetrische KMS-Verschlüsselungsschlüssel und keine asymmetrischen Schlüssel. Weitere Informationen finden Sie unter Using Symmetric and Asymmetric Keys (Verwenden von symmetrischen und asymmetrischen Schlüsseln) im AWS Key Management Service-Benutzerhandbuch.

Amazon-S3-Bucket-Schlüssel

Wenn Sie serverseitige Verschlüsselung mit AWS KMS-(SSE-KMS) konfigurieren, können Sie Ihren Bucket für die Verwendung von S3-Bucket-Schlüsseln für SSE-KMS konfigurieren. Dieser Schlüssel auf Bucket-Ebene für SSE-KMS kann Ihre AWS KMS-Anforderungskosten um bis zu 99 Prozent reduzieren, indem der Anforderungsverkehr von Amazon S3 zu AWS KMS verringert wird.

Wenn Sie Ihren Bucket für die Verwendung von S3-Bucket-Schlüsseln für SSE-KMS bei neuen Objekten konfigurieren, generiert AWS KMS einen Schlüssel auf Bucket-Ebene, mit dem eindeutige Datenschlüssel für Objekte im Bucket erstellt werden. Dieser Bucket-Schlüssel wird für einen zeitlich begrenzten Zeitraum in Amazon S3 verwendet, wodurch sich für Amazon S3 die Notwendigkeit weiter reduziert, zur Durchführung von Verschlüsselungs-Vorgänge Anforderungen an AWS KMS zu stellen. Weitere Informationen zur Verwendung von S3-Bucket-Schlüsseln finden Sie unter Reduzieren des Preises von SSE-KMS mit Amazon-S3-Bucket-Schlüsseln.

Erzwingen serverseitiger Verschlüsselung

Um die serverseitige Verschlüsselung aller Objekte in einem bestimmten Amazon-S3-Bucket anzufordern, können Sie eine Bucket-Richtlinie verwenden. 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":"PutObjectPolicy", "Statement":[{ "Sid":"DenyUnEncryptedObjectUploads", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "Condition":{ "StringNotEquals":{ "s3:x-amz-server-side-encryption":"aws:kms" } } } ] }

Um festzulegen, dass ein bestimmter AWS KMS key verwendet werden muss, um die Objekte in einem Bucket zu verschlüsseln, können Sie den s3:x-amz-server-side-encryption-aws-kms-key-id-Bedingungsschlüssel verwenden. Um den KMS-Schlüssel festzulegen, müssen Sie einen Schlüssel-Amazon-Ressourcennamen (ARN) verwenden, der im Format arn:aws:kms:region:acct-id:key/key-id" vorliegt.

Anmerkung

Wenn Sie ein Objekt hochladen, können Sie den KMS-Schlüssel über den x-amz-server-side-encryption-aws-kms-key-id-Header festlegen. Wenn der Header in der Anforderung nicht vorhanden ist, geht Amazon S3 davon aus, dass Sie den von AWS verwalteten Schlüssel verwenden möchten. Unabhängig davon muss dieAWS KMS-Schlüssel-ID, die Amazon S3 für die Objektverschlüsselung verwendet, mit der AWS KMS-Schlüssel-ID in der Richtlinie übereinstimmen, andernfalls lehnt Amazon S3 die Anfrage ab.

Die vollständige Liste der Amazon-S3-spezifischen Bedinungsschlüssel finden Sie unter Bedingungsschlüssel für Amazon S3.

Verschlüsselungskontext

Ein Verschlüsselungskontext ist ein Satz von Schlüssel-Wert-Paaren, die zusätzliche kontextbezogene Informationen zu den Daten enthalten können. Der Verschlüsselungskontext ist nicht verschlüsselt. Wenn für eine Verschlüsselungsoperation ein Verschlüsselungskontext angegeben wird, muss Amazon S3 denselben Verschlüsselungskontext auch für die Entschlüsselungsoperation angeben. Andernfalls schlägt die Entschlüsselung fehlschlägt. AWS KMS verwendet den Verschlüsselungskontext als zusätzlich authentifizierte Daten(AAD), um die authentifizierte Verschlüsselung zu unterstützen. Weitere Informationen zum Verschlüsselungs-Kontext finden Sie unter Encryption Context (Verschlüsselungs-Kontext) im AWS Key Management Service-Entwicklerhandbuch.

Amazon S3 verwendet automatisch den Objekt- oder Bucket-ARN (Amazon-Ressourcenname) als Verschlüsselungskontextpaar:

  • Wenn Sie SSE-KMS verwenden, ohne einen S3-Bucket-Schlüssel zu aktivieren, verwenden Sie den Objekt-ARN als Verschlüsselungskontext.

    arn:aws:s3:::object_ARN
  • Wenn Sie SSE-KMS verwenden und einen S3-Bucket-Schlüssel aktivieren, wird der Bucket-ARN als Verschlüsselungskontext verwendet. Weitere Informationen zu S3-Bucket-Schlüsseln finden Sie unter Reduzieren des Preises von SSE-KMS mit Amazon-S3-Bucket-Schlüsseln.

    arn:aws:s3:::bucket_ARN

Sie können optional ein zusätzliches Verschlüsselungskontextpaar bereitstellen, indem Sie den x-amz-server-side-encryption-context-Header in einer s3:PutObject-Anforderung verwenden. Da der Verschlüsselungskontext jedoch nicht verschlüsselt ist, sollte er keine sensiblen Informationen enthalten. Amazon S3 speichert dieses zusätzliche Schlüsselpaar zusammen mit dem Standardverschlüsselungskontext. Wenn es Ihre PUT-Anfrage verarbeitet, hängt Amazon S3 den Standardverschlüsselungskontext von aws:s3:arn an den von Ihnen zur Verfügung gestellten an.

Sie können den Verschlüsselungskontext verwenden, um Ihre kryptografischen Vorgänge zu identifizieren und zu kategorisieren. Sie können auch den ARN-Wert für den Standardverschlüsselungskontext verwenden, um relevante Anfragen inAWS CloudTrail zu verfolgen, indem Sie anzeigen, welcher Amazon S3 ARN mit welchem Verschlüsselungsschlüssel verwendet wurde.

Der Verschlüsselungskontext im requestParameters-Feld einer CloudTrail-Protokolldatei sieht in etwa wie der folgende aus.

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/file_name" }

Wenn Sie SSE-KMS mit der optionalen S3-Bucket-Keys-Funktion verwenden, ist der Verschlüsselungskontextwert der ARN des Buckets.

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" }

AWS Signaturversion 4

Signature Version 4 ist der Prozess für die Hinzufügung von Authentifizierungs-Informationen zu AWS-Anforderungen, die über HTTP gesendet werden. Aus Sicherheitsgründen müssen die meisten Anforderungen an AWS mit einem Zugriffsschlüssel signiert werden, der aus einer Zugriffsschlüssel-ID und einem geheimen Zugriffsschlüssel besteht. Diese beiden Schlüssel werden in der Regel als Sicherheitsanmeldeinformationen bezeichnet. Weitere Informationen finden Sie unter Authenticating Requests (Authentifizierung von Anforderungen) (AWS Signature Version 4) und Signature Version 4 signing process (Signaturprozess).

Wichtig
  • Alle GET- und PUT-Anforderungen für ein Objekt, das durch AWS KMS geschützt wird, schlagen fehl, wenn Sie diese nicht mit Secure Sockets Language (SSL), Transport Layer Security (TLS) oder Signature Version 4 erstellen.

  • Wenn Ihr Objekt SSE-KMS verwendet, dürfen Sie keine Verschlüsselungsanforderungs-Header für GET- und HEAD-Anforderungen senden. Andernfalls erhalten Sie den Fehler HTTP 400 BadRequest.