Transparente Verschlüsselung in HDFS auf Amazon EMR - 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.

Transparente Verschlüsselung in HDFS auf Amazon EMR

Die transparente Verschlüsselung wird durch die Verwendung von HDFS-Verschlüsselungszonen implementiert, wobei es sich dabei um HDFS-Pfade handelt, die von Ihnen definiert werden. Jede Verschlüsselungszone verfügt über ihren eigenen Schlüssel, der unter Verwendung der hdfs-site-Konfigurationsklassifikation auf dem Schlüssel-Server gespeichert wird.

Ab Amazon-EMR-Version 4.8.0 können Sie anhand der Amazon-EMR-Sicherheitskonfigurationen Datenverschlüsselungseinstellungen für Cluster einfacher konfigurieren. Sicherheitskonfigurationen bieten Einstellungen, um die Sicherheit für Daten während der Übertragung und für Daten im Ruhezustand in Amazon Elastic Block Store (Amazon EBS)-Speichervolumen sowie EMRFS-Daten in Amazon S3 zu unterstützen. Weitere Informationen finden Sie unter Daten während der Übertragung und im Ruhezustand verschlüsseln im Verwaltungshandbuch für Amazon EMR.

Amazon EMR verwendet standardmäßig den Hadoop KMS. Sie können jedoch einen anderen KMS verwenden, der den KeyProvider API-Vorgang implementiert. Jede Datei in einer HDFS-Zone verfügt über ihren eigenen, eindeutigen Datenverschlüsselungsschlüssel, der durch den Verschlüsselungszonenschlüssel verschlüsselt ist. HDFS-Daten werden verschlüsselt end-to-end (im Ruhezustand und während der Übertragung), wenn Daten in eine Verschlüsselungszone geschrieben werden, da Verschlüsselungs- und Entschlüsselungsaktivitäten nur im Client stattfinden.

Sie können keine Dateien zwischen den Verschlüsselungszonen oder von einer Verschlüsselungzone nach unverschlüsselten Pfaden verschieben.

Der HDFS-Client NameNode und der HDFS-Client interagieren über den API-Vorgang mit dem Hadoop KMS (oder einem von Ihnen konfigurierten alternativen KMS). KeyProvider Das KMS speichert Verschlüsselungsschlüssel im Unterstützungsschlüsselspeicher. Außerdem enthält Amazon EMR die JCE-Richtlinie für unbegrenzte Stärke, so dass Sie Schlüssel mit einer gewünschten Länge erstellen können.

Weitere Informationen finden Sie unter Transparente Verschlüsselung in HDFS in der Hadoop-Dokumentation.

Anmerkung

In Amazon EMR ist KMS über HTTPS nicht standardmäßig im Hadoop-KMS aktiviert. Weitere Informationen zum Aktivieren von KMS über HTTPS finden Sie in der Hadoop-KMS-Dokumentation.

Konfigurieren der transparenten HDFS-Verschlüsselung

Sie können die transparente Verschlüsselung in Amazon EMR konfigurieren, indem Sie Schlüssel erstellen und Verschlüsselungszonen hinzufügen. Hierfür gibt es mehrere Möglichkeiten:

  • Verwenden der Amazon-EMR-Konfigurations-API-Operation beim Erstellen eines Clusters

  • Verwenden eines Hadoop-JAR-Schritts mit command-runner.jar

  • Anmelden am Master-Knoten des Hadoop-Clusters und verwenden der Befehlszeilen-Clients hadoop key und hdfs crypto

  • Verwenden der REST-APIs für Hadoop-KMS und HDFS

Weitere Informationen über die REST-APIs finden Sie in der jeweiligen Dokumentation für Hadoop-KMS und HDFS.

Erstellen von Verschlüsselungszonen und deren Schlüssel während der Cluster-Erstellung unter Verwendung der CLI

Mithilfe der hdfs-encryption-zones-Klassifizierung im Konfiguration-API-Vorgang können Sie bei der Erstellung eines Clusters einen Schlüsselnamen und eine Verschlüsselungszone angeben. Amazon EMR erstellt diesen Schlüssel im Hadoop-KMS auf Ihrem Cluster und konfiguriert die Verschlüsselungszone.

  • Erstellen Sie einen Cluster mit dem folgenden Befehl.

    aws emr create-cluster --release-label emr-7.1.0 --instance-type m5.xlarge --instance-count 2 \ --applications Name=App1 Name=App2 --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json
    Anmerkung

    Linux-Zeilenfortsetzungszeichen (\) sind aus Gründen der Lesbarkeit enthalten. Sie können entfernt oder in Linux-Befehlen verwendet werden. Entfernen Sie sie unter Windows oder ersetzen Sie sie durch ein Caret-Zeichen (^).

    myConfig.json:

    [ { "Classification": "hdfs-encryption-zones", "Properties": { "/myHDFSPath1": "path1_key", "/myHDFSPath2": "path2_key" } } ]
Manuelles Erstellen von Verschlüsselungszonen und deren Schlüssel auf dem Master-Knoten
  1. Starten Ihres Clusters mit einer Amazon-EMR-Version größer als 4.1.0.

  2. Stellen Sie mit dem Hauptknoten Ihres Clusters mithilfe von SSH eine Verbindung her.

  3. Erstellen Sie einen Schlüssel im Hadoop-KMS.

    $ hadoop key create path2_key path2_key has been successfully created with options Options{cipher='AES/CTR/NoPadding', bitLength=256, description='null', attributes=null}. KMSClientProvider[http://ip-x-x-x-x.ec2.internal:16000/kms/v1/] has been updated.
    Wichtig

    Die Schlüsselnamen müssen im Hadoop-KMS in Kleinbuchstaben geschrieben werden. Wenn Sie einen Schlüssel mit Großbuchstaben verwenden, wird der Start Ihres Clusters fehlschlagen.

  4. Erstellen des Verschlüsselungszonenpfads in HDFS.

    $ hadoop fs -mkdir /myHDFSPath2
  5. Machen Sie den HDFS-Pfad mit dem von Ihnen erstellten Schlüssel zu einer Verschlüsselungszone.

    $ hdfs crypto -createZone -keyName path2_key -path /myHDFSPath2 Added encryption zone /myHDFSPath2
Um Verschlüsselungszonen und ihre Schlüssel manuell zu erstellen, verwenden Sie AWS CLI
  • Fügen Sie manuell Schritte zum Erstellen der KMS-Schlüssel und Verschlüsselungszonen mithilfe des folgenden Befehls hinzu.

    aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=CUSTOM_JAR,Name="Create First Hadoop KMS Key",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop key create path1_key\""] \ Type=CUSTOM_JAR,Name="Create First Hadoop HDFS Path",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop fs -mkdir /myHDFSPath1\""] \ Type=CUSTOM_JAR,Name="Create First Encryption Zone",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hdfs crypto -createZone -keyName path1_key -path /myHDFSPath1\""] \ Type=CUSTOM_JAR,Name="Create Second Hadoop KMS Key",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop key create path2_key\""] \ Type=CUSTOM_JAR,Name="Create Second Hadoop HDFS Path",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hadoop fs -mkdir /myHDFSPath2\""] \ Type=CUSTOM_JAR,Name="Create Second Encryption Zone",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[/bin/bash,-c,"\"hdfs crypto -createZone -keyName path2_key -path /myHDFSPath2\""]
    Anmerkung

    Linux-Zeilenfortsetzungszeichen (\) sind aus Gründen der Lesbarkeit enthalten. Sie können entfernt oder in Linux-Befehlen verwendet werden. Entfernen Sie sie unter Windows oder ersetzen Sie sie durch ein Caret-Zeichen (^).

Überlegungen zur transparenten HDFS-Verschlüsselung

Eine bewährte Methode ist das Erstellen einer Verschlüsselungszone für jede Anwendung, in der möglicherweise Dateien geschrieben werden. Sie können auch das gesamte HDFS verschlüsseln, indem Sie die hdfs-encryption-zones Klassifizierung in der Konfigurations-API verwenden und den Stammpfad (/) als Verschlüsselungszone angeben.

Hadoop-Schlüsselverwaltungsserver (KMS)

Hadoop ist ein Schlüsselverwaltungsserver, der die Möglichkeit zur Implementierung kryptografischer Services für Hadoop-Cluster bietet und als wichtiger Anbieter von Transparente Verschlüsselung in HDFS auf Amazon EMR dient. Hadoop-KMS in Amazon EMR wird standardmäßig installiert und aktiviert, wenn Sie die Hadoop-Anwendung während des Starts eines EMR-Clusters auswählen. Hadoop KMS speichert die Schlüssel nicht selbst, mit Ausnahme des temporären Cachings. Hadoop-KMS fungiert als Proxy zwischen dem Schlüsselanbieter und dem Client-Verwalter als Unterstützungsschlüsselspeicher – es ist jedoch kein Schlüsselspeicher. Der Standard-Keystore, der für Hadoop KMS erstellt wird, ist die Java Cryptography Extension (JCEKS). KeyStore Auch die JCE Unlimited Strength Policy ist inbegriffen, sodass Sie Schlüssel in der gewünschten Länge erstellen können. Hadoop-KMS unterstützt auch eine Reihe von ACLs, die den Zugriff auf Schlüssel und Schlüsselvorgänge unabhängig von anderen Client-Anwendungen wie beispielsweise HDFS kontrollieren. Die standardmäßige Schlüssellänge in Amazon EMR beträgt 256 Bit.

Verwenden Sie zur Konfiguration von Hadoop KMS die Klassifizierung, um Einstellungen zu ändern. hadoop-kms-site Verwenden Sie die classification kms-acls, um ACLs zu konfigurieren.

Weitere Informationen finden Sie in der Hadoop-KMS-Dokumentation. Hadoop KMS wird für die transparente HDFS-Verschlüsselung verwendet. Weitere Informationen über die transparente HDFS-Verschlüsselung finden Sie im Abschnitt Transparente HDFS-Verschlüsselung in der Apache-Hadoop-Dokumentation.

Anmerkung

In Amazon EMR ist KMS über HTTPS nicht standardmäßig im Hadoop-KMS aktiviert. Informationen zum Aktivieren von KMS über HTTPS finden Sie in der Hadoop-KMS-Dokumentation.

Wichtig

Die Schlüsselnamen müssen im Hadoop-KMS in Kleinbuchstaben geschrieben werden. Wenn Sie einen Schlüssel mit Großbuchstaben verwenden, wird der Start Ihres Clusters fehlschlagen.

Konfigurieren von Hadoop KMS in Amazon EMR

Mit Amazon-EMR-Version 4.6.0 oder höher lautet kms-http-port 9700 und kms-admin-port 9701.

Sie können die Hadoop-KMS während der Cluster-Erstellung konfigurieren. Verwenden Sie dazu die Konfigurations-API für Amazon-EMR-Versionen. Nachstehend finden Sie die Konfigurationsobjektklassifizierungen, die für Hadoop-KMS zur Verfügung stehen:

Konfigurationsklassifizierungen für Hadoop-KMS
Klassifizierung Dateiname
hadoop-kms-site kms-site.xml
hadoop-kms-acls kms-acls.xml
hadoop-kms-env kms-env.sh
hadoop-kms-log4j kms-log4j.properties
Einrichten der Hadoop-KMS-ACLs mithilfe von CLI
  • Verwenden Sie den folgenden Befehl, um einen Cluster mithilfe des Hadoop KMS mit ACLs zu erstellen:

    aws emr create-cluster --release-label emr-7.1.0 --instance-type m5.xlarge --instance-count 2 \ --applications Name=App1 Name=App2 --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json
    Anmerkung

    Linux-Zeilenfortsetzungszeichen (\) sind aus Gründen der Lesbarkeit enthalten. Sie können entfernt oder in Linux-Befehlen verwendet werden. Entfernen Sie sie unter Windows oder ersetzen Sie sie durch ein Caret-Zeichen (^).

    myConfig.json:

    [ { "Classification": "hadoop-kms-acls", "Properties": { "hadoop.kms.blacklist.CREATE": "hdfs,foo,myBannedUser", "hadoop.kms.acl.ROLLOVER": "myAllowedUser" } } ]
Deaktivieren des Hadoop-KMS-Cache mithilfe der CLI
  • Verwenden Sie den folgenden Befehl, um einen Cluster mit Hadoop-KMS zu erstellen, wobei hadoop.kms.cache.enable auf false festgelegt ist:

    aws emr create-cluster --release-label emr-7.1.0 --instance-type m5.xlarge --instance-count 2 \ --applications Name=App1 Name=App2 --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json
    Anmerkung

    Linux-Zeilenfortsetzungszeichen (\) sind aus Gründen der Lesbarkeit enthalten. Sie können entfernt oder in Linux-Befehlen verwendet werden. Entfernen Sie sie unter Windows oder ersetzen Sie sie durch ein Caret-Zeichen (^).

    myConfig.json:

    [ { "Classification": "hadoop-kms-site", "Properties": { "hadoop.kms.cache.enable": "false" } } ]
Einrichten der Umgebungsvariablen im Skript kms-env.sh mit CLI
  • Ändern der Einstellungen in kms-env.sh über die hadoop-kms-env-Konfiguration. Verwenden Sie den folgenden Befehl, um einen Cluster mit Hadoop-KMS zu erstellen:

    aws emr create-cluster --release-label emr-7.1.0 --instance-type m5.xlarge --instance-count 2 \ --applications Name=App1 Name=App2 --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json
    Anmerkung

    Linux-Zeilenfortsetzungszeichen (\) sind aus Gründen der Lesbarkeit enthalten. Sie können entfernt oder in Linux-Befehlen verwendet werden. Entfernen Sie sie unter Windows oder ersetzen Sie sie durch ein Caret-Zeichen (^).

    myConfig.json:

    [ { "Classification": "hadoop-kms-env", "Properties": { }, "Configurations": [ { "Classification": "export", "Properties": { "JAVA_LIBRARY_PATH": "/path/to/files", "KMS_SSL_KEYSTORE_FILE": "/non/Default/Path/.keystore", "KMS_SSL_KEYSTORE_PASS": "myPass" }, "Configurations": [ ] } ] } ]

Weitere Informationen zur Konfiguration von Hadoop-KMS finden Sie in der Hadoop-KMS-Dokumentation.

Transparente HDFS-Verschlüsselung auf EMR-Clustern mit mehreren Hauptknoten

Apache Ranger KMS wird in einem Amazon-EMR-Cluster mit mehreren Primärknoten für transparente Verschlüsselung in HDFS verwendet.

Apache Ranger KMS speichert seinen Root-Schlüssel und seine Encryption Zone (EZ)-Schlüssel in Ihrem Amazon RDS für einen Amazon-EMR-Cluster mit mehreren Primärknoten. Um die transparente Verschlüsselung in HDFS auf einem Amazon-EMR-Cluster mit mehreren Primärknoten zu aktivieren, müssen Sie die folgenden Konfigurationen bereitstellen.

  • Amazon RDS oder Ihre eigene MySQL-Server-Verbindungs-URL zum Speichern des Ranger-KMS-Root-Schlüssels und des EZ-Schlüssels

  • Benutzername und Passwort für MySQL

  • Passwort für den Ranger-KMS-Root-Schlüssel

  • Certificate Authority (CA) PEM-Datei für SSL-Verbindung mit MySQL-Server

Sie können diese Konfigurationen mithilfe der ranger-kms-dbks-site-Klassifizierung und der ranger-kms-db-ca-Klassifizierung bereitstellen, wie im folgenden Beispiel veranschaulicht.

[ { "Classification": "ranger-kms-dbks-site", "Properties": { "ranger.ks.jpa.jdbc.url": "jdbc:log4jdbc:mysql://mysql-host-url.xx-xxx-1.xxx.amazonaws.com:3306/rangerkms", "ranger.ks.jpa.jdbc.user": "mysql-user-name", "ranger.ks.jpa.jdbc.password": "mysql-password", "ranger.db.encrypt.key.password": "password-for-encrypting-a-master-key" } }, { "Classification": "ranger-kms-db-ca", "Properties": { "ranger.kms.trust.ca.file.s3.url": "s3://rds-downloads/rds-ca-2019-root.pem" } } ]

Nachfolgend finden Sie Konfigurationsobjektklassifizierungen für Apache Ranger KMS.

Konfigurationsklassifizierungen für Hadoop-KMS
Klassifizierung Beschreibung
ranger-kms-dbks-site Ändert die Werte in der dbks-site.xml-Datei von Ranger KMS.
ranger-kms-site Ändern Sie die Werte in der ranger-kms-site XML-Datei von Ranger KMS.
ranger-kms-env Ändert die Werte in der Ranger KMS-Umgebung.
ranger-kms-log4j Ändert die Werte in der kms-log4j.properties-Datei von Ranger KMS.
ranger-kms-db-ca Ändert die Werte für die CA-Datei auf S3 für die MySQL SSL-Verbindung mit Ranger KMS.

Überlegungen

  • Es wird dringend empfohlen, Ihre Amazon-RDS-Instance zu verschlüsseln, um die Sicherheit zu verbessern. Weitere Informationen finden Sie unter Übersicht über die Verschlüsselung von Amazon-RDS-Ressourcen.

  • Es wird dringend empfohlen, für jeden Amazon-EMR-Cluster eine separate MySQL-Datenbank mit mehreren Primärknoten zu verwenden, um eine hohe Sicherheit zu gewährleisten.

  • Um transparente Verschlüsselung in HDFS auf einem Amazon-EMR-Cluster mit mehreren Primärknoten zu konfigurieren, müssen Sie beim Erstellen des Clusters die hdfs-encryption-zones-Klassifizierung angeben. Andernfalls wird Ranger KMS nicht konfiguriert oder gestartet. Die Neukonfiguration der hdfs-encryption-zones-Klassifizierung oder einer der Hadoop KMS-Konfigurationsklassifizierungen auf einem laufenden Cluster wird auf Amazon-EMR-Clustern mit mehreren Primärknoten nicht unterstützt.