Schlüssel und Zertifikate für die Datenverschlüsselung erstellen - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Schlüssel und Zertifikate für die Datenverschlüsselung erstellen

Bevor Sie Verschlüsselungsoptionen unter Verwendung einer Sicherheitskonfiguration angeben, legen Sie zunächst den Anbieter der Schlüssel und Verschlüsselungsartefakte fest. Sie können beispielsweise einen benutzerdefinierten Anbieter verwenden AWS KMS , den Sie erstellen. Erstellen Sie als Nächstes die erforderlichen Schlüssel oder den Schlüsselanbieter, wie in diesem Abschnitt beschrieben.

Bereitstellung von Schlüsseln für die Verschlüsselung ruhender Daten bei Amazon EMR

Sie können AWS Key Management Service (AWS KMS) oder einen benutzerdefinierten Schlüsselanbieter für die Verschlüsselung von Daten im Ruhezustand in Amazon EMR verwenden. Bei der Nutzung AWS KMS fallen Gebühren für die Speicherung und Verwendung von Verschlüsselungsschlüsseln an. Weitere Informationen finden Sie unter AWS KMS Preise.

Dieses Thema enthält wichtige Richtliniendetails für einen KMS Schlüssel, der mit Amazon verwendet werden sollEMR, sowie Richtlinien und Codebeispiele für das Schreiben einer benutzerdefinierten Schlüsselanbieterklasse für die Amazon S3 S3-Verschlüsselung. Weitere Informationen zum Erstellen von -Schlüsseln finden Sie unter Erstellen von Schlüsseln im AWS Key Management Service -Entwicklerhandbuch.

AWS KMS keys Für die Verschlüsselung verwenden

Der AWS KMS Verschlüsselungsschlüssel muss in derselben Region wie Ihre EMR Amazon-Cluster-Instance und die verwendeten Amazon S3-Buckets erstellt werden. EMRFS Wenn sich der von Ihnen angegebene Schlüssel in einem anderen Konto befindet als dem, das Sie zur Konfiguration eines Clusters verwenden, müssen Sie den Schlüssel mit seinem ARN angeben.

Die Rolle für das EC2 Amazon-Instance-Profil muss über Berechtigungen zur Verwendung des von Ihnen angegebenen KMS Schlüssels verfügen. Die Standardrolle für das Instance-Profil in Amazon EMR istEMR_EC2_DefaultRole. Wenn Sie eine andere Rolle für das Instance-Profil oder IAM Rollen für EMRFS Anfragen an Amazon S3 verwenden, stellen Sie sicher, dass jede Rolle je nach Bedarf als Schlüsselbenutzer hinzugefügt wird. Dadurch erhält die Rolle die Erlaubnis, den KMS Schlüssel zu verwenden. Weitere Informationen finden Sie unter Verwenden wichtiger Richtlinien im AWS Key Management Service Entwicklerhandbuch und Konfigurieren von IAM Rollen für EMRFS Anfragen an Amazon S3.

Sie können das verwenden AWS Management Console , um Ihr Instance-Profil oder EC2 Instance-Profil zur Liste der Schlüsselbenutzer für den angegebenen KMS Schlüssel hinzuzufügen, oder Sie können das AWS CLI oder an verwenden, AWS SDK um eine entsprechende Schlüsselrichtlinie anzuhängen.

Beachten Sie, dass Amazon nur symmetrische KMS Schlüssel EMR unterstützt. Sie können keinen asymmetrischen KMS Schlüssel verwenden, um ruhende Daten in einem EMR Amazon-Cluster zu verschlüsseln. Hilfe bei der Bestimmung, ob ein KMS Schlüssel symmetrisch oder asymmetrisch ist, finden Sie unter Identifizieren symmetrischer und asymmetrischer Schlüssel. KMS

Das folgende Verfahren beschreibt, wie Sie das standardmäßige EMR Amazon-Instance-Profil EMR_EC2_DefaultRole als Hauptbenutzer hinzufügen, indem Sie den verwenden AWS Management Console. Es wird davon ausgegangen, dass Sie bereits einen KMS Schlüssel erstellt haben. Informationen zum Erstellen eines neuen KMS Schlüssels finden Sie unter Schlüssel erstellen im AWS Key Management Service Entwicklerhandbuch.

Um das EC2 Instance-Profil für Amazon EMR zur Liste der Benutzer von Verschlüsselungsschlüsseln hinzuzufügen
  1. Melden Sie sich bei der AWS Key Management Service (AWS KMS) -Konsole an AWS Management Console und öffnen Sie sie unter https://console.aws.amazon.com/kms.

  2. Um das zu ändern AWS-Region, verwenden Sie die Regionsauswahl in der oberen rechten Ecke der Seite.

  3. Wählen Sie den Alias des KMS Schlüssels aus, den Sie ändern möchten.

  4. Wählen Sie auf der Seite mit den Schlüsseldetails unter Key Users (Schlüsselbenutzer( die Option Add (Hinzufügen) aus.

  5. Wählen Sie die entsprechende Rolle im Dialogfeld Add key users (Schlüsselbenutzer hinzufügen) aus. Der Name der Standardrolle lautet EMR_EC2_DefaultRole.

  6. Wählen Sie Hinzufügen aus.

Aktivierung der EBS Verschlüsselung durch Bereitstellung zusätzlicher Berechtigungen für KMS Schlüssel

Ab EMR Amazon-Version 5.24.0 können Sie EBS Root-Geräte und Speichervolumes mithilfe einer Sicherheitskonfigurationsoption verschlüsseln. Um diese Option zu aktivieren, müssen Sie Ihren Schlüsselanbieter angeben AWS KMS . Darüber hinaus müssen Sie der Servicerolle die von EMR_DefaultRole Ihnen angegebenen Berechtigungen zur Verwendung der von AWS KMS key Ihnen angegebenen Rechte erteilen.

Sie können das verwenden AWS Management Console , um die Servicerolle zur Liste der Schlüsselbenutzer für den angegebenen KMS Schlüssel hinzuzufügen, oder Sie können das AWS CLI oder ein verwenden, AWS SDK um eine entsprechende Schlüsselrichtlinie anzuhängen.

Das folgende Verfahren beschreibt, wie Sie AWS Management Console die standardmäßige EMR Amazon-Servicerolle EMR_DefaultRole als Schlüsselbenutzer hinzufügen können. Es wird davon ausgegangen, dass Sie bereits einen KMS Schlüssel erstellt haben. Informationen zum Erstellen eines neuen KMS Schlüssels finden Sie unter Schlüssel erstellen im AWS Key Management Service Entwicklerhandbuch.

Um die EMR Amazon-Servicerolle zur Liste der Benutzer von Verschlüsselungsschlüsseln hinzuzufügen
  1. Melden Sie sich bei der AWS Key Management Service (AWS KMS) -Konsole an AWS Management Console und öffnen Sie sie unter https://console.aws.amazon.com/kms.

  2. Um das zu ändern AWS-Region, verwenden Sie die Regionsauswahl in der oberen rechten Ecke der Seite.

  3. Wählen Sie links Vom Kunden verwaltete Schlüssel aus.

  4. Wählen Sie den Alias des KMS Schlüssels aus, den Sie ändern möchten.

  5. Wählen Sie auf der Seite mit den Schlüsseldetails unter Key Users (Schlüsselbenutzer( die Option Add (Hinzufügen) aus.

  6. Wählen Sie im Abschnitt Schlüsselbenutzer hinzufügen die entsprechende Rolle aus. Der Name der Standard-Servicerolle für Amazon EMR lautetEMR_DefaultRole.

  7. Wählen Sie Hinzufügen aus.

Erstellen eines benutzerdefinierten Schlüsselanbieters

Wenn Sie eine Sicherheitskonfiguration verwenden, müssen Sie einen anderen Anbieterklassennamen für die Verschlüsselung lokaler Datenträger und die Amazon-S3-Verschlüsselung angeben. Die Anforderungen für den benutzerdefinierten Schlüsselanbieter hängen davon ab, ob Sie die lokale Festplattenverschlüsselung und die Amazon S3 S3-Verschlüsselung sowie die EMR Amazon-Release-Version verwenden.

Abhängig von der Art der Verschlüsselung, die Sie bei der Erstellung eines benutzerdefinierten Schlüsselanbieters verwenden, muss die Anwendung auch unterschiedliche EncryptionMaterialsProvider Schnittstellen implementieren. Beide Schnittstellen sind in der Version 1.11.0 AWS SDK für Java und höher verfügbar.

Sie können jede Strategie verwenden, um Verschlüsselungsmaterial für die Implementierung bereitzustellen. Sie können sich beispielsweise dafür entscheiden, statisches Verschlüsselungsmaterial bereitzustellen oder es in ein komplexeres Schlüsselverwaltungssystem zu integrieren.

Wenn Sie die Amazon S3 S3-Verschlüsselung verwenden, müssen Sie die Verschlüsselungsalgorithmen AES/GCM/NoPaddingfür benutzerdefinierte Verschlüsselungsmaterialien verwenden.

Wenn Sie die lokale Festplattenverschlüsselung verwenden, variiert der Verschlüsselungsalgorithmus, der für benutzerdefinierte Verschlüsselungsmaterialien verwendet werden soll, je nach EMR Version. Für Amazon EMR 7.0.0 und niedriger müssen Sie AES/GCM/NoPaddingverwenden. Für Amazon EMR 7.1.0 und höher müssen Sie verwenden AES.

Die EncryptionMaterialsProvider Klasse ruft Verschlüsselungsmaterial nach Verschlüsselungskontext ab. Amazon EMR füllt zur Laufzeit Informationen zum Verschlüsselungskontext aus, damit der Anrufer die richtigen Verschlüsselungsmaterialien für die Rücksendung ermitteln kann.

Beispiel: Verwendung eines benutzerdefinierten Schlüsselanbieters für die Amazon S3 S3-Verschlüsselung mit EMRFS

Wenn Amazon die Verschlüsselungsmaterialien von der EncryptionMaterialsProvider Klasse EMR abruft, um die Verschlüsselung durchzuführen, füllt das materialsDescription Argument EMRFS optional mit zwei Feldern auf: dem Amazon S3 URI für das Objekt und dem des Clusters, die JobFlowId von der EncryptionMaterialsProvider Klasse verwendet werden können, um Verschlüsselungsmaterialien selektiv zurückzugeben.

Beispielsweise kann der Anbieter unterschiedliche Schlüssel für verschiedene Amazon S3 URI S3-Präfixe zurückgeben. Es ist die Beschreibung der zurückgegebenen Verschlüsselungsmaterialien, die letztendlich mit dem Amazon S3 S3-Objekt gespeichert werden, und nicht der materialsDescription Wert, der vom Anbieter generiert EMRFS und an diesen weitergegeben wird. Beim Entschlüsseln eines Amazon S3 S3-Objekts wird die Beschreibung des Verschlüsselungsmaterials an die EncryptionMaterialsProvider Klasse übergeben, sodass sie wiederum selektiv den passenden Schlüssel zur Entschlüsselung des Objekts zurückgeben kann.

Eine EncryptionMaterialsProvider Referenzimplementierung finden Sie weiter unten. Ein weiterer benutzerdefinierter Anbieter EMRFSRSAEncryptionMaterialsProvider,, ist erhältlich bei GitHub.

import com.amazonaws.services.s3.model.EncryptionMaterials; import com.amazonaws.services.s3.model.EncryptionMaterialsProvider; import com.amazonaws.services.s3.model.KMSEncryptionMaterials; import org.apache.hadoop.conf.Configurable; import org.apache.hadoop.conf.Configuration; import java.util.Map; /** * Provides KMSEncryptionMaterials according to Configuration */ public class MyEncryptionMaterialsProviders implements EncryptionMaterialsProvider, Configurable{ private Configuration conf; private String kmsKeyId; private EncryptionMaterials encryptionMaterials; private void init() { this.kmsKeyId = conf.get("my.kms.key.id"); this.encryptionMaterials = new KMSEncryptionMaterials(kmsKeyId); } @Override public void setConf(Configuration conf) { this.conf = conf; init(); } @Override public Configuration getConf() { return this.conf; } @Override public void refresh() { } @Override public EncryptionMaterials getEncryptionMaterials(Map<String, String> materialsDescription) { return this.encryptionMaterials; } @Override public EncryptionMaterials getEncryptionMaterials() { return this.encryptionMaterials; } }

Bereitstellung von Zertifikaten für die Verschlüsselung von Daten während der Übertragung mit EMR Amazon-Verschlüsselung

Mit der EMR Amazon-Version 4.8.0 oder höher haben Sie zwei Möglichkeiten, Artefakte für die Verschlüsselung von Daten während der Übertragung mithilfe einer Sicherheitskonfiguration anzugeben:

  • Sie können PEM Zertifikate manuell erstellen, sie in eine ZIP-Datei aufnehmen und dann in Amazon S3 auf die .zip-Datei verweisen.

  • Sie können einen benutzerdefinierten Zertifikatanbieter als Java-Klasse implementieren. Sie geben die JAR Datei der Anwendung in Amazon S3 an und geben dann den vollständigen Klassennamen des Anbieters an, wie er in der Anwendung deklariert ist. Die Klasse muss die TLSArtifactsProviderSchnittstelle implementieren, die ab AWS SDK for Java Version 1.11.0 verfügbar ist.

Amazon lädt EMR automatisch Artefakte auf jeden Knoten im Cluster herunter und verwendet sie später, um die Open-Source-Verschlüsselungsfunktionen für die Übertragung zu implementieren. Weitere Informationen zu den verfügbaren Optionen finden Sie unter Verschlüsselung während der Übertragung.

Verwendung von Zertifikaten PEM

Wenn Sie eine .zip-Datei für die Verschlüsselung während der Übertragung angeben, erwartet die Sicherheitskonfiguration, dass die PEM Dateien in der .zip-Datei genau so benannt werden, wie sie unten angezeigt werden:

Zertifikate für Verschlüsselung von Daten während der Übertragung
Dateiname Erforderlich/optional Details
privateKey.pem Erforderlich Privater Schlüssel
certificateChain.pem Erforderlich Zertifikatskette
trustedCertificates.pem Optional Erforderlich, wenn das bereitgestellte Zertifikat nicht entweder von der standardmäßigen vertrauenswürdige Java-Stammzertifizierungsstelle (Certification Authority, CA) oder einer CA-Zwischenzertifizierungsstelle, die eine Verbindung zur Java-Standard-Stammzertifizierungsstelle herstellen kann, signiert wurde. Das standardmäßige vertrauenswürdige Stammverzeichnis von Java CAs finden Sie in. jre/lib/security/cacerts

Wahrscheinlich möchten Sie die private PEM Schlüsseldatei als Platzhalterzertifikat konfigurieren, das den Zugriff auf die VPC Amazon-Domain ermöglicht, in der sich Ihre Cluster-Instances befinden. Wenn sich Ihr Cluster beispielsweise in der Region us-east-1 (N. Virginia) befindet, könnten Sie in der Zertifikatskonfiguration einen allgemeinen Namen angeben, der durch die Angabe von CN=*.ec2.internal in der Zertifikatsubjektdefinition Zugriff auf den Cluster gewährt. Wenn sich Ihr Cluster in der Region us-west-2 (Oregon) befindet, könnten Sie CN=*.us-west-2.compute.internal angeben.

Wenn die bereitgestellte PEM Datei im Verschlüsselungsartefakt kein Platzhalterzeichen in der CN für die Domain enthält, müssen Sie den Wert von to ändern. hadoop.ssl.hostname.verifier ALLOW_ALL Dies erfolgt mit der core-site Klassifizierung beim Senden von Konfigurationen an einen Cluster oder durch Hinzufügen dieses Werts zur Datei core-site.xml. Diese Änderung ist erforderlich, da die standardmäßige Hostnamen-Verifizierung keinen Hostnamen ohne Platzhalter akzeptiert, was zu einem Fehler führt. Weitere Informationen zur EMR Cluster-Konfiguration innerhalb eines Amazon VPC finden Sie unterNetzwerk konfigurieren.

Das folgende Beispiel zeigt, wie Open SSL verwendet wird, um ein selbstsigniertes X.509-Zertifikat mit einem privaten RSA 1024-Bit-Schlüssel zu generieren. Der Schlüssel ermöglicht den Zugriff auf die EMR Amazon-Cluster-Instances des Emittenten in der Region us-west-2 (Oregon), wie durch den *.us-west-2.compute.internal Domainnamen als allgemeinen Namen angegeben.

Es können weitere optionale Subjektelemente wie Land (Country, C), Status (Status, S), Gebietsschema (Locale, L) usw. angegeben werden. Da ein selbstsigniertes Zertifikat generiert wird, kopiert der zweite Befehl im Beispiel die Datei certificateChain.pem zur Datei trustedCertificates.pem. Der dritte Befehl verwendet zip zum Erstellen der Datei my-certs.zip, die die Zertifikate enthält.

Wichtig

Dieses Beispiel dient nur zur proof-of-concept Veranschaulichung. Die Verwendung von selbstsignierten Zertifikaten wird nicht empfohlen und stellt ein potenzielles Sicherheitsrisiko dar. Verwenden Sie eine vertrauenswürdige Zertifizierungsstelle (CA), um die Zertifikate für Produktionssysteme auszustellen.

$ openssl req -x509 -newkey rsa:1024 -keyout privateKey.pem -out certificateChain.pem -days 365 -nodes -subj '/C=US/ST=Washington/L=Seattle/O=MyOrg/OU=MyDept/CN=*.us-west-2.compute.internal' $ cp certificateChain.pem trustedCertificates.pem $ zip -r -X my-certs.zip certificateChain.pem privateKey.pem trustedCertificates.pem