Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Roles en tiempo de ejecución para los pasos de Amazon EMR
Un rol en tiempo de ejecución es un rol AWS Identity and Access Management (IAM) que puede especificar al enviar un trabajo o una consulta a un clúster de Amazon EMR. El trabajo o la consulta que envíe a su clúster de Amazon EMR utiliza el rol de tiempo de ejecución para acceder a AWS los recursos, como los objetos de Amazon S3. Puede especificar roles en tiempo de ejecución con Amazon EMR para los trabajos de Spark y Hive.
También puede especificar los roles en tiempo de ejecución al conectarse a los clústeres de Amazon EMR en Amazon SageMaker AI y al adjuntar un espacio de trabajo de Amazon EMR Studio a un clúster de EMR. Para obtener más información, consulte Conectarse a un clúster de Amazon EMR desde SageMaker AI Studio y. Dirige un espacio de trabajo de EMR Studio con un rol de tiempo de ejecución
Anteriormente, los clústeres de Amazon EMR ejecutaban trabajos o consultas de Amazon EMR con permisos basados en la política de IAM adjunta al perfil de instancia que utilizaba para lanzar el clúster. Esto significaba que las políticas tenían que contener la unión de todos los permisos para todos los trabajos y consultas que se ejecutaban en un clúster de Amazon EMR. Con los roles en tiempo de ejecución, ahora puede administrar el control de acceso de cada trabajo o consulta de forma individual, en lugar de compartir el perfil de instancia de Amazon EMR del clúster.
En los clústeres de Amazon EMR con funciones de tiempo de ejecución, también puede aplicar un control de acceso AWS Lake Formation basado a los trabajos y consultas de Spark, Hive y Presto en sus lagos de datos. Para obtener más información sobre cómo realizar la integración con AWS Lake Formation, consulte. Integre Amazon EMR con AWS Lake Formation
nota
Cuando especifica un rol de tiempo de ejecución para un paso de Amazon EMR, los trabajos o consultas que envíe solo pueden acceder a AWS los recursos que las políticas asociadas al rol de tiempo de ejecución permiten. Estos trabajos y consultas no pueden acceder al servicio de metadatos de instancias en las EC2 instancias del clúster ni utilizar el perfil de EC2 instancia del clúster para acceder a ningún AWS recurso.
Requisitos previos para lanzar un clúster de Amazon EMR con un rol en tiempo de ejecución
Temas
Paso 1: configurar los controles de seguridad en Amazon EMR
Usa la siguiente estructura JSON para crear una configuración de seguridad en AWS Command Line Interface (AWS CLI) y configúrala EnableApplicationScopedIAMRole
entrue
. Para obtener más información acerca de las configuraciones de seguridad, consulte Uso de configuraciones de seguridad para configurar la seguridad del clúster de Amazon EMR.
{ "AuthorizationConfiguration":{ "IAMConfiguration":{ "EnableApplicationScopedIAMRole":true } } }
Le recomendamos que habilite siempre las opciones de cifrado en tránsito en la configuración de seguridad, de modo que los datos que se transfieran a través de Internet estén cifrados y no sean texto sin formato. Puede omitir estas opciones si no quiere conectarse a clústeres de Amazon EMR con funciones de tiempo de ejecución de SageMaker Runtime Studio o EMR Studio. Para configurar el cifrado de datos, consulte Configuración del cifrado de datos.
Como alternativa, puede crear una configuración de seguridad con ajustes personalizados con la AWS Management Console
Paso 2: configurar un perfil de EC2 instancia para el clúster de Amazon EMR
Los clústeres de Amazon EMR utilizan el rol de perfil de EC2 instancia de Amazon para asumir los roles de tiempo de ejecución. Para usar roles en tiempo de ejecución con los pasos de Amazon EMR, agregue las siguientes políticas al rol de IAM que planea usar como rol de perfil de instancia. Para agregar políticas a un rol de IAM o editar una política integrada o administrada existente, consulte Adición y eliminación de permisos de identidad de IAM.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowRuntimeRoleUsage", "Effect":"Allow", "Action":[ "sts:AssumeRole", "sts:TagSession" ], "Resource":[
<runtime-role-ARN>
] } ] }
Paso 3: configurar una política de confianza
Para cada rol de IAM que vaya a utilizar como rol en tiempo de ejecución, defina la siguiente política de confianza y sustituya EMR_EC2_DefaultRole
por el rol de perfil de instancia. Para modificar la política de confianza de un rol de IAM, consulte Modificación de una política de confianza de rol.
{ "Sid":"AllowAssumeRole", "Effect":"Allow", "Principal":{ "AWS":"arn:aws:iam::
<AWS_ACCOUNT_ID>
:role/EMR_EC2_DefaultRole" }, "Action":"sts:AssumeRole" }
Lanzamiento de un clúster de Amazon EMR con un control de acceso basado en roles
Tras realizar las configuraciones, puede lanzar un clúster de Amazon EMR con la configuración de seguridad de Paso 1: configurar los controles de seguridad en Amazon EMR. Para usar las funciones de tiempo de ejecución con los pasos de Amazon EMR, utilice la etiqueta de lanzamiento emr-6.7.0
o una versión posterior y seleccione Hive, Spark o ambas como aplicación de clúster. CloudWatchAgent es compatible con los clústeres de roles en tiempo de ejecución para EMR 7.6 y versiones posteriores. Para conectarte desde SageMaker AI Studio, usa la versión emr-6.9.0
o una versión posterior y selecciona Livy, Spark, Hive o Presto como aplicación de clúster. Para obtener instrucciones sobre cómo lanzar el clúster, consulte Especificar una configuración de seguridad para un clúster de Amazon EMR.
Envío de trabajos de Spark siguiendo los pasos de Amazon EMR
A continuación, se muestra un ejemplo de cómo ejecutar el HdfsTest ejemplo incluido con Apache Spark. Esta llamada a la API solo se realiza correctamente si el rol en tiempo de ejecución de Amazon EMR proporcionado puede acceder a S3_LOCATION
.
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
nota
Le recomendamos que desactive el acceso SSH al clúster de Amazon EMR y que solo permita que la API de Amazon EMR AddJobFlowSteps
acceda al clúster.
Envío de trabajos de Hive siguiendo los pasos de Amazon EMR
En el siguiente ejemplo, se utilizan los pasos de Apache Hive con Amazon EMR para enviar un trabajo y ejecutar el archivo QUERY_FILE.hql
. Esta consulta solo se realiza correctamente si el rol en tiempo de ejecución proporcionado puede acceder a la ruta de Amazon S3 del archivo de consulta.
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
Conéctese a clústeres de Amazon EMR con funciones de tiempo de ejecución desde un bloc de notas de SageMaker AI Studio
Puede aplicar las funciones de tiempo de ejecución de Amazon EMR a las consultas que ejecute en los clústeres de Amazon EMR desde AI Studio. SageMaker Para hacerlo, siga estos pasos:
-
Siga las instrucciones de Launch Amazon SageMaker AI Studio para crear un estudio de SageMaker IA.
-
En la interfaz de usuario de SageMaker AI Studio, inicie un bloc de notas con núcleos compatibles. Por ejemplo, inicia una SparkMagic imagen con un PySpark núcleo.
-
Elija un clúster de Amazon EMR en SageMaker AI Studio y, a continuación, elija Connect.
-
Seleccione un rol en tiempo de ejecución y, a continuación, elija Conectar.
Esto creará una celda de computadora portátil de SageMaker IA con comandos mágicos para conectarse a su clúster de Amazon EMR con el rol de tiempo de ejecución de Amazon EMR elegido. En la celda del cuaderno, puede introducir y ejecutar consultas con el rol en tiempo de ejecución y el control de acceso basado en Lake Formation. Para ver un ejemplo más detallado, consulte Aplicar controles de acceso a datos detallados con AWS Lake Formation Amazon EMR de Amazon
Control del acceso al rol en tiempo de ejecución de Amazon EMR
Puede controlar el acceso al rol en tiempo de ejecución con la clave de condición elasticmapreduce:ExecutionRoleArn
. La siguiente política permite a una entidad principal de IAM utilizar un rol de IAM denominado Caller
, o cualquier rol de IAM que comience por la cadena CallerTeamRole
, como rol en tiempo de ejecución.
importante
Debe crear una condición basada en la clave de elasticmapreduce:ExecutionRoleArn
contexto cuando conceda a la persona que llama acceso para llamar al AddJobFlowSteps
o GetClusterSessionCredentials
APIs, como se muestra en el siguiente ejemplo.
{ "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*" ] } } }
Establecimiento de confianza entre los roles en tiempo de ejecución y los clústeres de Amazon EMR
Amazon EMR genera un identificador único ExternalId
para cada configuración de seguridad con la autorización del rol en tiempo de ejecución activada. Esta autorización permite a cada usuario ser propietario de un conjunto de roles en tiempo de ejecución para utilizarlos en los clústeres que les pertenecen. Por ejemplo, en una empresa, cada departamento puede usar su identificador externo para actualizar la política de confianza en su propio conjunto de roles en tiempo de ejecución.
Puede obtener el identificador externo con la API DescribeSecurityConfiguration
de Amazon EMR de Amazon, tal y como se muestra en el ejemplo siguiente.
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" }
Para obtener información sobre cómo usar un identificador externo, consulta Cómo usar un identificador externo al conceder acceso a tus AWS recursos a un tercero.
Auditoría
Para supervisar y controlar las acciones que realizan los usuarios finales con los roles de IAM, puede activar la característica de identidad de origen. Para obtener más información sobre la identidad de origen, consulte Monitoreo y control de las acciones realizadas con roles asumidos.
Para hacer un seguimiento de la identidad de origen, establezca ApplicationScopedIAMRoleConfiguration/PropagateSourceIdentity
en true
en la configuración de seguridad de la siguiente manera.
{ "AuthorizationConfiguration":{ "IAMConfiguration":{ "EnableApplicationScopedIAMRole":true, "ApplicationScopedIAMRoleConfiguration":{ "PropagateSourceIdentity":true } } } }
Cuando establece PropagateSourceIdentity
en true
, Amazon EMR aplica la identidad de origen de las credenciales de llamada a un trabajo o sesión de consulta que cree con el rol en tiempo de ejecución. Si no hay identidad de origen en las credenciales de llamada, Amazon EMR no establece la identidad de origen.
Para usar esta propiedad, proporcione permisos sts:SetSourceIdentity
a su perfil de instancia de la siguiente manera.
{ // PropagateSourceIdentity statement "Sid":"PropagateSourceIdentity", "Effect":"Allow", "Action":"sts:SetSourceIdentity", "Resource":[
<runtime-role-ARN>
], "Condition":{ "StringEquals":{ "sts:SourceIdentity":<source-identity>
} } }
También debe agregar la instrucción AllowSetSourceIdentity
a la política de confianza de sus roles en tiempo de ejecución.
{ // 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>
} } }
Consideraciones adicionales
nota
Con la versión Amazon EMRemr-6.9.0
, es posible que experimente errores intermitentes al conectarse a los clústeres de Amazon EMR desde AI Studio. SageMaker Si desea solucionar este problema, puede instalar el parche con una acción de arranque al lanzar el clúster. Para obtener más información sobre el parche, consulte Problemas conocidos de la versión 6.9.0 de Amazon EMR.
Además, tenga en cuenta lo siguiente al configurar los roles en tiempo de ejecución para Amazon EMR.
-
Amazon EMR admite roles en tiempo de ejecución en todas las Regiones de AWS comerciales.
-
Los pasos de Amazon EMR admiten los trabajos de Apache Spark y Apache Hive con roles en tiempo de ejecución cuando se utiliza la versión
emr-6.7.0
o versiones posteriores. -
SageMaker AI Studio admite consultas de Spark, Hive y Presto con funciones de tiempo de ejecución cuando utilizas una versión o una versión posterior.
emr-6.9.0
-
Los siguientes núcleos de cuadernos de SageMaker AI admiten funciones de tiempo de ejecución:
-
DataScience — Núcleo de Python 3
-
DataScience 2.0 — Núcleo de Python 3
-
DataScience 3.0 — Núcleo de Python 3
-
SparkAnalytics 1.0 — SparkMagic y PySpark núcleos
-
SparkAnalytics 2.0 — SparkMagic y núcleos PySpark
-
SparkMagic — núcleo PySpark
-
-
Amazon EMR admite pasos que utilizan
RunJobFlow
únicamente en el momento de la creación del clúster. Esta API no admite roles en tiempo de ejecución. -
Amazon EMR no admite roles en tiempo de ejecución en clústeres que usted configure para que tengan una alta disponibilidad.
A partir de la versión 7.5.0 y posteriores de Amazon EMR, los roles de tiempo de ejecución permiten ver las interfaces de usuario de Spark y YARN (UIs), como las siguientes: Spark Live UI, Spark History Server NodeManager, YARN y YARN. ResourceManager Cuando navegues hasta ellas UIs, aparecerá un mensaje de nombre de usuario y contraseña. Los nombres de usuario y las contraseñas se pueden generar mediante el uso de la API EMR. GetClusterSessionCredentials Para obtener más información sobre los detalles de uso de la API, consulte. GetClusterSessionCredentials
Un ejemplo de cómo utilizar la GetClusterSessionCredentials API EMR es el siguiente:
aws emr get-cluster-session-credentials --cluster-id
<cluster_ID>
--execution-role-arn<IAM_role_arn>
-
Debe evitar los argumentos de los comandos de Bash cuando ejecute comandos con el archivo JAR de
command-runner.jar
: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>
Además, debe evitar los argumentos de los comandos de Bash al ejecutar comandos con el ejecutor de scripts. El siguiente es un ejemplo que muestra cómo configurar las propiedades de Spark, con los caracteres de escape incluidos:
"\"--conf spark.sql.autoBroadcastJoinThreshold=-1\n--conf spark.cradle.RSv2Mode.enabled=true\""
-
Los roles en tiempo de ejecución no permiten controlar el acceso a los recursos del clúster, como HDFS y HMS.