Configuración de roles de tiempo de ejecución de IAM para el acceso al clúster de Amazon EMR en Studio - Amazon SageMaker AI

Configuración de roles de tiempo de ejecución de IAM para el acceso al clúster de Amazon EMR en Studio

Cuando se conecta a un clúster de Amazon EMR desde sus cuadernos de Studio o Studio Classic, puede examinar visualmente una lista de roles de IAM, conocidos como roles de tiempo de ejecución, y seleccionar uno sobre la marcha. Posteriormente, todos sus trabajos de Apache Spark, Apache Hive o Presto creados desde su cuaderno accederán únicamente a los datos y recursos permitidos por las políticas asociadas al rol de tiempo de ejecución. Además, cuando se accede a los datos desde lagos de datos administrados con AWS Lake Formation, puede aplicar el acceso de tabla y columna mediante políticas asociadas al rol de tiempo de ejecución.

Con esta capacidad, usted y sus compañeros de equipo pueden conectarse al mismo clúster, cada uno con un rol de tiempo de ejecución limitado con permisos que se ajusten a su nivel individual de acceso a los datos. Sus sesiones también están aisladas unas de otras en el clúster compartido.

Para probar esta característica con Studio Classic, consulte Apply fine-grained data access controls with AWS Lake Formation and Amazon EMR from Amazon SageMaker Studio Classic. Esta publicación del blog le ayuda a configurar un entorno de demostración en el que puede intentar utilizar roles de tiempo de ejecución preconfigurados para conectarse a los clústeres de Amazon EMR.

Requisitos previos

Antes de comenzar, asegúrese de que cumplir los siguientes requisitos previos:

Escenarios de conexión entre cuentas

La autenticación de roles en tiempo de ejecución admite diversos escenarios de conexión entre cuentas cuando los datos residen fuera de la cuenta de Studio. En la siguiente imagen, se muestran tres formas diferentes de asignar el clúster, los datos e incluso el rol de ejecución en tiempo de ejecución de Amazon EMR entre sus cuentas de Studio y de datos:

Escenarios entre cuentas que admite la autenticación de roles de IAM en tiempo de ejecución.

En la opción 1, el clúster de Amazon EMR y el rol de ejecución en tiempo de ejecución de Amazon EMR se encuentran en una cuenta de datos diferente de la cuenta de Studio. Debe definir una política de permisos de rol de acceso a Amazon EMR diferente (también denominada Assumable role) que concede permiso a el rol de ejecución de Studio o Studio Classic para que asuma el rol de acceso a Amazon EMR. A continuación, el rol de acceso a Amazon EMR llama a la API de Amazon EMR GetClusterSessionCredentials en nombre de su rol de ejecución de Studio o Studio Classic, lo que le da acceso al clúster.

En la opción 2, el clúster de Amazon EMR y el rol de ejecución en tiempo de ejecución de Amazon EMR se encuentran en su cuenta de Studio. Su rol de ejecución de Studio tiene permiso para usar la API de Amazon EMR GetClusterSessionCredentials para acceder a su clúster. Para acceder al bucket de Amazon S3, conceda al rol de ejecución en tiempo de ejecución de Amazon EMR permisos de acceso de varias cuentas al bucket de Amazon S3; usted concede estos permisos dentro de su política de buckets de Amazon S3.

En la opción 3, sus clústeres de Amazon EMR están en su cuenta de Studio y el rol de ejecución en tiempo de ejecución de Amazon EMR está en la cuenta de datos. Su rol de ejecución de Studio o Studio Classic tiene permiso para usar la API de Amazon EMR GetClusterSessionCredentials para acceder a su clúster. Añada el rol de ejecución en tiempo de ejecución de Amazon EMR al JSON de configuración del rol de ejecución. Luego, puede seleccionar el rol en la interfaz de usuario al elegir su clúster. Para obtener más información sobre cómo configurar el archivo JSON de configuración del rol de ejecución, consulte Carga previa de sus roles de ejecución en Studio o Studio Classic.

Configuración de Studio para usar roles de IAM en tiempo de ejecución

Para establecer la autenticación de roles en tiempo de ejecución para sus clústeres de Amazon EMR, configure las políticas de IAM, la red y las mejoras de usabilidad necesarias. Su configuración depende de si gestiona acuerdos entre cuentas si sus clústeres de Amazon EMR, el rol de ejecución en tiempo de ejecución de Amazon EMR o ambos residen fuera de su cuenta de Studio. En la siguiente sección, verá las políticas que debe instalar, cómo configurar la red para permitir el tráfico entre cuentas y el archivo de configuración local que debe configurar para automatizar la conexión a Amazon EMR.

Configuración de la autenticación de roles en tiempo de ejecución cuando el clúster de Amazon EMR y Studio están en la misma cuenta

Si su clúster de Amazon EMR reside en su cuenta de Studio, realice los siguientes pasos para añadir los permisos necesarios a la política de ejecución de Studio:

  1. Añada la política de IAM necesaria para conectarse a los clústeres de Amazon EMR. Para obtener más información, consulte Configuración de la lista de clústeres de Amazon EMR.

  2. Conceda permiso para llamar a la API de Amazon EMR GetClusterSessionCredentials cuando pase uno o más roles de ejecución en tiempo de ejecución de Amazon EMR permitidos especificados en la política.

  3. (Opcional) Conceda permiso para transferir roles de IAM que sigan cualquier convención de nomenclatura definida por el usuario.

  4. (Opcional) Conceda permiso para acceder a los clústeres de Amazon EMR etiquetados con cadenas específicas definidas por el usuario.

  5. Cargue previamente sus roles de IAM para poder seleccionar el rol que desee utilizar cuando se conecte a su clúster de Amazon EMR. Para obtener más información acerca de cómo precargar los roles de IAM, consulte Carga previa de sus roles de ejecución en Studio o Studio Classic.

El siguiente ejemplo de política permite a los roles de ejecución en tiempo de ejecución de Amazon EMR que pertenecen a los grupos de modelado y entrenamiento llamar a GetClusterSessionCredentials. Además, el titular de la política puede acceder a los clústeres de Amazon EMR etiquetados con las cadenas modeling o training.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "elasticmapreduce:GetClusterSessionCredentials", "Resource": "*", "Condition": { "ArnLike": { "elasticmapreduce:ExecutionRoleArn": [ "arn:aws:iam::111122223333:role/emr-execution-role-ml-modeling*", "arn:aws:iam::111122223333:role/emr-execution-role-ml-training*" ]}, "StringLike":{ "elasticmapreduce:ResourceTag/group": [ "*modeling*", "*training*" ] } } } ] }

Configuración de la autenticación de roles en tiempo de ejecución cuando el clúster y Studio están en cuentas diferentes

Si su clúster de Amazon EMR no está en su cuenta de Studio, permita que su rol de ejecución de SageMaker AI asuma el rol de acceso a varias cuentas a Amazon EMR para que pueda conectarse al clúster. Siga estos pasos para realizar su configuración de varias cuentas:

  1. Cree la política de permisos del rol de ejecución de SageMaker AI para que el rol de ejecución pueda asumir el rol de acceso a Amazon EMR. A continuación, se muestra un ejemplo de política:

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAssumeCrossAccountEMRAccessRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111122223333:role/emr-access-role-name" } ] }
  2. Cree la política de confianza para especificar qué ID de cuenta de Studio son de confianza para asumir el rol de acceso a Amazon EMR. A continuación, se muestra un ejemplo de política:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountSageMakerExecutionRoleToAssumeThisRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::studio_account_id:role/studio_execution_role" }, "Action": "sts:AssumeRole" } }
  3. Cree la política de permisos del rol de acceso de Amazon EMR, que conceda al rol de ejecución en tiempo de ejecución de Amazon EMR los permisos necesarios para llevar a cabo las tareas previstas en el clúster. Configure la rol de acceso a Amazon EMR para llamar a la API GetClusterSessionCredentials con los roles de ejecución en tiempo de ejecución de Amazon EMR especificados en la política de permisos del rol de acceso. A continuación, se muestra un ejemplo de política:

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCallingEmrGetClusterSessionCredentialsAPI", "Effect": "Allow", "Action": "elasticmapreduce:GetClusterSessionCredentials", "Resource": "arn:aws:elasticmapreduce:us-east-1:111122223333:cluster/cluster-id", "Condition": { "StringLike": { "elasticmapreduce:ExecutionRoleArn": [ "arn:aws:iam::111122223333:role/emr-execution-role-name" ] } } } ] }
  4. Configure la red de varias cuentas para que el tráfico pueda fluir entre sus cuentas. Para obtener instrucciones, consulte Configuración de acceso a la red para su clúster de Amazon EMRSet up the . Los pasos de esta sección le ayudarán a completar las siguientes tareas:

    1. Empareje mediante VPC su cuenta de Studio y su cuenta de Amazon EMR para establecer una conexión.

    2. Añada manualmente rutas a las tablas de enrutamiento de las subredes privadas en ambas cuentas. Esto permite crear y conectar clústeres de Amazon EMR desde la cuenta de Studio a la subred privada de la cuenta remota.

    3. Configure el grupo de seguridad asociado a su dominio de Studio para permitir el tráfico saliente y el grupo de seguridad del nodo principal de Amazon EMR para permitir el tráfico de TCP entrante desde el grupo de seguridad de la instancia de Studio.

  5. Cargue previamente sus roles de tiempo de ejecución de IAM para poder seleccionar el rol que desee utilizar cuando se conecte a su clúster de Amazon EMR. Para obtener más información acerca de cómo precargar los roles de IAM, consulte Carga previa de sus roles de ejecución en Studio o Studio Classic.

Configuración del acceso a Lake Formation

Al acceder a los datos de los lagos de datos administrados por AWS Lake Formation, puede aplicar el acceso de tabla y columna mediante políticas asociadas a su rol de tiempo de ejecución. Para configurar el permiso de acceso a Lake Formation, consulte Integración de Amazon EMR con AWS Lake Formation.

Carga previa de sus roles de ejecución en Studio o Studio Classic

Puede cargar previamente sus roles de tiempo de ejecución de IAM para poder seleccionar el rol que desee utilizar cuando se conecte a su clúster de Amazon EMR. Los usuarios de JupyterLab en Studio pueden usar la consola de SageMaker AI o el script proporcionado.

Preload runtime roles in JupyterLab using the SageMaker AI console

Para asociar sus roles de tiempo de ejecución a su perfil de usuario o dominio mediante la consola de SageMaker AI:

  1. Vaya a la consola de SageMaker AI en https://console.aws.amazon.com/sagemaker/.

  2. En el panel de navegación izquierdo, seleccione dominio y luego seleccione el dominio utilizando el rol de ejecución de SageMaker AI cuyos permisos ha actualizado.

    • Para añadir sus roles de tiempo de ejecución (y roles de acceso para un caso de uso de varias cuentas) a su dominio: en la pestaña Configuraciones de aplicaciones de la página de Detalles del dominio, vaya a la sección JupyterLab.

    • Para añadir sus roles de tiempo de ejecución (y roles de acceso para un caso de uso de varias cuentas) a su perfil de usuario: en la página Detalles del dominio, elija la pestaña Perfiles de usuario y seleccione el perfil de usuario mediante el rol de ejecución de SageMaker AI cuyos permisos ha actualizado. En la pestaña Configuraciones de aplicaciones, vaya a la sección JupyterLab.

  3. Elija Editar y añada los ARN de su rol de acceso (rol asumible) y los roles de ejecución en tiempo de ejecución de EMR sin servidor.

  4. Elija Enviar.

La próxima vez que se conecte a un servidor de Amazon EMR, los roles de tiempo de ejecución deberían aparecer en un menú desplegable para poder seleccionarlos.

Preload runtime roles in JupyterLab using a Python script

En una aplicación de JupyterLab iniciada desde un espacio con el rol de ejecución de SageMaker AI cuyos permisos ha actualizado, ejecute el siguiente comando en un terminal. Sustituya domainID, user-profile-name, emr-accountID y EMRServiceRole por sus valores adecuados. Este fragmento de código actualiza la configuración de un perfil de usuario (client.update_user_profile) dentro de un dominio de SageMaker AI en un caso de uso de varias cuentas. Concretamente, establece los roles de servicio de Amazon EMR. También permite que la aplicación de JupyterLab asuma un rol de IAM determinado (AssumableRole o AccessRole) para ejecutar Amazon EMR dentro de la cuenta de Amazon EMR.

Como alternativa, utilice client.update_domain para actualizar la configuración del dominio si su espacio utiliza un rol de ejecución establecido en el dominio.

import botocore.session import json sess = botocore.session.get_session() client = sess.create_client('sagemaker') client.update_user_profile( DomainId="domainID", UserProfileName="user-profile-name", UserSettings={ 'JupyterLabAppSettings': { 'EmrSettings': { 'AssumableRoleArns': ["arn:aws:iam::emr-accountID:role/AssumableRole"], 'ExecutionRoleArns': ["arn:aws:iam::emr-accountID:role/EMRServiceRole", "arn:aws:iam::emr-accountID:role/AnotherServiceRole"] } } }) resp = client.describe_user_profile(DomainId="domainID", UserProfileName=user-profile-name") resp['CreationTime'] = str(resp['CreationTime']) resp['LastModifiedTime'] = str(resp['LastModifiedTime']) print(json.dumps(resp, indent=2))
Preload runtime roles in Studio Classic

Proporcione el ARN de AccessRole (AssumableRole) a su rol de ejecución de SageMaker AI. El servidor de Jupyter carga el ARN al inicializarse. El rol de ejecución de Studio asume ese rol de varias cuentas para detectar y conectarse a los clústeres de Amazon EMR en la cuenta de confianza.

Puede especificar esta información mediante scripts de configuración del ciclo de vida (LCC). Puede asociar la LCC a su dominio o a un perfil de usuario específico. El script LCC que utilice debe ser una configuración de JupyterServer. Para obtener más información sobre cómo crear un script de LCC, consulte Use Lifecycle Configurations with Studio Classic.

A continuación se muestra un ejemplo de script. Para modificar el script, sustituya AssumableRole y emr-account por sus valores correspondientes. El número de cuentas cruzadas está limitado a cinco.

El siguiente fragmento es un script bash de LCC de ejemplo que puede utilizar si la aplicación de Studio Classic y el clúster están en la misma cuenta:

#!/bin/bash set -eux FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE" FILE_NAME="emr-configurations-DO_NOT_DELETE.json" FILE="$FILE_DIRECTORY/$FILE_NAME" mkdir -p $FILE_DIRECTORY cat << 'EOF' > "$FILE" { "emr-execution-role-arns": { "123456789012": [ "arn:aws:iam::123456789012:role/emr-execution-role-1", "arn:aws:iam::123456789012:role/emr-execution-role-2" ] } } EOF

Si la aplicación de Studio Classic y los clústeres están en cuentas diferentes, especifique los roles de acceso de Amazon EMR que puede usar el clúster. En el siguiente ejemplo de política, 123456789012 es el ID de cuenta del clúster de Amazon EMR y 212121212121 y 434343434343 son los ARN de los roles de acceso a Amazon EMR permitidos.

#!/bin/bash set -eux FILE_DIRECTORY="/home/sagemaker-user/.sagemaker-analytics-configuration-DO_NOT_DELETE" FILE_NAME="emr-configurations-DO_NOT_DELETE.json" FILE="$FILE_DIRECTORY/$FILE_NAME" mkdir -p $FILE_DIRECTORY cat << 'EOF' > "$FILE" { "emr-execution-role-arns": { "123456789012": [ "arn:aws:iam::212121212121:role/emr-execution-role-1", "arn:aws:iam::434343434343:role/emr-execution-role-2" ] } } EOF # add your cross-account EMR access role FILE_DIRECTORY="/home/sagemaker-user/.cross-account-configuration-DO_NOT_DELETE" FILE_NAME="emr-discovery-iam-role-arns-DO_NOT_DELETE.json" FILE="$FILE_DIRECTORY/$FILE_NAME" mkdir -p $FILE_DIRECTORY cat << 'EOF' > "$FILE" { "123456789012": "arn:aws:iam::123456789012:role/cross-account-emr-access-role" } EOF