Blog de Amazon Web Services (AWS)

Configuración de Amazon SageMaker Studio para equipos y grupos con aislamiento completo de recursos

Por Vikrant Kahlir, Rakesh Ramadas e Rama Thamman

 

Amazon SageMaker es un servicio totalmente gestionado que ofrece a todos los desarrolladores y científicos de datos de aprendizaje automático (ML) la capacidad de crear, entrenar e implementar modelos de ML rápidamente. Amazon SageMaker Studio es un entorno de desarrollo integrado (IDE) basado en web para ML que le permite crear, entrenar, depurar, implementar y supervisar sus modelos ML. Amazon SageMaker Studio proporciona todas las herramientas que necesita para llevar sus modelos desde la experimentación hasta la producción, al tiempo que aumenta su productividad. Puede escribir código, realizar un seguimiento de experimentos, visualizar datos y realizar depuración y supervisión dentro de una única interfaz visual integrada.

En esta publicación se describe cómo configurar el control de acceso para equipos o grupos dentro de Amazon SageMaker Studio mediante el control de acceso basado en atributos (ABAC). ABAC es un potente enfoque que puede utilizar para configurar Studio para que diferentes equipos de ciencia de datos y ML tengan un aislamiento completo de los recursos del equipo.

Proporcionamos orientación sobre cómo configurar el acceso de Amazon SageMaker Studio para los métodos de autenticación AWS Identity and Access Management (IAM) y AWS Single Sign-On (AWS SSO). Esta publicación le ayuda a configurar directivas de IAM para usuarios y roles mediante entidades de ABAC. Para demostrar la configuración, configuramos dos equipos como se muestra en el siguiente diagrama y mostramos dos casos de uso:

  • Caso de uso 1 : solo el usuario A1 puede acceder a su entorno de estudio; el usuario A2 no puede acceder al entorno del usuario A1 y viceversa
  • Caso de uso 2 : los usuarios del equipo B no pueden acceder a artefactos (experimentos, etc.) creados por miembros del equipo A

 

 

Puede configurar directivas de acuerdo a sus necesidades. Incluso puede incluir una etiqueta de proyecto en caso de que desee restringir aún más el acceso de los usuarios a los proyectos dentro de un equipo. El enfoque es muy flexible y escalable.

 

Autentificación

Amazon SageMaker Studio admite los siguientes métodos de autenticación para usuarios de incorporación. Al configurar Studio, puede elegir un método de autenticación que utilice para todos los usuarios:

  • IAM : incluye lo siguiente:
    • Usuarios deIAM: usuarios administrados en IAM
    • federación de cuentas de AWS : usuarios gestionados en un proveedor de identidad externo (IdP)
  • SSO de AWS : usuarios gestionados en un IdP externo federado mediante el SSO de AWS

 

Personas de usuario de ciencia de datos

En la tabla siguiente se describen dos personas diferentes que interactúan con los recursos de Amazon SageMaker Studio y el nivel de acceso que necesitan para cumplir con sus obligaciones. Utilizamos esta tabla como un requisito de alto nivel para modelar roles y políticas de IAM para establecer los controles deseados basados en la propiedad de recursos a nivel de equipo y usuario.

 

Usuarios Personas
Permisos
Usuario administrador  

Cree, modifique y elimine cualquier recurso de IAM.

Cree perfiles de usuario de Amazon SageMaker Studio con una etiqueta.

Inicie sesión en la consola de Amazon SageMaker.

Lea y describa los recursos de Amazon SageMaker.

Científicos de datos o desarrolladores

Inicie un IDE de Amazon SageMaker Studio asignado a un usuario específico de IAM o AWS SSO.

Cree recursos de Amazon SageMaker con las etiquetas necesarias. Para este post, usamos la etiqueta de equipo.

Actualice, elimine y ejecute recursos creados con una etiqueta específica.

Inicie sesión en la consola de Amazon SageMaker si es un usuario de IAM.

Lea y describa los recursos de Amazon SageMaker.

 

 

Resumen de la solución

Utilizamos los requisitos anteriores para modelar roles y permisos necesarios para establecer controles. El siguiente diagrama de flujo describe los diferentes pasos de configuración:

 

 

Aplicar su política al usuario administrador

Debe aplicar la siguiente directiva al usuario administrador que crea perfiles de usuario de Studio. Esta política requiere que el administrador incluya la etiqueta studiouserid . Puede usar un nombre diferente para la etiqueta si es necesario. La consola de Studio no le permite agregar etiquetas al crear perfiles de usuario, por lo que utilizamos AWS Command Line Interface (CLI de AWS).

Para los usuarios administradores administrados en IAM, adjunte la siguiente directiva al usuario. Para los usuarios administradores administrados en un IdP externo, agregue la siguiente directiva a la regla que el usuario asume al federar. La siguiente directiva obliga a la etiqueta studiouserid a estar presente cuando se invoca la acción SageMaker:CreateUserProfile .

{

“Version”: “2012-10-17",

“Statement”: [

{

“Sid”: “CreatesAgeMakerStudiouserProfilePolicy”,

“Effect”: “Allow”,

“Action”: “sagemaker:CreateUserProfile”,

“Resource”: “*”,

“Condition”: {

“ForAnyValue:StringEquals”: {

“aws:TagKeys”: [

“studiouserid”

]

}

}

}

]

}

AWS SSO no requiere esta política; realiza la comprobación de identidad.

 

Asignación de la directiva a usuarios de Studio

La siguiente directiva limita el acceso de Studio a los usuarios respectivos al requerir que la etiqueta de recurso coincida con el nombre de usuario de la acción SageMaker:CreatePresignedDomainURL . Cuando un usuario intenta acceder a la URL de inicio de Amazon SageMaker Studio, se realiza esta comprobación.

Para los usuarios de IAM, adjunte la siguiente directiva al usuario. Utilice el nombre de usuario para el valor de etiqueta studiouserid.

{

“Version”: “2012-10-17",

“Statement”: [

{

“Sid”: “AmazonSageMakerPresignedUrlPolicy”,

“Effect”: “Allow”,

“Action”: [

“sagemaker:CreatePresignedDomainUrl”

],

“Resource”: “*”,

“Condition”: {

“StringEquals”: {

“sagemaker:ResourceTag/studiouserid”: “$ {aws:username}”

}

}

}

]

}

Para la federación de cuentas de AWS, adjunte la siguiente política al rol que asume el usuario después de la federación:

{

“Version”: “2012-10-17",

“Statement”: [

{

“Sid”: “AmazonSageMakerPresignedUrlPolicy”,

“Effect”: “Allow”,

“Action”: [

“sagemaker:CreatePresignedDomainUrl”

],

“Resource”: “*”,

“Condition”: {

“StringEquals”: {

“sagemaker:ResourceTag/studiouserid”: “$ {aws:PrincipalTag/studiouserid}”

}

}

}

]

}

Agregue la siguiente instrucción a esta directiva en la sección Relación de confianza. Esta instrucción define la etiqueta transitiva permitida.

“Statement”: [

{

- - Existing statements

},

{

“Sid”: “IdentifyTransitiveTags”,

“Effect”: “Allow”,

“Principal”: {

“Federated”: “arn:aws:iam::<account id>:saml-provider/ <identity provider>”

},

“Action”: “sts:TagSession”,

“Condition”: {

“ForAllValues:StringEquals”: {

“sts:TransitiveTagKeys”: [

“studiouserid”

]

}

}

]

Para los usuarios gestionados en AWS SSO, esta política no es necesaria. AWS SSO realiza la comprobación de identidad.

 

Creación de roles para los equipos

Para crear roles para sus equipos, primero debe crear las directivas. Para simplificar, utilizamos las mismas políticas para ambos equipos. En la mayoría de los casos, solo necesita un conjunto de políticas para todos los equipos, pero tiene la flexibilidad de crear políticas diferentes para diferentes equipos. En el segundo paso, creará un rol para cada equipo, adjuntará las directivas y etiquetará los roles con las etiquetas de equipo adecuadas.

Creación de las directivas

Cree las siguientes directivas. Para esta publicación, las dividimos en tres políticas para una mayor legibilidad, pero puedes crearlas de acuerdo a tus necesidades.

Política 1: Acceso de solo lectura de Amazon SageMaker

La siguiente política otorga privilegios para publicar y describir recursos de Amazon SageMaker. Puede personalizar esta política de acuerdo a sus necesidades.

{

“Version”: “2012-10-17",

“Statement”: [

{

“Sid”: “AmazonSageMakerDescribeReadyOnlyPolicy”,

“Effect”: “Allow”,

“Action”: [

“sagemaker:Describe*”,

“sagemaker:GetSearchSuggestions”

],

“Resource”: “*”

},

{

“Sid”: “AmazonSageMakerListOnlyPolicy”,

“Effect”: “Allow”,

“Action”: [

“sagemaker:List*”

],

“Resource”: “*”

},

{

“Sid”: “AmazonSageMakerUIandMetricsOnlyPolicy”,

“Effect”: “Allow”,

“Action”: [

“sagemaker: *App”,

“sagemaker:Search”,

“sagemaker:RenderUiTemplate”,

“sagemaker:BatchGetMetrics”

],

“Resource”: “*”

},

{

“Sid”: “AmazonSageMakerEC2ReadOnlyPolicy”,

“Effect”: “Allow”,

“Action”: [

“ec2:DescribeDhcpOptions”,

“ec2:DescribeNetworkInterfaces”,

“ec2:DescribeRouteTables”,

“ec2:DescribeSecurityGroups”,

“ec2:DescribeSubnets”,

“ec2:DescribeVpcEndpoints”,

“ec2:DescribeVpcs”

],

“Resource”: “*”

},

{

“Sid”: “AmazonSageMakerIAMReadOnlyPolicy”,

“Effect”: “Allow”,

“Action”: [

“iam:ListRoles”

],

“Resource”: “*”

}

]

}

Política 2: Acceso a Amazon SageMaker para servicios de soporte

La siguiente política otorga privilegios para crear, leer, actualizar y eliminar el acceso a Amazon Simple Storage Service (Amazon S3), Amazon Elastic Container Registry (Amazon ECR) y Amazon CloudWatch, así como acceso de lectura a AWS Key Management Service (AWS KMS). Puede personalizar esta política de acuerdo a sus necesidades.

{

“Version”: “2012-10-17",

“Statement”: [

{

“Sid”: “AmazonSageMakerCRUDAccessS3Policy”,

“Effect”: “Allow”,

“Action”: [

“s3:PutObject”,

“s3:GetObject”,

“s3:AbortMultipartUpload”,

“s3:DeleteObject”,

“s3:CreateBucket”,

“s3:ListBucket”,

“S3:PutBucketCORS”,

“s3:ListAllMyBuckets”,

“S3:GetBucketCORS”,

“s3:GetBucketLocation”

],

“Resource”: "<S3 BucketName>”

},

{

“Sid”: “AmazonSageMakerReadOnlyAccessKMSPolicy”,

“Effect”: “Allow”,

“Action”: [

“kms:DescribeKey”,

“kms:ListAliases”

],

“Resource”: “*”

},

{

“Sid”: “AmazonSageMakerCRUDAccessECRPolicy”,

“Effect”: “Allow”,

“Action”: [

“ecr:Set*”,

“ecr:CompleteLayerUpload”,

“ecr:Batch*”,

“ecr:Upload*”,

“ecr:InitiateLayerUpload”,

“ecr:Put*”,

“ecr:Describe*”,

“ecr:CreateRepository”,

“ecr:Get*”,

“ecr:StartImageScan”

],

“Resource”: “*”

},

{

“Sid”: “AmazonSageMakerCRUDAccessCloudWatchPolicy”,

“Effect”: “Allow”,

“Action”: [

“cloudwatch:Put*”,

“cloudwatch:Get*”,

“cloudwatch:List*”,

“cloudwatch:DescribeAlarms”,

“logs:Put*”,

“logs:Get*”,

“logs:List*”,

“logs:CreateLogGroup”,

“logs:CreateLogStream”,

“logs:ListLogDeliveries”,

“logs:Describe*”,

“logs:CreateLogDelivery”,

“logs:PutResourcePolicy”,

“logs:UpdateLogDelivery”

],

“Resource”: “*”

}

]

}

Política 3: Acceso para desarrolladores de Amazon SageMaker Studio

La siguiente política otorga privilegios para crear, actualizar y eliminar recursos de Amazon SageMaker Studio.
También hace cumplir el requisito de etiqueta de equipo durante la creación. Además, impone acciones de inicio, detención, actualización y eliminación en recursos restringidos solo a los miembros del equipo respectivos.

La condición de validación de etiquetas de equipo en el código siguiente se asegura de que el valor de la etiqueta de equipo coincida con el equipo del director. Consulte el código en negrita para obtener información específica.

{

“Version”: “2012-10-17",

“Statement”: [

{

“Sid”: “AmazonSageMakerStudioCreateApp”,

“Effect”: “Allow”,

“Action”: [

“sagemaker:CreateApp”

],

“Resource”: “*”

},

{

“Sid”: “AmazonSageMakerStudioIAMPassRole”,

“Effect”: “Allow”,

“Action”: [

“iam:PassRole”

],

“Resource”: “*”

},

{

“Sid”: “AmazonSageMakerInvokeEndPointRole”,

“Effect”: “Allow”,

“Action”: [

“sagemaker:InvokeEndPoint”

],

“Resource”: “*”

},

{

“Sid”: “AmazonSageMakerAddTags”,

“Effect”: “Allow”,

“Action”: [

“sagemaker:AddTags”

],

“Resource”: “*”

},

{

“Sid”: “AmazonSageMakerCreate”,

“Effect”: “Allow”,

“Action”: [

“sagemaker:Create*”

],

“Resource”: “*”,

            “Condition”:{“ForAnyValue:StringEquals”:{“aws:TagKeys”:[“team”]}, “StringEqualsIfExists”: {“aws:RequestTag/team”: “${aws:PrincipalTag/team}”}}

},

{

“Sid”: “AmazonSageMakerUpdateDeleteExecutePolicy”,

“Effect”: “Allow”,

“Action”: [

“sagemaker:Delete*”,

“sagemaker:Stop*”,

“sagemaker:Update*”,

“sagemaker:Start*”,

“sagemaker:DisassociateTrialComponent”,

“sagemaker:AssociateTrialComponent”,

“sagemaker:BatchPutMetrics”

],

“Resource”: “*”,

            “Condition”: {“StringEquals”:{“aws:PrincipalTag/team”: “${sagemaker:ResourceTag/team}”}}

}

]

}

Creación y configuración de los roles

Ahora puede crear un rol para cada equipo con estas directivas. Etiquetar los roles en la consola de IAM o con el comando CLI. Los pasos son los mismos para los tres tipos de autenticación. Por ejemplo, etiqueta el rol del equipo A con la clave de etiqueta = equipo y valor = «<Team Name>».

 

Creación del perfil de usuario de Amazon SageMaker Studio

En este paso, agregamos la etiqueta studiouserid al crear perfiles de usuario de Studio. Los pasos son ligeramente diferentes para cada tipo de autenticación.

Usuários de IAM

Para los usuarios de IAM, puede crear perfiles de usuario de Studio para cada usuario incluyendo el rol que se creó para el equipo al que pertenece el usuario. El siguiente código es un comando CLI de ejemplo. A partir de este momento, la inclusión de una etiqueta al crear un perfil de usuario solo está disponible a través de la CLI de AWS.

aws sagemaker create-user-profile --domain-id <domain id> --user-profile-name <unique profile name> --tags Key=studiouserid,Value=<aws user name> --user-settings ExecutionRole=arn:aws:iam::<account id>:role/<Team Role Name>

Federación de cuentas de AWS

Para la federación de cuentas de AWS, se crea un atributo de usuario (studiouserid) en un IdP externo con un valor único para cada usuario. El siguiente código muestra cómo configurar el atributo en Okta:

El siguiente ejemplo muestra cómo agregar el atributo «studiouserid» en OKTA. En la pantalla SIGN ON MÉTODOS DE OKTA, configure los siguientes atributos SAML 2.0, como se muestra en la imagen siguiente.

Atributo 1:

Nombre: https://aws.amazon.com/SAML/Attributes/PrincipalTag:studiouserid

Valor: user.studiouserid

Atributo 2:

Nombre: https://aws.amazon.com/SAML/Attributes/TransitiveTagKeys

Valor: {"studiouserid"}

La siguiente captura de pantalla muestra los atributos en la consola de Okta.

 

 

A continuación, cree el perfil de usuario mediante el siguiente comando. Utilice el valor del atributo de usuario en el paso anterior para el valor de etiqueta studiouserid

aws sagemaker create-user-profile --domain-id <domain id> --user-profile-name <unique profile name> --tags Key=studiouserid,Value=<user attribute value> --user-settings ExecutionRole=arn:aws:iam::<account id>:role/<Team Role Name>

 

SSO de AWS

Para obtener instrucciones sobre la asignación de usuarios en AWS SSO, consulte Incorporación de Amazon SageMaker Studio con AWS SSO y Okta Universal Directory.

Actualice el perfil de usuario de Studio para incluir la función de ejecución adecuada que se creó para el equipo al que pertenece el usuario. Consulte el siguiente comando de CLI:

aws sagemaker update-user-profile --domain-id <domain id> --user-profile-name <user profile name> --user-settings ExecutionRole=arn:aws:iam::<account id>:role/<Team Role Name> --region us-west-2

 

Validar que sólo los usuarios de Studio asignados puedan acceder a sus perfiles

Cuando un usuario intenta acceder a un perfil de Studio que no tiene un valor de etiquetastudiouserid que coincida con su nombre de usuario, se produce un error AccessDenieException . Puede probarlo copiando el vínculo de Launch Studio en la consola de Amazon SageMaker y accediendo a él cuando inicie sesión como un usuario diferente. La siguiente captura de pantalla muestra el mensaje de error.

 

 

Validar que solo los miembros del equipo respectivos pueden acceder a ciertos artefactos

En este paso, mostramos cómo configurar Studio para que los miembros de un equipo determinado no puedan acceder a los artefactos creados por otro equipo.

En nuestro caso de uso, un usuario del equipo A crea un experimento y etiquetas que experimentan con la etiqueta de equipo. Esto limita el acceso a este experimento sólo a los usuarios del equipo A. Consulte el siguiente código:

 

import sys

!{sys.executable} -m pip install sagemaker

!{sys.executable} -m pip install sagemaker-experiments




import time

import sagemaker

from smexperiments.experiment import Experiment




demo_experiment = Experiment.create(experiment_name = "USERA1TEAMAEXPERIMENT1",

description = "UserA1 experiment",

tags = [{'Key': 'team', 'Value': 'TeamA'}])

Si un usuario que no está en el equipo A intenta eliminar el experimento, Studio deniega la acción de eliminación. Consulte el siguiente código:

#comando executado pela Equipe A na instancia do Studio

import time

from smexperiments.experiment import Experiment

experiment_to_cleanup = Experiment.load(experiment_name="USERA1TEAMAEXPERIMENT1")

experiment_to_cleanup.delete()




[Client Error]

An error occurred (AccessDeniedException) when calling the DeleteExperiment operation: User: arn:aws:sts:: :<AWS Account ID>::assumed-role/ SageMakerStudioDeveloperTeamBRole/SageMaker is not authorized to perform: sagemaker:DeleteExperiment on resource: arn:aws:sagemaker:us-east-1:<AWS Account ID>:experiment/usera1teamaexperiment1

 

Conclusión

En esta publicación, demostramos cómo aislar el acceso de Amazon SageMaker Studio mediante la técnica ABAC. Mostramos dos casos de uso: restringir el acceso a un perfil de Studio solo al usuario asignado (usando la etiqueta studiouserid ) y restringir el acceso a los artefactos de Studio únicamente a los miembros del equipo. También mostramos cómo limitar el acceso a los experimentos solo a los miembros del equipo usando la etiqueta del equipo. Puede personalizar más políticas aplicando más etiquetas para crear controles jerárquicos más complejos.

Pruebe esta solución para aislar recursos por equipos o grupos en Amazon SageMaker Studio. Para obtener más información sobre el uso de ABAC como estrategia de autorización, consulte ¿Qué es ABAC for AWS?

 

Este artigo foi traduzido do Blog da AWS em Inglês.

 


Sobre os Autores

Vikrant Kahlir es arquitecto sénior de soluciones en el equipo de Arquitectura de Soluciones. Trabaja con los equipos de productos e ingeniería de clientes estratégicos de AWS para ayudarles con soluciones tecnológicas que utilizan los servicios de AWS para bases de datos administradas, AI/ML, HPC, computación autónoma e IoT.

 

 

 

Rakesh Ramadas es arquitecto de soluciones ISV en Amazon Web Services. Sus áreas de enfoque incluyen AI/ML y Big Data.

 

 

 

 

 

Rama Thamman es Gerente de Desarrollo de Software con el equipo de Plataformas AI, liderando el equipo de Migraciones de ML.

 

 

 

 

Revisor

Sergio Beltrán es arquitecto de soluciones especialista en AI/ML en AWS. En su rol apoya a los clientes a encontrar la mejor solución y arquitectura para sus necesidades y aprovechar los servicios de  AI/ML para generar innovación y mejorar la productividad. Antes de AWS, trabajó como data scientist y gerente de business development en la industria Telco.