Uso del control de acceso basado en atributos (ABAC) para el entrenamiento multitenencia
En un entorno multitenencia, es fundamental garantizar que los datos de cada inquilino estén aislados y solo puedan acceder a ellos las entidades autorizadas. SageMaker AI admite el uso del control de acceso basado en atributos (ABAC) para lograr este aislamiento en los trabajos de entrenamiento. En lugar de crear varios roles de IAM para cada usuario, puede usar el mismo rol de IAM para todos los inquilinos. Para ello, debe establecer una configuración de encadenamiento de sesiones que utilice etiquetas de sesión de AWS Security Token Service (AWS STS) para solicitar credenciales temporales con privilegios limitados para el trabajo de entrenamiento con el fin de obtener acceso a usuarios específicos. Para obtener más información sobre las etiquetas de sesión, consulte Transferencia de etiquetas de sesión en AWS STS.
Al crear un trabajo de entrenamiento, la configuración de encadenamiento de sesiones utiliza AWS STS para solicitar credenciales de seguridad temporales. Esta solicitud genera una sesión, que se etiqueta. Cada trabajo de entrenamiento de SageMaker solo puede acceder a un inquilino específico mediante un único rol compartido por todos los trabajos de entrenamiento. Al implementar ABAC con el encadenamiento de sesiones, puede asegurarse de que cada trabajo de entrenamiento solo tenga acceso al inquilino especificado en la etiqueta de sesión, lo que aísla y protege de forma eficaz a cada inquilino. En la siguiente sección se explican los pasos necesarios para configurar y usar ABAC para el aislamiento de trabajos de entrenamiento de varios usuarios mediante el SageMaker Python SDK.
Requisitos previos
Para comenzar a usar ABAC para el aislamiento de trabajos de entrenamiento multitenencia, debe disponer de lo siguiente:
-
Inquilinos con nombres coherentes en todas las ubicaciones. Por ejemplo, si un URI de Amazon S3 de datos de entrada para un inquilino es
s3://your-input-s3-bucket/, el directorio de Amazon FSx de ese mismo inquilino debería serexample-tenant/fsx-train/train/y el URI de Amazon S3 de datos de salida debería serexample-tenants3://your-output-s3-bucket/.example-tenant -
Un rol de creación de trabajos en SageMaker AI. Puede crear un rol de creación de trabajos en SageMaker AI mediante el Administrador de roles de Amazon SageMaker AI. Para obtener más información, consulte Using the role manager.
-
Un rol de ejecución de SageMaker AI con los permisos
sts:AssumeRoleysts:TagSessionen su política de confianza. Para obtener más información sobre los roles de ejecución de SageMaker, consulte Roles de SageMaker AI.El rol de ejecución también debe tener una política que permita a los inquilinos de cualquier arquitectura multitenencia y basada en atributos leer el prefijo asociado a una etiqueta de entidad principal. A continuación se muestra un ejemplo que limita el rol de ejecución de SageMaker AI para que tenga acceso al valor asociado a la clave de
tenant-id. Para obtener más información sobre la nomenclatura de las claves de etiquetas, consulte Reglas para etiquetar en IAM y STS.{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::<your-input-s3-bucket>/${aws:PrincipalTag/tenant-id}/*" ], "Effect": "Allow" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::<your-output-s3-bucket>/${aws:PrincipalTag/tenant-id}/*" }, { "Action": "s3:ListBucket", "Resource": "*", "Effect": "Allow" } ] }
Creación de un trabajo de entrenamiento con el encadenamiento de etiquetas de sesión habilitado
En el siguiente procedimiento se muestra cómo crear un trabajo de entrenamiento con el encadenamiento de etiquetas de sesión mediante el SageMaker Python SDK para el entrenamiento multitenencia con ABAC.
nota
Además del almacenamiento de datos multitenencia, también puede utilizar el flujo de trabajo de ABAC para transferir etiquetas de sesión al rol de ejecución para Amazon VPC, AWS Key Management Service y cualquier otro servicio al que permita que SageMaker AI llame.
Habilitación del encadenamiento de etiquetas de sesión para ABAC
-
Importe
boto3y el SageMaker Python SDK. El aislamiento de trabajos de entrenamiento con ABAC solo está disponible en la versión 2.217o posteriores del SageMaker AI Python SDK. import boto3 import sagemaker from sagemaker.estimator import Estimator from sagemaker.inputs import TrainingInput -
Configure un cliente de AWS STS y de SageMaker AI para que utilice las etiquetas de sesión etiquetadas por el inquilino. Puede cambiar el valor de la etiqueta para especificar otro inquilino.
# Start an AWS STS client sts_client = boto3.client('sts') # Define your tenants using tags # The session tag key must match the principal tag key in your execution role policy tags = [] tag = {} tag['Key'] ="tenant-id"tag['Value'] ="example-tenant"tags.append(tag) # Have AWS STS assume your ABAC-enabled job creation role response = sts_client.assume_role( RoleArn="arn:aws:iam::<account-id>:role/<your-training-job-creation-role>", RoleSessionName="SessionName", Tags=tags) credentials = response['Credentials'] # Create a client with your job creation role (which was assumed with tags) sagemaker_client = boto3.client( 'sagemaker', aws_access_key_id=credentials['AccessKeyId'], aws_secret_access_key=credentials['SecretAccessKey'], aws_session_token=credentials['SessionToken'] ) sagemaker_session = sagemaker.Session(sagemaker_client=sagemaker_client)Al añadir las etiquetas
"tenant-id=example-tenant"al rol de creación de trabajos, el rol de ejecución extraerá estas etiquetas para utilizar la siguiente política:{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::<your-input-s3-bucket>/example-tenant/*" ], "Effect": "Allow" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::<your-output-s3-bucket>/example-tenant/*" }, { "Action": "s3:ListBucket", "Resource": "*", "Effect": "Allow" } ] } -
Defina un estimador para crear un trabajo de entrenamiento con el SageMaker Python SDK. Establezca
enable_session_tag_chainingenTruepara permitir que el rol de ejecución de entrenamiento de SageMaker AI recupere las etiquetas del rol de creación de trabajos.# Specify your training input trainingInput = TrainingInput( s3_data='s3://<your-input-bucket>/example-tenant', distribution='ShardedByS3Key', s3_data_type='S3Prefix' ) # Specify your training job execution role execution_role_arn ="arn:aws:iam::<account-id>:role/<your-training-job-execution-role>"# Define your esimator with session tag chaining enabled estimator = Estimator( image_uri="<your-training-image-uri>", role=execution_role_arn, instance_count=1, instance_type='ml.m4.xlarge', volume_size=20, max_run=3600, sagemaker_session=sagemaker_session, output_path="s3://<your-output-bucket>/example-tenant", enable_session_tag_chaining=True) estimator.fit(inputs=trainingInput, job_name="abac-demo")
SageMaker AI solo puede leer las etiquetas incluidas en la solicitud de trabajo de entrenamiento y no añade ninguna etiqueta a los recursos.
ABAC para el entrenamiento de SageMaker es compatible con los grupos en caliente administrados por SageMaker AI. Para utilizar ABAC con los grupos en caliente, los trabajos de entrenamiento que coincidan deben tener etiquetas de sesión idénticas. Para obtener más información, consulte Emparejar trabajos de entrenamiento.