A bordo de usuarios en Amazon SageMaker Studio con roles IAM específicos para grupos de Active Directory.

Onboard users in Amazon SageMaker Studio with specific IAM roles for Active Directory groups.

Amazon SageMaker Studio es un entorno de desarrollo integrado (IDE) basado en web para aprendizaje automático (ML) que le permite construir, entrenar, depurar, desplegar y monitorear sus modelos de ML. Para aprovisionar Studio en su cuenta y región de AWS, primero debe crear un dominio de Amazon SageMaker, que es una estructura que encapsula su entorno de ML. Más concretamente, un dominio de SageMaker consta de un volumen de Amazon Elastic File System (Amazon EFS) asociado, una lista de usuarios autorizados y una variedad de configuraciones de seguridad, aplicación, política y Amazon Virtual Private Cloud (Amazon VPC).

Cuando cree su dominio de SageMaker, puede elegir usar tanto el Centro de Identidad de AWS IAM (sucesor de AWS Single Sign-On) como AWS Identity and Access Management (IAM) para los métodos de autenticación de usuarios. Ambos métodos de autenticación tienen su propio conjunto de casos de uso; en esta publicación, nos enfocamos en los dominios de SageMaker con IAM Identity Center, o modo de inicio de sesión único (SSO), como método de autenticación.

Con el modo SSO, configura un usuario y un grupo SSO en IAM Identity Center y luego concede acceso al grupo o usuario SSO desde la consola de Studio. Actualmente, todos los usuarios SSO en un dominio heredan el rol de ejecución del dominio. Esto puede no funcionar para todas las organizaciones. Por ejemplo, los administradores pueden querer configurar permisos de IAM para un usuario de Studio SSO en función de su membresía en el grupo de Active Directory (AD). Además, dado que los administradores deben otorgar manualmente a los usuarios SSO acceso a Studio, el proceso puede no ser escalable al incorporar cientos de usuarios.

En esta publicación, brindamos orientación prescriptiva para la solución de aprovisionamiento de usuarios SSO a Studio con permisos de menor privilegio según la membresía del grupo AD. Esta guía le permite escalar rápidamente para incorporar cientos de usuarios a Studio y lograr su postura de seguridad y cumplimiento.

Descripción general de la solución

El siguiente diagrama ilustra la arquitectura de la solución.

El flujo de trabajo para aprovisionar usuarios de AD en Studio incluye los siguientes pasos:

  1. Configure un dominio de Studio en modo SSO.

  2. Para cada grupo de AD:

    1. Configure su rol de ejecución de Studio con políticas de IAM finamente granulares
    2. Registre una entrada en la tabla de mapeo de rol de grupo de AD de Amazon DynamoDB.

    Alternativamente, puede adoptar un estándar de nomenclatura para los ARN de roles de IAM basado en el nombre del grupo de AD y derivar el ARN del rol de IAM sin necesidad de almacenar el mapeo en una base de datos externa.

  3. Sincronice sus usuarios y grupos de AD y sus membresías con AWS Identity Center:

    1. Si está utilizando un proveedor de identidad (IdP) que admite SCIM, use la integración de API de SCIM con IAM Identity Center.
    2. Si está utilizando AD autoadministrado, puede utilizar AD Connector.
  4. Cuando se crea el grupo de AD en su AD corporativo, complete los siguientes pasos:

    1. Cree un grupo SSO correspondiente en IAM Identity Center.
    2. Asocie el grupo SSO al dominio de Studio mediante la consola de SageMaker.
  5. Cuando se crea un usuario de AD en su AD corporativo, se crea un usuario SSO correspondiente en IAM Identity Center.

  6. Cuando se asigna al usuario de AD a un grupo de AD, se invoca una API de IAM Identity Center (CreateGroupMembership) y se crea la membresía del grupo SSO.

  7. El evento anterior se registra en AWS CloudTrail con el nombre AddMemberToGroup.

  8. Una regla de Amazon EventBridge escucha los eventos de CloudTrail y coincide con el patrón de regla AddMemberToGroup.

  9. La regla de EventBridge activa la función de Lambda de AWS objetivo.

  10. Esta función de Lambda llamará a las API de IAM Identity Center, obtendrá la información de usuario y grupo SSO y realizará los siguientes pasos para crear el perfil de usuario de Studio (CreateUserProfile) para el usuario de SSO:

    1. Busque la tabla DynamoDB para buscar el rol de IAM correspondiente al grupo AD.
    2. Cree un perfil de usuario con el usuario de SSO y el rol de IAM obtenido de la tabla de búsqueda.
    3. Se concede acceso a Studio al usuario de SSO.
  11. El usuario SSO es redirigido al IDE de Studio a través de la URL del dominio de Studio.

Tenga en cuenta que, al momento de escribir este artículo, el paso 4b (asociar el grupo SSO al dominio Studio) debe realizarse manualmente por un administrador usando la consola SageMaker a nivel de dominio SageMaker.

Configure una función Lambda para crear perfiles de usuario

La solución utiliza una función Lambda para crear los perfiles de usuario de Studio. Proporcionamos la siguiente función Lambda de muestra que puede copiar y modificar para satisfacer sus necesidades de automatización de la creación del perfil de usuario de Studio. Esta función realiza las siguientes acciones:

  1. Recibir el evento AddMemberToGroup de CloudTrail desde EventBridge.
  2. Recuperar el DOMAIN_ID de Studio de la variable de entorno (también puede codificar el ID de dominio o utilizar una tabla DynamoDB si tiene varios dominios).
  3. Leer de una tabla de marcado ficticia para hacer coincidir los usuarios de AD con los roles de ejecución. Puede cambiar esto para obtener de la tabla DynamoDB si está utilizando un enfoque basado en tablas. Si utiliza DynamoDB, el rol de ejecución de su función Lambda necesita permisos para leer de la tabla también.
  4. Recuperar la información de membresía de usuario de SSO y grupo de AD de IAM Identity Center, basada en los datos del evento de CloudTrail.
  5. Crear un perfil de usuario de Studio para el usuario SSO, con los detalles de SSO y el rol de ejecución correspondiente.
import os
import json
import boto3
DOMAIN_ID = os.environ.get('DOMAIN_ID', 'd-xxxx')


def lambda_handler(event, context):
    
    print({"Event": event})

    client = boto3.client('identitystore')
    sm_client = boto3.client('sagemaker')
    
    event_detail = event['detail']
    group_response = client.describe_group(
        IdentityStoreId=event_detail['requestParameters']['identityStoreId'],
        GroupId=event_detail['requestParameters']['groupId'],
    )
    group_name = group_response['DisplayName']
    
    user_response = client.describe_user(
        IdentityStoreId=event_detail['requestParameters']['identityStoreId'],
        UserId=event_detail['requestParameters']['member']['memberId']
    )
    user_name = user_response['UserName']
    print(f"Event details: {user_name} ha sido agregado a {group_name}")
    
    mapping_dict = {
        "ad-group-1": "<execution-role-arn>",
        "ad-group-2": "<execution-role-arn>”
    }
    
    user_role = mapping_dict.get(group_name)
    
    if user_role:
        response = sm_client.create_user_profile(
            DomainId=DOMAIN_ID,
            SingleSignOnUserIdentifier="UserName",
            SingleSignOnUserValue=user_name,
            # si el valor de SSO user_name es un correo electrónico, 
      #  agregar lógica para manejarlo ya que los perfiles de usuario de Studio no aceptan el carácter @
            UserProfileName=user_name, 
            UserSettings={
                "ExecutionRole": user_role
            }
        )
        print(response)
    else:
        response = "El grupo no está autorizado para usar SageMaker. No se hace nada."
        print(response)
    return {
        'statusCode': 200,
        'body': json.dumps(response)
    }

Tenga en cuenta que, de forma predeterminada, el rol de ejecución de Lambda no tiene acceso para crear perfiles de usuario o listar usuarios de SSO. Después de crear la función Lambda, acceda al rol de ejecución de la función en IAM y adjunte la siguiente política como una política inline después de limitarla según sea necesario en función de los requisitos de su organización.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "identitystore:DescribeGroup",
                "identitystore:DescribeUser"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": "sagemaker:CreateUserProfile",
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": "iam:PassRole",
            "Effect": "Allow",
            "Resource": [
                "<lista-de-roles-de-ejecución-de-studio>"
            ]
        }
    ]
}

Configure la regla de EventBridge para el evento de CloudTrail

EventBridge es un servicio de bus de eventos sin servidor que puede utilizar para conectar sus aplicaciones con datos de una variedad de fuentes. En esta solución, creamos un disparador basado en reglas: EventBridge escucha eventos y coincide con el patrón proporcionado y activa una función Lambda si la coincidencia del patrón es exitosa. Como se explica en la descripción general de la solución, escuchamos el evento AddMemberToGroup. Para configurarlo, complete los siguientes pasos:

  1. En la consola de EventBridge, elija Reglas en el panel de navegación.

  2. Elija Crear regla.

  3. Proporcione un nombre de regla, por ejemplo, AddUserToADGroup.

  4. Opcionalmente, ingrese una descripción.

  5. Seleccione predeterminado para el bus de eventos.

  6. Bajo Tipo de regla, elija Regla con un patrón de evento, luego elija Siguiente.

  7. En la página Construir patrón de evento, elija Fuente de eventos como eventos de AWS o eventos de socios de EventBridge.

  8. Bajo Patrón de evento, elija la pestaña Patrones personalizados (editor JSON) y escriba el siguiente patrón:

    {
      "source": ["aws.sso-directory"],
      "detail-type": ["Llamada de API de AWS a través de CloudTrail"],
      "detail": {
        "eventSource": ["sso-directory.amazonaws.com"],
        "eventName": ["AddMemberToGroup"]
      }
    }
  9. Elija Siguiente.

  10. En la página Seleccionar destino(s), elija el servicio de AWS para el tipo de destino, la función Lambda como destino y la función que creó anteriormente, luego elija Siguiente.

  11. Elija Siguiente en la página Configurar etiquetas, luego elija Crear regla en la página Revisar y crear.

Después de configurar la función Lambda y la regla de EventBridge, puede probar esta solución. Para hacerlo, abra su proveedor de identidades y agregue un usuario a uno de los grupos de AD con el rol de ejecución de Studio mapeado. Una vez que agregue el usuario, puede verificar los registros de la función Lambda para inspeccionar el evento y también ver al usuario de Studio aprovisionado automáticamente. Además, puede usar la llamada de API DescribeUserProfile para verificar que se crea el usuario con los permisos adecuados.

Soporte para varias cuentas de Studio

Para admitir varias cuentas de Studio con la arquitectura anterior, recomendamos los siguientes cambios:

  1. Configure un grupo de AD mapeado para cada nivel de cuenta de Studio.
  2. Configure un rol de IAM a nivel de grupo en cada cuenta de Studio.
  3. Configure o derive el mapeo de grupo a rol de IAM.
  4. Configure una función Lambda para realizar la suposición de roles entre cuentas, en función del ARN de mapeo de rol de IAM y del perfil de usuario creado.

Desaprovisionamiento de usuarios

Cuando se elimina a un usuario de su grupo de AD, también se debe eliminar su acceso del dominio de Studio. Con SSO, cuando se elimina a un usuario, este se deshabilita automáticamente en el Centro de identidades de IAM si se ha establecido la sincronización de AD con el Centro de identidades de IAM, y su acceso a la aplicación de Studio se revoca de inmediato.

Sin embargo, el perfil de usuario en Studio todavía persiste. Puede agregar un flujo de trabajo similar con CloudTrail y una función Lambda para eliminar el perfil de usuario de Studio. El disparador de EventBridge ahora debe escuchar el evento DeleteGroupMembership. En la función Lambda, complete los siguientes pasos:

  1. Obtenga el nombre del perfil de usuario del usuario y el ID del grupo.
  2. Enumere todas las aplicaciones en ejecución para el perfil de usuario utilizando la llamada de API ListApps, filtrando por el parámetro UserProfileNameEquals. Asegúrese de verificar la respuesta paginada para listar todas las aplicaciones del usuario.
  3. Elimine todas las aplicaciones en ejecución para el usuario y espere hasta que se eliminen todas las aplicaciones. Puede usar la API DescribeApp para ver el estado de la aplicación.
  4. Cuando todas las aplicaciones estén en un estado de Eliminado (o Fallido), elimine el perfil de usuario.

Con esta solución en su lugar, los administradores de la plataforma de ML pueden mantener las membresías de grupos en una ubicación central y automatizar la gestión de perfiles de usuario de Studio a través de EventBridge y funciones Lambda.

El siguiente código muestra un evento de CloudTrail de muestra:

"AddMemberToGroup": 
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "Unknown",
        "accountId": "<account-id>",
        "accessKeyId": "30997fec-b566-4b8b-810b-60934abddaa2"
    },
    "eventTime": "2022-09-26T22:24:18Z",
    "eventSource": "sso-directory.amazonaws.com",
    "eventName": "AddMemberToGroup",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "54.189.184.116",
    "userAgent": "Okta SCIM Client 1.0.0",
    "requestParameters": {
        "identityStoreId": "d-906716eb24",
        "groupId": "14f83478-a061-708f-8de4-a3a2b99e9d89",
        "member": {
            "memberId": "04c8e458-a021-702e-f9d1-7f430ff2c752"
        }
    },
    "responseElements": null,
    "requestID": "b24a123b-afb3-4fb6-8650-b0dc1f35ea3a",
    "eventID": "c2c0873b-5c49-404c-add7-f10d4a6bd40c",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "<account-id>",
    "eventCategory": "Management",
    "tlsDetails": {
        "tlsVersion": "TLSv1.2",
        "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256",
        "clientProvidedHostHeader": "up.sso.us-east-1.amazonaws.com"
    }
}

El siguiente código muestra una solicitud de API de perfil de usuario de Studio de muestra:

create-user-profile \\
--domain-id d-xxxxxx \\
--user-profile-name ssouserid
--single-sign-on-user-identifier 'userName' \\
--single-sign-on-user-value 'ssouserid‘ \\
--user-settings ExecutionRole=arn:aws:iam::<account id>:role/name

Conclusión

En esta publicación, discutimos cómo los administradores pueden escalar la incorporación de Studio para cientos de usuarios basándose en la membresía de su grupo de AD. Demostramos una arquitectura de solución de extremo a extremo que las organizaciones pueden adoptar para automatizar y escalar su proceso de incorporación para satisfacer sus necesidades de agilidad, seguridad y cumplimiento. Si está buscando una solución escalable para automatizar la incorporación de usuarios, pruebe esta solución y deje sus comentarios a continuación. Para obtener más información sobre la incorporación a Studio, consulte Onboard to Amazon SageMaker Domain.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Conoce EasyEdit Un marco de inteligencia artificial de edición de conocimientos fácil de usar para LLMs.

Necesitamos constantemente mantenernos al día en este mundo en constante cambio, al igual que los modelos de aprendiz...

Inteligencia Artificial

PhotoGuard de MIT utiliza inteligencia artificial para defenderse contra la manipulación de imágenes por inteligencia artificial

A medida que la inteligencia artificial (IA) avanza, la capacidad de generar y manipular imágenes hiperrealistas se v...

Inteligencia Artificial

Top 50 Herramientas de Escritura de IA para Probar (Agosto 2023)

Grammarly Grammarly es una gran herramienta para mejorar la escritura. Revisa la gramática, ortografía, puntuación y ...

Inteligencia Artificial

Análisis en profundidad de la confiabilidad en los modelos GPT

Más de la mitad de los encuestados en una reciente encuesta global afirmaron que utilizarían esta tecnología emergent...

Inteligencia Artificial

Controversia en torno a Grok utiliza el código de OpenAI para entrenamiento

La última empresa de Elon Musk es el chatbot generativo basado en IA llamado Grok. Se encuentra envuelto en controver...