Verwenden serverseitiger Verschlüsselung mit AWS KMS-Schlüsseln (SSE-KMS) - Amazon Simple Storage Service

Verwenden serverseitiger Verschlüsselung mit AWS KMS-Schlüsseln (SSE-KMS)

Wichtig

Amazon S3 wendet jetzt serverseitige Verschlüsselung mit von Amazon S3 verwalteten Verschlüsselungsschlüssel (SSE-S3) als Basisverschlüsselung für jeden Bucket in Amazon S3 an. Ab dem 5. Januar 2023 werden alle neuen Objekt-Uploads auf Amazon S3 ohne zusätzliche Kosten und ohne Auswirkungen auf die Leistung automatisch verschlüsselt. Der Status der automatischen Verschlüsselung für die Standardverschlüsselungskonfiguration von S3-Buckets und für neue Objekt-Uploads ist in AWS CloudTrail-Protokollen, S3 Inventory, S3 Storage Lens, der Amazon-S3-Konsole und als zusätzlicher Amazon-S3-API-Antwortheader in der AWS Command Line Interface und den AWS-SDKs verfügbar. Weitere Informationen finden Sie unter Häufig gestellte Fragen zur Standardverschlüsselung.

Serverseitige Verschlüsselung ist die Verschlüsselung von Daten am Zielort durch die Anwendung oder den Service, der sie erhält.

Amazon S3 aktiviert für neue Objekt-Uploads automatisch die serverseitige Verschlüsselung mit von Amazon S3 verwalteten Schlüsseln (SSE-S3).

Sofern Sie nichts anderes angeben, verwenden Buckets standardmäßig SSE-S3 zum Verschlüsseln von Objekten. Sie können Buckets jedoch auch so konfigurieren, dass sie stattdessen die serverseitige Verschlüsselung mit AWS Key Management Service (AWS KMS)-Schlüsseln (SSE-KMS) verwenden. Weitere Informationen finden Sie unter Angeben der serverseitigen Verschlüsselung mit AWS KMS-(SSE-KMS).

Der Service AWS KMS kombiniert sichere, hoch verfügbare Hard- und Software, um ein System für die Schlüsselverwaltung bereitzustellen, das für die Cloud skaliert ist. Amazon S3 verwendet serverseitige Verschlüsselung mit AWS KMS (SSE-KMS), um Ihre S3-Objektdaten zu verschlüsseln. Außerdem wird, wenn SSE-KMS für das Objekt angefordert wird, die S3-Prüfsumme (als Teil der Metadaten des Objekts) in verschlüsselter Form gespeichert. Weitere Informationen zur Prüfsumme finden Sie unter Überprüfen der Objektintegrität in Amazon S3.

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

  • Sie können KMS-Schlüssel zentral erstellen, anzeigen, bearbeiten, überwachen, aktivieren oder deaktivieren, rotieren sowie das Löschen von KMS-Schlüsseln planen.

  • Definieren Sie die Richtlinien, die steuern, wie und von wem KMS-Schlüssel verwendet werden können.

  • Prüfen Sie die korrekte Verwendung der KMS-Schlüssel. Das Auditing wird von der AWS KMS-API unterstützt, nicht jedoch von der AWS KMS-Konsole;.

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 fallen zusätzliche Gebühren an AWS KMS keys. Weitere Informationen finden Sie unter AWS KMS key-Konzepte im AWS Key Management Service-Entwicklerhandbuch und in den AWS KMS-Preisen.

Anweisungen, wie IAM-Benutzer auf KMS-verschlüsselte Buckets zugreifen können, finden Sie unter Mein Amazon S3 Bucket hat eine Standardverschlüsselung mit einem benutzerdefinierten AWS KMS Schlüssel. Wie kann ich Benutzern erlauben, Daten aus dem Bucket herunterzuladen und in ihn hochzuladen? im AWS re:Post-Wissenszentrum.

Berechtigungen

Um erfolgreich eine PutObject Anfrage zur Verschlüsselung eines Objekts mit einem AWS KMS Schlüssel für Amazon S3 zu stellen, benötigen Sie kms:GenerateDataKey Berechtigungen für den Schlüssel. Um ein mit einem AWS KMS keyverschlüsseltes Objekt herunterzuladen, benötigen Sie kms:Decrypt Berechtigungen für den Schlüssel. Um einen mehrteiligen Upload durchzuführen, um ein Objekt mit einem AWS KMS key zu verschlüsseln, benötigen Sie die Berechtigungen kms:GenerateDataKey und kms:Decrypt für den Schlüssel.

Wichtig

Überprüfen Sie sorgfältig die Berechtigungen, die in Ihren KMS-Schlüsselrichtlinien gewährt werden. Beschränken Sie die vom Kunden verwalteten Berechtigungen für KMS-Schlüsselrichtlinien immer nur auf die IAM-Prinzipale und AWS-Dienste, die auf die entsprechende AWS KMS-Schlüsselaktion zugreifen müssen. Weitere Informationen finden Sie unter Schlüsselrichtlinien in AWS KMS.

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 unterstützt Umschlagverschlüsselung. S3 verwendet die AWS KMS-Funktionen für die Umschlagverschlüsselung, um Ihre Daten weiter zu schützen. Bei der Umschlagverschlüsselung werden Ihre Klartextdaten mit einem Datenschlüssel verschlüsselt, und dieser Datenschlüssel wird dann mit einem KMS-Schlüssel verschlüsselt. Weitere Informationen zur Envelope-Verschlüsselung finden Sie unter Envelope-Verschlüsselung im AWS Key Management Service-Entwicklerhandbuch.

Wenn Sie keinen vom Kunden verwalteten Schlüssel angeben, erstellt Amazon S3 automatisch einen von Von AWS verwalteter Schlüssel 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.

Anmerkung

Objekte, die mit SSE-KMS mit Von AWS verwaltete Schlüssel verschlüsselt wurden, können nicht kontoübergreifend gemeinsam genutzt werden. Wenn Sie SSE-KMS-Daten kontoübergreifend freigeben müssen, müssen Sie einen vom Kunden verwalteten Schlüssel von AWS KMS verwenden.

Wenn Sie einen vom Kunden verwalteten Schlüssel für SSE-KMS verwenden möchten, können Sie einen symmetrischen kundenverwalteten Verschlüsselungsschlü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. Weitere Informationen um symmetrischen Verschlüsselungsschlüssel finden Sie unter Symmetrische KMS-Verschlüsselungsschlüssel im Entwicklerhandbuch für AWS Key Management Service.

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 von AWS verwaltete Schlüssel finden Sie unter Kundenverwaltete Schlüssel und AWS-Schlüssel im Entwicklerhandbuch für AWS Key Management Service.

Anmerkung

Wenn Sie serverseitige Verschlüsselung mit einem kundenverwalteten Schlüssel verwenden, der in einem externen Schlüsselspeicher abgelegt ist, sind Sie im Gegensatz zu Standard-KMS-Schlüsseln dafür verantwortlich, die Verfügbarkeit und Beständigkeit Ihres Schlüsselmaterials sicherzustellen. Weitere Informationen zu externen Schlüsselspeichern und dazu, wie sie das Modell der geteilten Verantwortung verändern, finden Sie unter Externe Schlüsselspeicher im Entwicklerhandbuch für AWS Key Management Service.

Verwenden der SSE-KMS-Verschlüsselung für kontoübergreifende Vorgänge

Beachten Sie Folgendes, wenn Sie kontoübergreifende Operationen verschlüsseln:

  • Wenn ein AWS KMS key Amazon-Ressourcenname (ARN) oder Alias zum Zeitpunkt der Anforderung oder über die Standardverschlüsselungskonfiguration des Buckets nicht angegeben wird, wird der Von AWS verwalteter Schlüssel (aws/s3) des hochladenden Kontos für die Verschlüsselung verwendet und für die Entschlüsselung benötigt.

  • Von AWS verwalteter Schlüssel (aws/s3) kann als KMS-Schlüssel für kontenübergreifende Operationen verwendet werden, wenn die Upload- und Zugriffsprinzipale AWS Identity and Access Management (IAM) vom selben AWS-Konto stammen.

  • Verwenden Sie einen vom Kunden verwalteten Schlüssel, wenn Sie kontoübergreifenden Zugriff auf Ihre S3-Objekte gewähren möchten. Sie können die Richtlinie eines vom Kunden verwalteten Schlüssel so konfigurieren, dass der Zugriff von einem anderen Konto aus möglich ist.

  • Wenn Sie einen vom Kunden verwalteten KMS-Schlüssel angeben, empfehlen wir die Verwendung eines vollständig qualifizierten KMS-Schlüssel-ARN. Wenn Sie stattdessen einen KMS-Schlüssel-Alias verwenden, löst AWS KMS den Schlüssel innerhalb des Kontos des Anforderers auf. Dieses Verhalten kann dazu führen, dass Daten mit einem KMS-Schlüssel verschlüsselt werden, der dem Anforderer und nicht dem Bucket-Eigentümer gehört.

  • Sie müssen einen Schlüssel angeben, für den Ihnen (dem Anforderer) die Berechtigung Encrypt erteilt wurde. Weitere Informationen finden Sie unter Schlüssel-Benutzern die Verwendung eines KMS-Schlüssels für kryptografische Operationen gestatten im Entwicklerhandbuch zu AWS Key Management Service.

Weitere Informationen dazu, wann kundenverwaltete Schlüssel und von AWS verwaltete KMS-Schlüssel verwendet werden sollten, finden Sie unter Soll ich einen Von AWS verwalteter Schlüssel oder einen vom Kunden verwalteten Schlüssel zum Verschlüsseln meiner Objekte auf Amazon S3 verwenden?

SSE-KMS-Verschlüsselungs-Workflow

Wenn Sie Ihre Daten mit einem Von AWS verwalteter Schlüssel oder einem kundenverwalteten Schlüssel verschlüsseln möchten, führen AWS KMS und Amazon S3 die folgenden Umschlagsverschlüsselungsaktionen aus:

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

  2. 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.

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

  4. 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:

  1. Amazon S3 sendet den verschlüsselten Datenschlüssel in einer Decrypt-Anforderung an AWS KMS.

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

  3. Amazon S3 entschlüsselte die verschlüsselten Daten mit dem Klartext-Datenschlüssel und entfernt den Klartext-Datenschlüssel anschließend 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 KMS-Schlüssel mit symmetrischer Verschlüsselung. Weitere Informationen zu diesen Schlüsseln finden Sie unter Symmetrische KMS-Verschlüsselungsschlüssel im Entwicklerhandbuch für AWS Key Management Service.

Prüfung der SSE-KMS-Verschlüsselung

Wenn Sie Anfragen identifizieren möchten, die SSE-KMS angeben, können Sie die Metriken Alle SSE-KMS-Anfragen und % aller SSE-KMS-Anfragen der Metriken von Amazon S3 Storage Lens verwenden. S3 Storage Lens ist eine Cloud-Speicheranalysefunktion, mit der Sie unternehmensweite Einblicke in die Nutzung und Aktivität von Objektspeichern erhalten können. Sie können auch die Anzahl der Buckets mit aktiviertem SSE-KMS und den Prozentsatz der Buckets mit aktiviertem SSE-KMS verwenden, um die Anzahl der Buckets zu ermitteln, die SSE-KMS für die standardmäßige Bucket-Verschlüsselung verwenden. Weitere Informationen finden Sie unter Bewertung Ihrer Speicheraktivität und -nutzung mit S3 Storage Lens. Eine vollständige Liste der Metriken finden Sie im Glossar der S3-Storage-Lens-Metriken.

Um die Verwendung Ihrer AWS KMS-Schlüssel für Ihre SSE-KMS-verschlüsselten Daten zu überprüfen, können Sie AWS CloudTrail-Protokolle verwenden. Sie können Einblicke in Ihre kryptografischen Operationen wie GenerateDataKey und Decrypt erhalten. CloudTrail unterstützt zahlreiche Attributwerte für die Filterung Ihrer Suche, darunter den Ereignisnamen, den Benutzernamen und die Ereignisquelle.

Amazon-S3-Bucket-Schlüssel

Wenn Sie die serverseitige Verschlüsselung mit AWS KMS (SSE-KMS) konfigurieren, können Sie Ihre Buckets 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 einen 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 S3-Bucket-Schlüssel wird für einen zeitlich begrenzten Zeitraum in Amazon S3 verwendet, wodurch sich für Amazon S3 die Notwendigkeit weiter reduziert, für Verschlüsselungsoperationen Anforderungen an AWS KMS zu auszuführen. 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

Wenn Sie die serverseitige Verschlüsselung aller Objekte in einem bestimmten Amazon-S3-Bucket anfordern möchten, können Sie eine Bucket-Richtlinie verwenden. Beispielsweise verweigert die folgende Bucket-Richtlinie jedem die Berechtigung zum Hochladen von Objekten (s3:PutObject), wenn die Anforderung nicht den Header x-amz-server-side-encryption-aws-kms-key-id enthält, der die serverseitige Verschlüsselung mit SSE-KMS anfordert.

JSON
{ "Version":"2012-10-17", "Id":"PutObjectPolicy", "Statement":[{ "Sid":"DenyObjectsThatAreNotSSEKMS", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition":{ "Null":{ "s3:x-amz-server-side-encryption-aws-kms-key-id":"true" } } } ] }

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. Zum Festlegen des KMS-Schlüssels müssen Sie einen Schlüssel-Amazon-Ressourcennamen (ARN) im arn:aws:kms:region:acct-id:key/key-id-Format verwenden. AWS Identity and Access Management führt keine Validierung durch, wenn die Zeichenfolge für s3:x-amz-server-side-encryption-aws-kms-key-id existiert.

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 angeben oder sich auf Ihre Standard-Bucket-Verschlüsselungskonfiguration verlassen. Wenn Ihre PutObject-Anforderung aws:kms im x-amz-server-side-encryption-Header angibt, aber den x-amz-server-side-encryption-aws-kms-key-id-Header nicht angibt, nimmt Amazon S3 an, dass Sie den Von AWS verwalteter Schlüssel verwenden möchten. Unabhängig davon muss die AWS 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.

Eine vollständige Liste der Amazon-S3-spezifischen Bedingungsschlüssel finden Sie unter Bedingungsschlüssel für Amazon S3 in der Service-Authorization-Referenz.

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 Amazon-Ressourcennamen (ARN) des Objekts oder Buckets 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 Header x-amz-server-side-encryption-context 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 Ihre PUT-Anforderung verarbeitet wird, hängt Amazon S3 den Standardverschlüsselungskontext aws:s3:arn an den von Ihnen bereitgestellten 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:::amzn-s3-demo-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:::amzn-s3-demo-bucket1" }

Senden von Anfragen für AWS KMS-verschlüsselte Objekte

Wichtig

Alle GET- und PUT-Anfragen für AWS KMS-verschlüsselte Objekte müssen mit Secure Sockets Layer (SSL) oder Transport Layer Security (TLS) erstellt werden. Außerdem müssen die Anfragen mit gültigen Anmeldeinformationen signiert werden, z. B. mit AWS Signatur Version 4 (oder AWS Signatur Version 2).

AWS 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

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 Bad Request.