Zugriff auf EMRFS-Daten in Amazon S3 genehmigen
Standardmäßig bestimmt die EMR-Rolle für EC2 die Berechtigungen für den Zugriff auf EMRFS-Daten in Amazon S3. Die IAM-Richtlinien, die dieser Rolle zugeordnet werden, gelten unabhängig von dem oder der Gruppe, die die Anforderung über EMRFS erstellen. Der Standardwert ist EMR_EC2_DefaultRole
. Weitere Informationen finden Sie unter Servicerolle für EC2-Cluster-Instances (EC2-Instance-Profil).
Ab Amazon-EMR-Version 5.10.0 können Sie mittels einer Sicherheitskonfiguration IAM-Rollen für EMRFS angeben. Auf diese Weise können Sie Berechtigungen für EMRFS-Anforderungen an Amazon S3 für Cluster mit mehreren Benutzern anpassen. Sie können verschiedene IAM-Rollen für verschiedene Benutzer und Gruppen und für verschiedene Amazon-S3-Bucket-Speicherorte angeben, basierend auf dem Präfix in Amazon S3. Wenn EMRFS eine Anforderung an Amazon S3 stellt, die mit Benutzern, Gruppen oder Standorten, die Sie angeben, übereinstimmt, verwendet der Cluster die entsprechende Rolle und nicht die EMR-Rolle für EC2. Weitere Informationen finden Sie unter Konfigurieren von IAM-Rollen für EMRFS-Anforderungen an Amazon S3.
Wenn die Anforderungen Ihrer Amazon-EMR-Lösung über die Möglichkeiten hinausgehen, die IAM-Rollen für EMRFS bereitstellen, können Sie alternativ eine benutzerdefinierte Anmeldeinformationsanbieter-Klasse definieren, mit der Sie den Zugriff auf EMRFS-Daten in Amazon S3 anpassen können.
Erstellen eines benutzerdefinierten Anmeldeinformationsanbieters für EMRFS-Daten in Amazon S3
Um einen benutzerdefinierten Anmeldeinformationsanbieter zu erstellen, implementieren Sie die Klasse AWSCredentialsProvider und die Hadoop-Klasse Configurable
Eine detaillierte Beschreibung dieses Ansatzes finden Sie unter Sicheres Analysieren von Daten aus einem anderen AWS-Konto mit EMRFS
Die grundlegenden Schritte sind wie folgt:
So definieren Sie einen benutzerdefinierten Anmeldeinformationsanbieter
Erstellen Sie eine benutzerdefinierte Anmeldeinformationsanbieter-Klasse als JAR-Datei.
Führen Sie ein Skript als Bootstrap-Aktion zum Kopieren der JAR-Datei mit dem benutzerdefinierten Anmeldeinformationsanbieter in
/usr/share/aws/emr/emrfs/auxlib
im Master-Knoten des Clusters aus. Weitere Informationen zu Bootstrap-Aktionen finden Sie unter (Optional) Erstellen von Bootstrap-Aktionen zum Installieren zusätzlicher Software.-
Passen Sie die
emrfs-site
-Klassifizierung an, um die in der JAR-Datei implementierte Klasse anzugeben. Weitere Informationen zur Angabe von Konfigurationsobjekten für die Anpassung von Anwendungen finden Sie unter Konfigurieren von Anwendungen im Amazon-EMR-Versionshandbuch.Das folgende Beispiel zeigt einen
create-cluster
-Befehl, der einen Hive-Cluster mit üblichen Konfigurationsparametern startet und außerdem Folgendes umfasst:Eine Bootstrap-Aktion, die das Skript
ausführt, das incopy_jar_file.sh
in Amazon S3 gespeichert wird.mybucket
Eine
emrfs-site
-Klassifizierung, in der ein in der JAR-Datei als benutzerdefinierter Anmeldeinformationsanbieter als
definiert wird.MyCustomCredentialsProvider
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 (^).
aws emr create-cluster --applications Name=Hive \ --bootstrap-actions '[{"Path":"
s3://mybucket/copy_jar_file.sh
","Name":"Custom action"}]' \ --ec2-attributes '{"KeyName":"MyKeyPair
","InstanceProfile":"EMR_EC2_DefaultRole",\ "SubnetId":"subnet-xxxxxxxx","EmrManagedSlaveSecurityGroup":"sg-xxxxxxxx",\ "EmrManagedMasterSecurityGroup":"sg-xxxxxxxx"}' \ --service-role EMR_DefaultRole_V2 --enable-debugging --release-labelemr-5.36.1
\ --log-uri 's3n://my-emr-log-bucket
/' --name 'test-awscredentialsprovider-emrfs' \ --instance-type=m5.xlarge --instance-count 3 \ --configurations '[{"Classification":"emrfs-site",\ "Properties":{"fs.s3.customAWSCredentialsProvider":"MyAWSCredentialsProviderWithUri"},\ "Configurations":[]}]'