Roles en tiempo de ejecución para los pasos de Amazon EMR
Un rol en tiempo de ejecución es un rol de 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 en tiempo de ejecución para acceder a los recursos de AWS, 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 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 Studio y Ejecutar 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 roles en tiempo de ejecución, también puede aplicar un control de acceso basado en AWS Lake Formation 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 conAWS Lake Formation, consulte Integración de Amazon EMR con AWS Lake Formation.
nota
Cuando especifica un rol en tiempo de ejecución para un paso de Amazon EMR, los trabajos o consultas que envíe solo pueden acceder a los recursos de AWS que las políticas asociadas al rol en tiempo de ejecución permitan. Estos trabajos y consultas no pueden acceder al servicio de metadatos de instancias en las instancias de EC2 del clúster ni utilizar el perfil de instancia de EC2 del clúster para acceder a ningún recurso de AWS.
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
Utilice la siguiente estructura de JSON para crear una configuración de seguridad en AWS Command Line Interface (AWS CLI) y configure EnableApplicationScopedIAMRole
en true
. 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 roles 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 instancia de EC2 para el clúster de Amazon EMR
Los clústeres de Amazon EMR utilizan el rol de perfil de instancia de Amazon EC2 para asumir los roles en 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 los roles en 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. Para conectarse desde SageMaker Studio, utilice la versión emr-6.9.0
o posterior y seleccione 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
El siguiente es un ejemplo de cómo ejecutar el ejemplo de HdfsTest 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
Conexión a clústeres de Amazon EMR con roles en tiempo de ejecución desde un cuaderno de SageMaker Studio
Puede aplicar roles en tiempo de ejecución de Amazon EMR a las consultas que ejecute en los clústeres de Amazon EMR desde SageMaker Studio. Para hacerlo, siga estos pasos:
-
Siga las instrucciones de Iniciar Amazon SageMaker Studio para crear un SageMaker Studio.
-
En la interfaz de usuario de SageMaker Studio, inicie un cuaderno con kernels compatibles. Por ejemplo, inicie una imagen de SparkMagic con un kernel de PySpark.
-
Seleccione un clúster de Amazon EMR en SageMaker Studio y, a continuación, elija Conectar.
-
Seleccione un rol en tiempo de ejecución y, a continuación, elija Conectar.
Esto creará una celda de cuaderno de SageMaker con comandos mágicos para conectarse a su clúster de Amazon EMR con el rol en 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 Apply fine-grained data access controls with AWS Lake Formation and Amazon EMR from Amazon SageMaker Studio
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 contexto elasticmapreduce:ExecutionRoleArn
al conceder acceso a la persona que llama para llamar a las API GetClusterSessionCredentials
o AddJobFlowSteps
, 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 más información, consulte Cómo utilizar un ID externo al otorgar acceso a los recursos de AWS a terceros.
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 emr-6.9.0
de Amazon EMR, es posible que se produzcan errores intermitentes al conectarse a clústeres de Amazon EMR desde SageMaker Studio. 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 Studio admite consultas de Spark, Hive y Presto con roles en tiempo de ejecución cuando se utiliza la versión
emr-6.9.0
o versiones posteriores. -
Los siguientes kernels de cuaderno de SageMaker admiten roles en tiempo de ejecución:
-
DataScience: kernel de Python 3
-
DataScience 2.0: kernel de Python 3
-
DataScience 3.0: kernel de Python 3
-
SparkAnalytics 1.0: kernels de SparkMagic y PySpark
-
SparkAnalytics 2.0: kernels de SparkMagic y PySpark
-
SparkMagic: kernel de 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.
-
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>
-
Los roles en tiempo de ejecución no permiten controlar el acceso a los recursos del clúster, como HDFS y HMS.