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.
Uso de la propagación de identidades confiable con Amazon SageMaker Unified Studio
Este tutorial muestra cómo configurar una aplicación EMR sin servidor con Trusted Identity Propagation (TIP). A continuación, consulta una tabla de muestra mediante controles de acceso basados en la identidad a través de Amazon Unified Studio. SageMaker Con esta configuración, EMR Serverless ejecuta las consultas de Spark de cada usuario con su propia identidad en el centro de identidad de IAM, y Lake Formation aplica los permisos por usuario en las tablas del catálogo de datos de Glue. AWS
La sugerencia no es compatible con las cargas de trabajo interactivas de EMR Studio
Las cargas de trabajo interactivas a través de EMR Studio no admiten la propagación de identidades confiables con EMR Serverless. Utilice Amazon SageMaker Unified Studio como aplicación orientada al cliente para cargas de trabajo interactivas. TIP-enabled
Costos
En este tutorial se utilizan AWS servicios que pueden generar cargos, como EMR Serverless AWS Lake Formation AWS IAM Identity Center, Amazon Simple Storage Service y Amazon Unified Studio. SageMaker Para evitar cargos continuos, siga los pasos de limpieza que se indican al final de este tutorial. Para obtener información sobre los precios, consulta la página de precios de cada servicio.
Requisitos previos y configuración
Complete los siguientes pasos para configurar todos los recursos necesarios antes de consultar los datos con una propagación de identidad confiable.
Paso 1: configurar el centro de identidad de IAM
-
Activa el centro de identidad de IAM en tu cuenta. AWS Una instancia del IAM Identity Center solo puede existir en una región por cuenta.
importante
Anota en qué región está desplegado tu centro de identidad de IAM. Todos los recursos subsiguientes (Lake Formation, EMR Serverless, AWS Glue) deben crearse en la misma región. Por ejemplo, si su centro de identidad de IAM está en us-west-2, todos los recursos también deben estar en us-west-2.
-
Aprovisiona usuarios y grupos al IAM Identity Center, de forma manual o sincronizándolos desde un proveedor de identidad externo (como Okta o Microsoft Entra ID).
-
Anota el ARN de tu instancia de IAM Identity Center. Lo necesitarás en los pasos siguientes. Búscalo en la consola del IAM Identity Center, en Configuración.
Para buscar tu instancia mediante programación, ejecuta:
aws sso-admin list-instances --regionyour-regionEjemplo de código de salida:
{ "Instances": [ { "InstanceArn": "arn:aws:sso:::instance/ssoins-1234567890abcdef", "IdentityStoreId": "d-1234567890", "OwnerAccountId": "123456789012", "Status": "ACTIVE" } ] }
Paso 2: Configure Lake Formation con IAM Identity Center
-
Uso de la consola de Lake Formation.
-
Configure un administrador de lago de datos.
importante
Asegúrese de que el rol o usuario de IAM que está utilizando para ejecutar estos comandos esté agregado como administrador de lagos de datos en Lake Formation. De lo contrario, recibirá el error «Permisos insuficientes para formar lagos» al crear bases de datos o tablas. Para añadir tu rol de administrador:
aws lakeformation put-data-lake-settings \ --data-lake-settings '{ "DataLakeAdmins": [ {"DataLakePrincipalIdentifier": "arn:aws:iam::account-id:role/your-role"} ], "CreateDatabaseDefaultPermissions": [], "CreateTableDefaultPermissions": [], "Parameters": {"CROSS_ACCOUNT_VERSION": "3", "SET_CONTEXT": "TRUE"} }' -
Crea la integración del IAM Identity Center para Lake Formation con el ARN de la instancia que anotaste en el paso 1:
aws lakeformation create-lake-formation-identity-center-configuration \ --catalog-idaccount-id\ --instance-arn "arn:aws:sso:::instance/ssoins-instance-id" -
Cree un rol de IAM para el registro de ubicaciones de Lake Formation. No utilice la función vinculada al servicio para propagar identidades de forma fiable. Para obtener más información, consulte Configuración de AWS Lake Formation con IAM Identity Center.
Política de confianza:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lakeformation.amazonaws.com" }, "Action": [ "sts:AssumeRole", "sts:SetContext" ] } ] }sts: SetContext es obligatorio
La política de confianza debe incluir
sts:SetContextlo que se requiere para la propagación de identidades confiables. La función de IAM creada por el asistente predeterminado es una función vinculada a un servicio y no incluye.sts:SetContextSi ya ha registrado una ubicación con la función vinculada a un servicio, debe volver a registrarla con una función personalizada que incluya.sts:SetContextPolítica de permisos (otorga acceso a la ubicación de datos de Amazon S3):
{ "Version": "2012-10-17", "Statement": [ { "Sid": "LakeFormationDataAccessPermissionsForS3", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::your-data-bucket/*" ] }, { "Sid": "LakeFormationDataAccessPermissionsForS3ListBucket", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::your-data-bucket" ] } ] }Cree el rol y adjunte la política:
aws iam create-role \ --role-name LFLocationRegistrationRole \ --assume-role-policy-document file://lf-trust-policy.json \ --description "Lake Formation location registration role with sts:SetContext for TIP" aws iam put-role-policy \ --role-name LFLocationRegistrationRole \ --policy-name LFDataAccessPolicy \ --policy-document file://lf-permissions-policy.json -
Registre su ubicación de datos de Amazon S3 en Lake Formation con el rol que creó:
aws lakeformation register-resource \ --resource-arn "arn:aws:s3:::your-data-bucket" \ --role-arn "arn:aws:iam::account-id:role/LFLocationRegistrationRole" -
Cree una base de datos y una tabla en el catálogo de datos de AWS Glue que apunten a sus datos de muestra.
-
Conceda permisos a los usuarios o grupos del IAM Identity Center tanto en la base de datos como en la tabla.
importante
Debe conceder DESCRIBE en la base de datos además de los términos SELECT y DESCRIBE en la tabla. Sin permisos a nivel de base de datos, la base de datos no aparecerá en los resultados de SHOW DATABASES cuando se utilice el acceso basado en la identidad.
Uso de la consola:
En la consola de Lake Formation, seleccione los permisos de Data Lake > Conceder.
En Principales, elige usuarios y grupos de IAM Identity Center y selecciona tu usuario o grupo.
En Recursos del catálogo de datos con nombre asignado, seleccione su base de datos.
En Permisos de base de datos, seleccione Describir.
Elija Conceder.
Repita los pasos del 1 al 5, esta vez seleccionando la tabla y concediendo los permisos de seleccionar y describir en la tabla.
Utilizando AWS CLI:
importante
El formato de identificador principal para los usuarios del Centro de Identidad de IAM que reciben subvenciones de Lake Formation es:
arn:aws:identitystore:::user/<UserId>. Tenga en cuenta los tres puntos (:::). No se ha especificado ninguna región ni cuenta. UserId Consíguelo en la tienda de identidades:# List users to get their UserIds aws identitystore list-users --identity-store-ididentity-store-id--regionyour-region# Grant DESCRIBE on the database aws lakeformation grant-permissions \ --principal '{"DataLakePrincipalIdentifier": "arn:aws:identitystore:::user/UserId"}' \ --permissions '["DESCRIBE"]' \ --resource '{"Database": {"DatabaseName": "tip_tutorial_db", "CatalogId": "account-id"}}' # Grant SELECT and DESCRIBE on the table aws lakeformation grant-permissions \ --principal '{"DataLakePrincipalIdentifier": "arn:aws:identitystore:::user/UserId"}' \ --permissions '["SELECT","DESCRIBE"]' \ --resource '{"Table": {"DatabaseName": "tip_tutorial_db", "Name": "employees", "CatalogId": "account-id"}}'
Paso 3: Cree la aplicación TIP-enabled EMR Serverless
Asegúrese de que su función de IAM cuente con los permisos del centro de identidad de IAM necesarios para crear la aplicación:
"sso:DescribeInstance", "sso:CreateApplication", "sso:DeleteApplication", "sso:PutApplicationAuthenticationMethod", "sso:PutApplicationAssignmentConfiguration", "sso:PutApplicationGrant", "sso:PutApplicationAccessScope"
Cree la aplicación con una propagación de identidades confiable, un punto final de Apache Livy habilitado y el catálogo de datos de AWS Glue configurado como metaalmacén:
aws emr-serverless create-application \ --release-label emr-7.8.0 \ --type "SPARK" \ --identity-center-configuration '{"identityCenterInstanceArn": "arn:aws:sso:::instance/ssoins-instance-id"}' \ --interactive-configuration '{"livyEndpointEnabled":true}' \ --runtime-configuration '[{"classification": "spark-defaults", "properties": {"spark.sql.catalogImplementation": "hive", "spark.hadoop.hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"}}]'
importante
AWS CLI requisito de versión: los --identity-center-configuration --runtime-configuration marcadores y y requieren AWS CLI la versión 2.15 o superior. --interactive-configuration Si recibes el error «Opciones desconocidas», actualiza tu boto3 de Python (v1.35+) AWS CLI o usa como alternativa:
import boto3 session = boto3.Session(profile_name='your-profile', region_name='your-region') client = session.client('emr-serverless') response = client.create_application( name='tip-tutorial-app', releaseLabel='emr-7.8.0', type='SPARK', identityCenterConfiguration={ 'identityCenterInstanceArn': 'arn:aws:sso:::instance/ssoins-instance-id' }, interactiveConfiguration={ 'livyEndpointEnabled': True }, runtimeConfiguration=[ { 'classification': 'spark-defaults', 'properties': { 'spark.sql.catalogImplementation': 'hive', 'spark.hadoop.hive.metastore.client.factory.class': 'com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory' } } ] ) print(response['applicationId'])
Configuración del metaalmacén de Glue Data Catalog
La runtimeConfiguration configuración spark.sql.catalogImplementation y la clase de fábrica del metaalmacén de AWS Glue garantizan que las sesiones de Spark puedan acceder a todos los tipos de tablas (CSV, Parquet, ORC, Iceberg) del catálogo de datos de AWS Glue. Sin esta configuración, es posible que solo estén visibles las tablas Iceberg.
El punto final de Apache Livy es necesario para TIP
La propagación de identidades confiables requiere--interactive-configuration '{"livyEndpointEnabled":true}'. La TIP solo está habilitada para el punto final de Apache Livy.
Si no tienes los permisos necesarios para el IAM Identity Center, crea la aplicación sin el --identity-center-configuration parámetro y pide al administrador del IAM Identity Center que habilite TIP más adelante mediante la API de actualización de la aplicación:
aws emr-serverless update-application \ --application-idapplication-id\ --identity-center-configuration '{"identityCenterInstanceArn": "arn:aws:sso:::instance/ssoins-instance-id"}'
Paso 4: configurar la función de ejecución del trabajo
La política de confianza del rol de ejecución del trabajo debe incluir sts:SetContext lo siguiente para que EMR Serverless pueda mejorar las credenciales con la identidad del usuario:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "emr-serverless.amazonaws.com" }, "Action": ["sts:AssumeRole", "sts:SetContext"] } ] }
Cree el rol:
aws iam create-role \ --role-name emr-serverless-tip-job-role \ --assume-role-policy-document file://trust-policy.json \ --description "EMR Serverless job execution role with TIP support"
Adjunte los permisos para los servicios posteriores a los que accederá el trabajo. El puesto necesita los permisos de Lake Formation, AWS Glue, Amazon S3 y Amazon CloudWatch Logs:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "LakeFormationAndGlueAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "glue:GetTable", "glue:GetTables", "glue:GetDatabase", "glue:GetDatabases", "glue:GetPartitions" ], "Resource": "*" }, { "Sid": "S3DataAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::your-data-bucket", "arn:aws:s3:::your-data-bucket/*" ] }, { "Sid": "CloudWatchLogsAccess", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": "arn:aws:logs:us-east-1:111122223333:*" } ] }
Además de los permisos de Lake Formation, se requieren permisos de S3
Los permisos de Amazon S3 (s3:GetObject,s3:PutObject,s3:ListBucket) de su depósito de datos son obligatorios, además de los permisos de Lake Formation y AWS Glue. El s3:PutObject permiso es necesario para borrar y mezclar datos de Spark. Sin los permisos de Amazon S3, los trabajos de Spark podrían fallar y provocar errores de acceso denegado al leer los archivos de datos subyacentes o escribir datos temporales.
CloudWatch Los permisos de registro son obligatorios
CloudWatch Los permisos de Amazon Logs son necesarios para la entrega de los registros de controladores y ejecutores de Spark. Sin ellos, es posible que las sesiones de Spark no se inicien.
Asocie la política al rol:
aws iam put-role-policy \ --role-name emr-serverless-tip-job-role \ --policy-name tip-lakeformation-access \ --policy-document file://permissions-policy.json
Otorgue permisos a Lake Formation para desempeñar la función de ejecución de tareas:
La función de ejecución del trabajo también requiere permisos de Lake Formation en la base de datos y la tabla. Esto se suma a las subvenciones otorgadas al usuario del IAM Identity Center.
# Grant DESCRIBE on the database to the job role aws lakeformation grant-permissions \ --principal '{"DataLakePrincipalIdentifier": "arn:aws:iam::account-id:role/emr-serverless-tip-job-role"}' \ --permissions '["DESCRIBE"]' \ --resource '{"Database": {"DatabaseName": "tip_tutorial_db", "CatalogId": "account-id"}}' # Grant SELECT and DESCRIBE on the table to the job role aws lakeformation grant-permissions \ --principal '{"DataLakePrincipalIdentifier": "arn:aws:iam::account-id:role/emr-serverless-tip-job-role"}' \ --permissions '["SELECT","DESCRIBE"]' \ --resource '{"Table": {"DatabaseName": "tip_tutorial_db", "Name": "employees", "CatalogId": "account-id"}}'
Para ver más configuraciones de servicios posteriores, consulte Uso de Lake Formation con EMR Serverless y Uso de las concesiones de acceso de Amazon S3 con EMR Serverless.
Consulte datos con Trusted Identity Propagation a través de Amazon Unified Studio SageMaker
Una vez completada la configuración, puede consultar los datos utilizando su aplicación TIP-enabled EMR Serverless como procesamiento en un proyecto de Amazon SageMaker Unified Studio. EMR Serverless ejecuta las consultas de cada usuario con su propia identidad de IAM Identity Center, y Lake Formation aplica los permisos por usuario.
Requisitos previos
Una aplicación TIP-enabled EMR Serverless (completada en el paso 3 anterior).
Un dominio de Amazon SageMaker Unified Studio configurado con la autenticación del IAM Identity Center.
Se concedieron permisos de Lake Formation a su usuario o grupo del IAM Identity Center en la base de datos y la tabla de destino (completados en el paso 2 anterior).
Paso 5: Cree un proyecto de Amazon SageMaker Unified Studio con la TIP habilitada
Inicie sesión en Amazon SageMaker Unified Studio con sus credenciales del centro de identidad de IAM.
Cree un proyecto nuevo o abra un proyecto de existente.
En la configuración del proyecto, asegúrese de que el perfil esté
enableTrustedIdentityPropagationPermissionsestablecidotrueen los parámetros del plano.
Paso 6: Agregue la aplicación EMR Serverless como cómplice
La configuración informática del proyecto Amazon SageMaker Unified Studio no admite actualmente la adición de una aplicación EMR Serverless existente a través de la consola. Utilice el AWS CLI para crear la conexión:
aws datazone create-connection \ --domain-identifierdomain-id\ --name "my-emr-serverless-connection" \ --environment-identifierenvironment-id\ --props '{ "sparkEmrProperties": { "computeArn": "arn:aws:emr-serverless:region:account-id:/applications/application-id", "runtimeRole": "arn:aws:iam::account-id:role/emr-serverless-tip-job-role" } }'
Reemplace los siguientes valores:
: Su identificador de dominio de Amazon SageMaker Unified Studio.domain-id: El identificador de entorno de su proyecto (utilice el entorno de herramientas).environment-id: El ID de la aplicación EMR Serverless del paso 3.application-id: La función de ejecución del trabajo del paso 4.emr-serverless-tip-job-role
importante
La create-connection API requiere que la persona que llama sea miembro del DataZone proyecto. Si recibes unaAccessDeniedException, agrega tu rol de IAM como colaborador del proyecto antes de crear la conexión:
import boto3 session = boto3.Session(profile_name='your-profile', region_name='your-region') client = session.client('datazone') client.create_project_membership( domainIdentifier='domain-id', projectIdentifier='project-id', designation='PROJECT_CONTRIBUTOR', member={'userIdentifier': 'arn:aws:iam::account-id:role/your-role'} )
Configure la función de DataZone usuario del proyecto para el acceso sin servidor EMR.
El rol DataZone de usuario del entorno del proyecto debe tener permisos para interactuar con la aplicación EMR Serverless. Agregue la siguiente política integrada al rol (el nombre del rol sigue el patrón): datazone_usr_role_<project-id>_<environment-id>
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "emr-serverless:GetApplication", "emr-serverless:StartApplication", "emr-serverless:StopApplication", "emr-serverless:ListApplications", "emr-serverless:AccessLivyEndpoints", "emr-serverless:StartJobRun", "emr-serverless:GetJobRun", "emr-serverless:ListJobRuns", "emr-serverless:CancelJobRun", "emr-serverless:GetDashboardForJobRun" ], "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::111122223333:role/emr-serverless-tip-job-role", "Condition": { "StringLike": { "iam:PassedToService": "emr-serverless.amazonaws.com" } } } ] }
Otorgue permisos a Lake Formation para el rol DataZone de usuario:
# Grant DESCRIBE on the database aws lakeformation grant-permissions \ --principal '{"DataLakePrincipalIdentifier": "arn:aws:iam::account-id:role/datazone_usr_role_project-id_environment-id"}' \ --permissions '["DESCRIBE"]' \ --resource '{"Database": {"DatabaseName": "tip_tutorial_db", "CatalogId": "account-id"}}' # Grant SELECT and DESCRIBE on the table aws lakeformation grant-permissions \ --principal '{"DataLakePrincipalIdentifier": "arn:aws:iam::account-id:role/datazone_usr_role_project-id_environment-id"}' \ --permissions '["SELECT","DESCRIBE"]' \ --resource '{"Table": {"DatabaseName": "tip_tutorial_db", "Name": "employees", "CatalogId": "account-id"}}'
Limitación de consola para conexiones sin servidor EMR
Amazon SageMaker Unified Studio admite actualmente la adición de Amazon EMR existente a los clústeres de EC2 mediante la configuración informática de la consola. Para las aplicaciones sin servidor de EMR, utilice el método que se muestra arriba. AWS CLI
Paso 7: Consulte una tabla de ejemplo
Abra un espacio JupyterLab IDE en su proyecto de Amazon SageMaker Unified Studio.
Seleccione la conexión EMR Serverless como el procesamiento para la ejecución del bloc de notas.
En una nueva celda del portátil, ejecute las siguientes consultas: PySpark
%%pyspark my-emr-serverless-connection spark.sql("SHOW DATABASES").show() %%pyspark my-emr-serverless-connection spark.sql("SELECT * FROM tip_tutorial_db.employees LIMIT 10").show()Compruebe que la consulta devuelva datos. Esto confirma que su identidad en el centro de identidad de IAM se propagó a Lake Formation y que el acceso se concedió en función de su identidad.
La aplicación podría iniciarse
La primera vez que ejecuta una celda después de crear la conexión, EMR Serverless inicia la aplicación (arranque en frío). Este proceso puede tardar de 2 a 3 minutos. Las celdas siguientes se ejecutan en cuestión de segundos mientras la sesión esté activa.
Solución de problemas de errores de acceso rechazado
Si recibe un error de acceso denegado, compruebe que:
A tu usuario o grupo del IAM Identity Center se le ha asignado la etiqueta DESCRIBE en la base de datos y SELECT/DESCRIBE en la tabla de Lake Formation.
La función de ejecución del trabajo cuenta con
lakeformation:GetDataAccesslos permisos de AWS Glue Data Catalog.El rol DataZone de usuario tiene permisos de Lake Formation en la base de datos y la tabla.
La ubicación de Amazon S3 de Lake Formation está registrada con un rol personalizado que incluye
sts:SetContext(no el rol vinculado al servicio).
Resolución de problemas
| Error | Causa | Fix |
|---|---|---|
AccessDeniedException: emr-serverless:GetApplication |
La función de DataZone usuario carece de permisos EMR Serverless. | Agregue la política integrada de EMR Serverless a la función de DataZone usuario (consulte el paso 6). |
| Se ha agotado el tiempo de espera para que la aplicación alcance el estado INICIADO | El inicio en frío de la aplicación EMR Serverless supera el tiempo de espera predeterminado. | Re-run la celda. La aplicación continúa iniciándose en segundo plano y estará lista en el siguiente intento. |
| No se encontró la sesión. Se limpió debido a que se agotó el tiempo de inactividad. | La sesión de Spark no se pudo iniciar debido a la falta de permisos en la función de ejecución del trabajo. | Asegúrese de que el rol de ejecución del trabajo cuente con los permisos de Amazon S3, Amazon CloudWatch Logs, AWS Glue y Lake Formation (consulte el paso 4). |
| Permisos insuficientes sobre Lake Formation: obligatorio. Descríbalo en la base de datos | Su identidad o función no tiene permisos de Lake Formation a nivel de base de datos. | Incluya DESCRIBE en la base de datos al usuario, la función de ejecución del trabajo y DataZone la función de usuario del IAM Identity Center. |
TABLE_OR_VIEW_NOT_FOUND |
La sesión de Spark no está configurada para usar el catálogo de datos de AWS Glue. | Asegúrese de que la aplicación EMR Serverless incluya spark.sql.catalogImplementation=hive la clase de fábrica del metaalmacén de AWS Glue runtimeConfiguration (consulte el paso 3). |
AccessDeniedException: CreateConnection |
La persona que llama no es miembro del proyecto. DataZone | Añade tu rol como colaborador del proyecto antes de llamar create-connection (consulta el paso 6). |
Eliminar recursos
Elimine los recursos que haya creado en este tutorial para evitar cargos recurrentes:
Elimine la aplicación EMR Serverless.
Elimine la conexión de Amazon SageMaker Unified Studio y elimine el proyecto de Amazon SageMaker Unified Studio (y el dominio, si lo creó únicamente para este tutorial).
Revoca los permisos de Lake Formation que concediste y anula el registro de la ubicación de datos de Amazon S3.
Elimine las funciones de IAM que creó en los pasos 2 y 4.
Elimine todos los cubos de Amazon S3 de prueba y los datos de muestra.
Siguientes pasos
Para verificar la propagación de la identidad CloudTrail, busque
AssumeRoleeventossts:SetContextdel servicio EMR Serverless.Para restringir el acceso a distintos usuarios, cree usuarios adicionales del IAM Identity Center y concédeles diferentes permisos de Lake Formation en la misma tabla (por ejemplo, filtrado a nivel de columna o de fila).
En el caso de las implementaciones de producción, limite los permisos de Amazon S3 y AWS Glue del rol de ejecución del trabajo a recursos específicos en lugar de utilizar caracteres comodín.
Para obtener más información sobre el uso de EMR Serverless con Amazon SageMaker Unified Studio, consulte EMR Serverless en Amazon Unified Studio. SageMaker