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.
Clientseitige Verschlüsselung für Amazon S3
Mit Amazon S3 bei der clientseitigen Verschlüsselung erfolgt der Amazon-S3-Ver- und Entschlüsselungsvorgang im EMRFS-Client auf Ihrem EMR-Cluster. Objekte werden vor dem Hochladen nach Amazon S3 verschlüsselt und nach dem Herunterladen entschlüsselt. Der von Ihnen festgelegte Anbieter stellt den vom Client verwendeten Verschlüsselungsschlüssel bereit. Der Client kann die von AWS KMS (CSE-KMS) bereitgestellten Schlüssel oder eine benutzerdefinierte Java-Klasse verwenden, die den clientseitigen Root-Schlüssel () CSE-C bereitstellt. Die Verschlüsselungsspezifikationen zwischen CSE-KMS und unterscheiden sich geringfügigCSE-C, abhängig vom angegebenen Anbieter und den Metadaten des Objekts, das entschlüsselt oder verschlüsselt wird. Weitere Informationen zu diesen Unterschieden finden Sie unter Schützen von Daten durch clientseitige Verschlüsselung im Entwicklerhandbuch von Amazon Simple Storage Service.
Anmerkung
Amazon S3 CSE stellt nur sicher, dass EMRFS-Daten, die mit Amazon S3 ausgetauscht werden, verschlüsselt sind. Nicht alle Daten auf den Cluster-Instance-Volumes werden verschlüsselt. Da Hue EMRFS nicht verwendet, werden darüber hinaus Objekte, die vom Hue-S3-Dateibrowser in Amazon S3 geschrieben werden, nicht verschlüsselt.
CSE-KMS Zur Angabe von EMRFS-Daten in Amazon S3 verwenden Sie die AWS CLI
-
Geben Sie den folgenden Befehl ein und
MyKMSKeyIDersetzen Sie ihn durch die Schlüssel-ID oder ARN des zu verwendenden KMS-Schlüssels:aws emr create-cluster --release-labelemr-4.7.2 or earlier--emrfs Encryption=ClientSide,ProviderType=KMS,KMSKeyId=MyKMSKeyId
Erstellen eines benutzerdefinierten Schlüsselanbieters
Abhängig von der Art der Verschlüsselung, die Sie beim Erstellen eines benutzerdefinierten Schlüsselanbieters verwenden, muss die Anwendung auch unterschiedliche EncryptionMaterialsProvider Schnittstellen implementieren. Beide Schnittstellen sind im AWS SDK für Java, Version 1.11.0 und höher, verfügbar.
-
Verwenden Sie das com.amazonaws.services.s3.model, um die Amazon S3-Verschlüsselung zu implementieren. EncryptionMaterialsProvider Schnittstelle.
-
Verwenden Sie die Datei com.amazonaws.services.elasticmapreduce.spi.security, um die lokale Festplattenverschlüsselung zu implementieren. EncryptionMaterialsProvider Schnittstelle.
Sie können jede Strategie verwenden, um Verschlüsselungsmaterial für die Implementierung bereitzustellen. Beispielsweise könnten Sie statische Verschlüsselungsmaterialien bereitstellen oder die Integration in ein komplexeres Schlüsselverwaltungssystem vornehmen.
Wenn Sie die Amazon S3-Verschlüsselung verwenden, müssen Sie die Verschlüsselungsalgorithmen AES/GCM/NoPadding für benutzerdefinierte Verschlüsselungsmaterialien verwenden.
Wenn Sie die lokale Festplattenverschlüsselung verwenden, variiert der für benutzerdefinierte Verschlüsselungsmaterialien zu verwendende Verschlüsselungsalgorithmus je nach EMR-Version. Für Amazon EMR 7.0.0 und niedriger müssen Sie Folgendes verwenden. AES/GCM/NoPadding Für Amazon EMR 7.1.0 und höher müssen Sie AES verwenden.
Die EncryptionMaterialsProvider Klasse erhält Verschlüsselungsmaterial nach Verschlüsselungskontext. Amazon EMR aktualisiert die Verschlüsselungskontextinformationen während der Laufzeit. So wird der Aufrufer bei der Entscheidung unterstützt, welche korrekten Verschlüsselungsmaterialien zurückzugeben sind.
Beispiel Beispiel: Verwenden eines benutzerdefinierten Schlüsselanbieters für die Amazon-S3-Verschlüsselung mit EMRFS
Wenn Amazon EMR die Verschlüsselungsmaterialien aus der EncryptionMaterialsProvider Klasse abruft, um die Verschlüsselung durchzuführen, füllt EMRFS das Argument MaterialsDescription optional mit zwei Feldern auf: der Amazon S3-URI für das Objekt und dem des Clusters, die JobFlowId von der Klasse verwendet werden können, um selektiv Verschlüsselungsmaterial zurückzugeben. EncryptionMaterialsProvider
Beispielsweise kann der Anbieter unterschiedliche Schlüssel für unterschiedliche Amazon-S3-URI-Präfixe zurückgeben. Es ist die Beschreibung der zurückgegebenen Verschlüsselungsmaterialien, die schließlich mit dem Amazon-S3-Objekt gespeichert wird, und nicht der materialsDescription-Wert, der von EMRFS generiert und an den Anbieter weitergeleitet wird. Beim Entschlüsseln eines Amazon S3-Objekts wird die Beschreibung des Verschlüsselungsmaterials an die EncryptionMaterialsProvider Klasse übergeben, sodass sie erneut selektiv den passenden Schlüssel zur Entschlüsselung des Objekts zurückgeben kann.
Eine EncryptionMaterialsProvider Referenzimplementierung finden Sie unten. Ein weiterer benutzerdefinierter Anbieter EMRFSRSAEncryptionMaterialsProvider
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; } }
Angeben eines Anbieters für benutzerdefinierte Materialien mithilfe der AWS CLI
Um die AWS CLI zu verwenden, übergeben Sie die Argumente Encryption, ProviderType, CustomProviderClass und CustomProviderLocation an die Option emrfs.
aws emr create-cluster --instance-type m5.xlarge --release-labelemr-4.7.2 or earlier--emrfs Encryption=ClientSide,ProviderType=Custom,CustomProviderLocation=s3://amzn-s3-demo-bucket/myfolder/provider.jar,CustomProviderClass=classname
Das Festlegen von Encryption auf ClientSide aktiviert die clientseitige Verschlüsselung. CustomProviderClass ist der Name des EncryptionMaterialsProvider-Objekts und CustomProviderLocation ist der lokale oder Amazon-S3-Speicherort, aus dem Amazon EMR CustomProviderClass zu jedem Knoten im Cluster kopiert und in den Klassenpfad platziert.
Angabe eines benutzerdefinierten Materialanbieters unter Verwendung eines SDK
Um ein SDK zu verwenden, können Sie die Eigenschaft fs.s3.cse.encryptionMaterialsProvider.uri auf das Herunterladen der benutzerdefinierten EncryptionMaterialsProvider-Klasse festlegen, die Sie in Amazon S3 auf jedem Knoten Ihres Clusters speichern. Sie konfigurieren dies in der Datei emrfs-site.xml zusammen mit der aktivierten CSE sowie dem richtigen Speicherort des benutzerdefinierten Anbieters.
Bei der AWS SDK für Java Verwendung RunJobFlowRequest könnte Ihr Code beispielsweise wie folgt aussehen:
<snip> Map<String,String> emrfsProperties = new HashMap<String,String>(); emrfsProperties.put("fs.s3.cse.encryptionMaterialsProvider.uri","s3://amzn-s3-demo-bucket/MyCustomEncryptionMaterialsProvider.jar"); emrfsProperties.put("fs.s3.cse.enabled","true"); emrfsProperties.put("fs.s3.consistent","true"); emrfsProperties.put("fs.s3.cse.encryptionMaterialsProvider","full.class.name.of.EncryptionMaterialsProvider"); Configuration myEmrfsConfig = new Configuration() .withClassification("emrfs-site") .withProperties(emrfsProperties); RunJobFlowRequest request = new RunJobFlowRequest() .withName("Custom EncryptionMaterialsProvider") .withReleaseLabel("emr-7.13.0") .withApplications(myApp) .withConfigurations(myEmrfsConfig) .withServiceRole("EMR_DefaultRole_V2") .withJobFlowRole("EMR_EC2_DefaultRole") .withLogUri("s3://myLogUri/") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myEc2Key") .withInstanceCount(2) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m5.xlarge") .withSlaveInstanceType("m5.xlarge") ); RunJobFlowResult result = emr.runJobFlow(request); </snip>
Benutzerdefiniert EncryptionMaterialsProvider mit Argumenten
Möglicherweise müssen Sie Argumente direkt dem Anbieter übergeben. Zu diesem Zweck können Sie die emrfs-site-Konfigurationsklassifizierung mit benutzerdefinierten Argumente als Eigenschaften verwenden. Eine Beispielkonfiguration ist nachfolgend gezeigt, die als Datei gespeichert wird, myConfig.json:
[ { "Classification": "emrfs-site", "Properties": { "myProvider.arg1":"value1", "myProvider.arg2":"value2" } } ]
Mit dem create-cluster Befehl von können Sie die --configurations Option verwenden AWS CLI, um die Datei wie folgt anzugeben:
aws emr create-cluster --release-label--instance-typeemr-7.13.0m5.xlarge--instance-count2--configurations file://myConfig.json --emrfs Encryption=ClientSide,CustomProviderLocation=s3://amzn-s3-demo-bucket/myfolder/myprovider.jar,CustomProviderClass=classname
Konfiguration der EMRFS-S3EC-V2-Unterstützung
S3-Java-SDK-Versionen (1.11.837 und höher) unterstützen den Verschlüsselungsclient Version 2 (S3EC V2) mit verschiedenen Sicherheitsverbesserungen. Weitere Informationen finden Sie im S3-Blogbeitrag: Updates für den Amazon S3 Encryption Client
Der Encryption Client V1 ist aus Gründen der Abwärtskompatibilität weiterhin im SDK verfügbar. Standardmäßig verwendet EMRFS S3EC V1 zum Verschlüsseln und Entschlüsseln von S3-Objekten, wenn CSE aktiviert ist.
Mit S3EC V2 verschlüsselte S3-Objekte können nicht von EMRFS auf einem EMR-Cluster entschlüsselt werden, dessen Release-Version älter als emr-5.31.0 ist (emr-5.30.1 und früher, emr-6.1.0 und früher).
Beispiel Konfigurieren Sie EMRFS für die Verwendung von S3EC V2
Um EMRFS für die Verwendung von S3EC V2 zu konfigurieren, fügen Sie die folgende Konfiguration hinzu:
{ "Classification": "emrfs-site", "Properties": { "fs.s3.cse.encryptionV2.enabled": "true" } }
emrfs-site.xml Eigenschaften für die clientseitige Amazon S3-Verschlüsselung
| Eigenschaft | Standardwert | Description |
|---|---|---|
fs.s3.cse.enabled |
false |
Wenn dies auf |
fs.s3.cse.encryptionV2.enabled |
false |
Wenn diese Option auf |
fs.s3.cse.encryptionMaterialsProvider.uri |
N/A |
Gilt bei der Verwendung benutzerdefinierter Verschlüsselungsmaterialien. Die Amazon-S3-URI, in der sich die JAR mit dem EncryptionMaterialsProvider befindet. Wenn Sie diesen URI bereitstellen, Amazon EMR automatisch die JAR-Datei auf alle Knoten im Cluster herunter. |
fs.s3.cse.encryptionMaterialsProvider |
N/A |
Der |
fs.s3.cse.materialsDescription.enabled |
false |
Wenn auf gesetzt |
fs.s3.cse.kms.keyId |
N/A |
Gilt bei Verwendung von. CSE-KMS Der Wert von KeyId, ARN oder Alias des KMS-Schlüssels, der für die Verschlüsselung verwendet wird. |
fs.s3.cse.cryptoStorageMode |
ObjectMetadata |
Der Amazon-S3-Speichermodus. Standardmäßig wird die Beschreibung der Verschlüsselungsdaten in den Objektmetadaten gespeichert. Sie können die Beschreibung auch in einer Anweisungsdatei speichern. Gültige Werte sind ObjectMetadata undInstructionFile. Weitere Informationen finden Sie unter Client-side Datenverschlüsselung mit AWS SDK für Java und Amazon S3 |