Schritte für Laufzeit-Rollen für 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.

Schritte für Laufzeit-Rollen für Amazon EMR

Eine Runtime-Rolle ist eine AWS Identity and Access Management (IAM) -Rolle, die Sie angeben können, wenn Sie einen Job oder eine Abfrage an einen Amazon EMR-Cluster senden. Der Job oder die Abfrage, die Sie an Ihren Amazon EMR-Cluster senden, verwendet die Runtime-Rolle, um auf AWS Ressourcen wie Objekte in Amazon S3 zuzugreifen. Sie können Laufzeit-Rollen mit Amazon EMR für Spark- und Hive-Jobs angeben.

Sie können auch Laufzeit-Rollen angeben, wenn Sie eine Verbindung zu Amazon-EMR-Clustern in einem EMR-Cluster herstellen Amazon SageMaker AI und wenn Sie einen Amazon EMR Studio Workspace an einen EMR-Cluster anhängen. Weitere Informationen finden Sie unter Connect zu einem Amazon EMR-Cluster von SageMaker AI Studio herstellen undFühren Sie einen EMR Studio-Workspace mit einer Runtime-Rolle aus.

Zuvor führten Amazon-EMR-Cluster Amazon-EMR-Aufträge oder -Abfragen mit Berechtigungen aus, die auf der IAM-Richtlinie basierten, die dem Instance-Profil zugeordnet war, das Sie zum Starten des Clusters verwendet haben. Das bedeutete, dass die Richtlinien die Vereinigung aller Berechtigungen für alle Aufträge und Abfragen enthalten mussten, die auf einem Amazon-EMR-Cluster ausgeführt wurden. Mit Laufzeit-Rollen können Sie jetzt die Zugriffskontrolle für jeden Auftrag oder jede Abfrage einzeln verwalten, anstatt das Amazon-EMR-Instance-Profil des Clusters gemeinsam zu nutzen.

Auf Amazon EMR-Clustern mit Runtime-Rollen können Sie auch eine AWS Lake Formation basierte Zugriffskontrolle auf Spark-, Hive- und Presto-Jobs und Abfragen für Ihre Data Lakes anwenden. Weitere Informationen zur Integration mit AWS Lake Formation finden Sie unter. Integrieren Sie Amazon EMR mit AWS Lake Formation

Anmerkung

Wenn Sie eine Runtime-Rolle für einen Amazon EMR-Schritt angeben, können die Jobs oder Abfragen, die Sie einreichen, nur auf AWS Ressourcen zugreifen, die die mit der Runtime-Rolle verknüpften Richtlinien zulassen. Diese Jobs und Abfragen können nicht auf den Instance-Metadaten-Service auf den EC2 Instances des Clusters zugreifen oder das EC2 Instance-Profil des Clusters für den Zugriff auf AWS Ressourcen verwenden.

Voraussetzungen für den Start eines Amazon-EMR-Clusters mit einer Laufzeit-Rolle

Schritt 1: Sicherheitskonfigurationen in Amazon EMR einrichten

Verwenden Sie die folgende JSON-Struktur, um eine Sicherheitskonfiguration für AWS Command Line Interface (AWS CLI) zu erstellen, und legen Sie EnableApplicationScopedIAMRole sie auf festtrue. Weitere Informationen zu den Sicherheitskonfigurationen finden Sie unter Verwenden Sie Sicherheitskonfigurationen, um die Amazon EMR-Cluster-Sicherheit einzurichten.

{ "AuthorizationConfiguration":{ "IAMConfiguration":{ "EnableApplicationScopedIAMRole":true } } }

Wir empfehlen, in der Sicherheitskonfiguration immer die Verschlüsselungsoptionen bei der Übertragung zu aktivieren, sodass Daten, die über das Internet übertragen werden, verschlüsselt und nicht im Klartext übertragen werden. Sie können diese Optionen überspringen, wenn Sie keine Verbindung zu Amazon EMR-Clustern mit Runtime-Rollen aus SageMaker Runtime Studio oder EMR Studio herstellen möchten. Informationen zur Konfiguration der Datenverschlüsselung finden Sie unter Datenverschlüsselung konfigurieren.

Alternativ können Sie mit dem eine Sicherheitskonfiguration mit benutzerdefinierten Einstellungen mit AWS Management Console erstellen.

Schritt 2: Richten Sie ein EC2 Instance-Profil für den Amazon EMR-Cluster ein

Amazon EMR-Cluster verwenden die EC2 Amazon-Instance-Profilrolle, um die Runtime-Rollen zu übernehmen. Um Laufzeit-Rollen mit Amazon-EMR-Schritten zu verwenden, fügen Sie der IAM-Rolle, die Sie als Instance-Profilrolle verwenden möchten, die folgenden Richtlinien hinzu. Informationen zum Hinzufügen von Richtlinien zu einer IAM-Rolle oder zum Bearbeiten einer vorhandenen Inline- oder verwalteten Richtlinie finden Sie unter Hinzufügen und Entfernen von IAM-Identitätsberechtigungen.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowRuntimeRoleUsage", "Effect":"Allow", "Action":[ "sts:AssumeRole", "sts:TagSession" ], "Resource":[ <runtime-role-ARN> ] } ] }

Schritt 3: Eine Vertrauensrichtlinie einrichten

Legen Sie für jede IAM-Rolle, die Sie als Laufzeit-Rolle verwenden möchten, die folgende Vertrauensrichtlinie fest und ersetzen Sie sie EMR_EC2_DefaultRole durch Ihre Instance-Profilrolle. Informationen zum Ändern der Vertrauensrichtlinie einer IAM-Rolle finden Sie unter Vertrauensrichtlinie für Rollen ändern.

{ "Sid":"AllowAssumeRole", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS_ACCOUNT_ID>:role/EMR_EC2_DefaultRole" }, "Action":"sts:AssumeRole" }

Starten Sie einen Amazon-EMR-Cluster mit rollenbasierter Zugriffskontrolle

Nachdem Sie Ihre Konfigurationen eingerichtet haben, können Sie einen Amazon-EMR-Cluster mit der Sicherheitskonfiguration von Schritt 1: Sicherheitskonfigurationen in Amazon EMR einrichten starten. Um Runtime-Rollen mit Amazon EMR-Schritten zu verwenden, verwenden Sie Release Label emr-6.7.0 oder höher und wählen Sie Hive, Spark oder beide als Cluster-Anwendung aus. CloudWatchAgent wird auf Runtime Role Clusters für EMR 7.6 und höher unterstützt. Um von SageMaker AI Studio aus eine Verbindung herzustellen, verwenden Sie Release emr-6.9.0 oder höher und wählen Sie Livy, Spark, Hive oder Presto als Ihre Cluster-Anwendung aus. Anweisungen zum Start Ihres Clusters finden Sie unter Geben Sie eine Sicherheitskonfiguration für einen Amazon EMR-Cluster an.

Spark-Jobs mithilfe der Amazon-EMR-Schritte übermitteln

Im Folgenden finden Sie ein Beispiel für die Ausführung des in Apache Spark enthaltenen HdfsTest Beispiels. Dieser API-Aufruf ist nur erfolgreich, wenn die bereitgestellte Amazon-EMR-Laufzeitrolle auf die S3_LOCATION zugreifen kann.

RUNTIME_ROLE_ARN=<runtime-role-arn> S3_LOCATION=<s3-path> REGION=<aws-region> CLUSTER_ID=<cluster-id> aws emr add-steps --cluster-id $CLUSTER_ID \ --steps '[{ "Name": "Spark Example", "ActionOnFailure": "CONTINUE","HadoopJarStep": { "Jar":"command-runner.jar","Args" : ["spark-example","HdfsTest", "$S3_LOCATION"] } }]' \ --execution-role-arn $RUNTIME_ROLE_ARN \ --region $REGION
Anmerkung

Wir empfehlen, den SSH-Zugriff auf den Amazon-EMR-Cluster zu deaktivieren und nur der Amazon-EMR-AddJobFlowSteps-API den Zugriff auf den Cluster zu gewähren.

Hive-Jobs mithilfe der Amazon-EMR-Schritte übermitteln

Im folgenden Beispiel wird Apache Hive mit Amazon-EMR-Schritten verwendet, um einen Job zur Ausführung der QUERY_FILE.hql Datei einzureichen. Diese Abfrage ist nur erfolgreich, wenn die angegebene Laufzeit-Rolle auf den Amazon-S3-Pfad der Abfragedatei zugreifen kann.

RUNTIME_ROLE_ARN=<runtime-role-arn> REGION=<aws-region> CLUSTER_ID=<cluster-id> aws emr add-steps --cluster-id $CLUSTER_ID \ --steps '[{ "Name": "Run hive query using command-runner.jar - simple select","ActionOnFailure":"CONTINUE","HadoopJarStep": { "Jar": "command-runner.jar","Args" :["hive - f","s3://DOC_EXAMPLE_BUCKET/QUERY_FILE.hql"] } }]' \ --execution-role-arn $RUNTIME_ROLE_ARN \ --region $REGION

Stellen Sie über ein SageMaker AI Studio-Notizbuch eine Connect zu Amazon EMR-Clustern mit Runtime-Rollen her

Sie können Amazon EMR-Runtime-Rollen auf Abfragen anwenden, die Sie in Amazon EMR-Clustern von SageMaker AI Studio aus ausführen. Führen Sie dazu die folgenden Schritte aus.

  1. Folgen Sie den Anweisungen unter Amazon SageMaker AI Studio starten, um ein SageMaker AI Studio zu erstellen.

  2. Starten Sie in der SageMaker AI Studio-Benutzeroberfläche ein Notebook mit unterstützten Kerneln. Starten Sie beispielsweise ein SparkMagic Image mit einem PySpark Kernel.

  3. Wählen Sie in SageMaker AI Studio einen Amazon EMR-Cluster und dann Connect aus.

  4. Wählen Sie eine Laufzeit-Rolle und dann Verbinden aus.

Dadurch wird eine SageMaker KI-Notebookzelle mit magischen Befehlen erstellt, um eine Verbindung zu Ihrem Amazon EMR-Cluster mit der ausgewählten Amazon EMR-Laufzeitrolle herzustellen. In der Notebook-Zelle können Sie Abfragen mit Laufzeit-Rollen- und Lake-Formation-basierter Zugriffskontrolle eingeben und ausführen. Ein detaillierteres Beispiel finden Sie unter Anwenden detaillierter Datenzugriffskontrollen mit AWS Lake Formation und Amazon EMR von Amazon SageMaker AI Studio aus.

Steuern Sie den Zugriff auf die Amazon-EMR-Laufzeit-Rolle

Sie können den Zugriff auf die Laufzeit-Rolle mit dem Bedingungsschlüssel elasticmapreduce:ExecutionRoleArn steuern. Die folgende Richtlinie ermöglicht es einem IAM-Prinzipal, eine IAM-Rolle mit dem Namen Caller oder eine beliebige IAM-Rolle, die mit der Zeichenfolge CallerTeamRole beginnt, als Laufzeitrolle zu verwenden.

Wichtig

Sie müssen eine auf dem elasticmapreduce:ExecutionRoleArn Kontextschlüssel basierende Bedingung erstellen, wenn Sie einem Anrufer Zugriff zum Aufrufen von AddJobFlowSteps oder gewähren GetClusterSessionCredentials APIs, wie das folgende Beispiel zeigt.

{ "Sid":"AddStepsWithSpecificExecRoleArn", "Effect":"Allow", "Action":[ "elasticmapreduce:AddJobFlowSteps" ], "Resource":"*", "Condition":{ "StringEquals":{ "elasticmapreduce:ExecutionRoleArn":[ "arn:aws:iam::<AWS_ACCOUNT_ID>:role/Caller" ] }, "StringLike":{ "elasticmapreduce:ExecutionRoleArn":[ "arn:aws:iam::<AWS_ACCOUNT_ID>:role/CallerTeamRole*" ] } } }

Schaffen Sie Vertrauen zwischen Laufzeit-Rollen und Amazon-EMR-Clustern

Amazon EMR generiert eine eindeutige Kennung ExternalId für jede Sicherheitskonfiguration mit aktivierter Laufzeit-Rollenautorisierung. Diese Autorisierung ermöglicht es jedem Benutzer, eine Reihe von Laufzeit-Rollen zu besitzen, die er auf Clustern verwenden kann, die ihm gehören. In einem Unternehmen kann beispielsweise jede Abteilung ihre externe ID verwenden, um die Vertrauensrichtlinie für ihre eigenen Laufzeit-Rollen zu aktualisieren.

Sie können die externe ID mit der Amazon-EMR-DescribeSecurityConfiguration-API finden, wie im folgenden Beispiel gezeigt.

aws emr describe-security-configuration --name 'iamconfig-with-lf'{"Name": "iamconfig-with-lf", "SecurityConfiguration": "{\"AuthorizationConfiguration\":{\"IAMConfiguration\":{\"EnableApplicationScopedIAMRole\ ":true,\"ApplicationScopedIAMRoleConfiguration\":{\"PropagateSourceIdentity\":true,\"Exter nalId\":\"FXH5TSACFDWUCDSR3YQE2O7ETPUSM4OBCGLYWODSCUZDNZ4Y\"}},\"Lake FormationConfiguration\":{\"AuthorizedSessionTagValue\":\"Amazon EMR\"}}}", "CreationDateTime": "2022-06-03T12:52:35.308000-07:00" }

Informationen zur Verwendung einer externen ID finden Sie unter So verwenden Sie eine externe ID, wenn Sie einem Dritten Zugriff auf Ihre AWS Ressourcen gewähren.

Audit

Um die Aktionen zu überwachen und zu kontrollieren, die Endbenutzer mit IAM-Rollen ergreifen, können Sie das Quellidentitätsfeature aktivieren. Weitere Informationen zur Quellenidentität finden Sie unter Überwachen und Steuern von Aktionen mit übernommenen Rollen.

Um die Quellidentität nachzuverfolgen, stellen Sie ApplicationScopedIAMRoleConfiguration/PropagateSourceIdentity in Ihrer Sicherheitskonfiguration wie folgt auf true ein.

{ "AuthorizationConfiguration":{ "IAMConfiguration":{ "EnableApplicationScopedIAMRole":true, "ApplicationScopedIAMRoleConfiguration":{ "PropagateSourceIdentity":true } } } }

Wenn Sie PropagateSourceIdentity auf true einstellen, wendet Amazon EMR die Quellidentität aus den Anrufanmeldedaten auf einen Job oder eine Abfragesitzung an, die Sie mit der Laufzeit-Rolle erstellen. Wenn in den Anrufanmeldedaten keine Quellidentität enthalten ist, legt Amazon EMR die Quellidentität nicht fest.

Um diese Eigenschaft zu verwenden, geben Sie wie folgt sts:SetSourceIdentity-Berechtigungen für Ihr Instance-Profil ein.

{ // PropagateSourceIdentity statement "Sid":"PropagateSourceIdentity", "Effect":"Allow", "Action":"sts:SetSourceIdentity", "Resource":[ <runtime-role-ARN> ], "Condition":{ "StringEquals":{ "sts:SourceIdentity":<source-identity> } } }

Sie müssen die AllowSetSourceIdentity-Anweisung auch zur Vertrauensrichtlinie Ihrer Laufzeit-Rollen hinzufügen.

{ // AllowSetSourceIdentity statement "Sid":"AllowSetSourceIdentity", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::<AWS_ACCOUNT_ID>:role/EMR_EC2_DefaultRole" }, "Action":[ "sts:SetSourceIdentity", "sts:AssumeRole" ], "Condition":{ "StringEquals":{ "sts:SourceIdentity":<source-identity> } } }

Weitere Überlegungen

Anmerkung

Mit der Amazon EMR-Version kann es zu zeitweiligen Ausfällen kommenemr-6.9.0, wenn Sie von AI Studio aus SageMaker eine Verbindung zu Amazon EMR-Clustern herstellen. Um dieses Problem zu lösen, können Sie den Patch mit einer Bootstrap-Aktion installieren, wenn Sie den Cluster starten. Einzelheiten zum Patch finden Sie unter Bekannte Probleme in Amazon EMR Version 6.9.0.

Beachten Sie außerdem Folgendes, wenn Sie Laufzeit-Rollen für Amazon EMR konfigurieren.

  • Amazon EMR unterstützt Laufzeit-Rollen in allen kommerziellen AWS-Regionen Anwendungen.

  • Amazon-EMR-Schritte unterstützen Apache Spark- und Apache Hive-Jobs mit Laufzeit-Rollen, wenn Sie Release emr-6.7.0 oder höher verwenden.

  • SageMaker AI Studio unterstützt Spark-, Hive- und Presto-Abfragen mit Runtime-Rollen, wenn Sie Release oder höher verwenden. emr-6.9.0

  • Die folgenden Notebook-Kernel in SageMaker AI unterstützen Runtime-Rollen:

    • DataScience — Python-3-Kernel

    • DataScience 2.0 — Python-3-Kernel

    • DataScience 3.0 — Python-3-Kernel

    • SparkAnalytics 1.0 — SparkMagic und PySpark Kernel

    • SparkAnalytics 2.0 — SparkMagic und Kernel PySpark

    • SparkMagic — Kernel PySpark

  • Amazon EMR unterstützt Schritte, die RunJobFlow nur zum Zeitpunkt der Clustererstellung verwendet werden. Diese API unterstützt keine Laufzeit-Rollen.

  • Amazon EMR unterstützt keine Laufzeit-Rollen auf Clustern, die Sie so konfigurieren, dass sie hochverfügbar sind.

  • Ab Amazon EMR Version 7.5.0 und höher unterstützen Runtime-Rollen die Anzeige von Spark- und YARN-Benutzeroberflächen (UIs), wie z. B. die folgenden: Spark Live UI, Spark History Server NodeManager, YARN und YARN. ResourceManager Wenn Sie zu diesen wechseln UIs, werden Sie nach einem Benutzernamen und einem Passwort gefragt. Benutzernamen und Passwörter können mithilfe der GetClusterSessionCredentials EMR-API generiert werden. Weitere Informationen zur Nutzung der API finden Sie unter. GetClusterSessionCredentials

    Ein Beispiel für die Verwendung der GetClusterSessionCredentials EMR-API ist das Folgende:

    aws emr get-cluster-session-credentials --cluster-id <cluster_ID> --execution-role-arn <IAM_role_arn>
  • Sie müssen Ihre Bash-Befehlsargumente umgehen, wenn Sie Befehle mit der command-runner.jar JAR-Datei ausführen:

    aws emr add-steps --cluster-id <cluster-id> --steps '[{"Name":"sample-step","ActionOnFailure":"CONTINUE","Jar":"command-runner.jar","Properties":"","Args":["bash","-c","\"aws s3 ls\""],"Type":"CUSTOM_JAR"}]' --execution-role-arn <IAM_ROLE_ARN>

    Außerdem müssen Sie Ihre Bash-Befehlsargumente maskieren, wenn Sie Befehle mit dem Script-Runner ausführen. Im Folgenden finden Sie ein Beispiel, das die Einstellung von Spark-Eigenschaften mit enthaltenen Escape-Zeichen zeigt:

    "\"--conf spark.sql.autoBroadcastJoinThreshold=-1\n--conf spark.cradle.RSv2Mode.enabled=true\""
  • Laufzeit-Rollen bieten keine Unterstützung für die Steuerung des Zugriffs auf Cluster-Ressourcen wie HDFS und HMS.