使用屬性型存取控制 (ABAC) 進行多租用戶訓練 - Amazon SageMaker AI

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用屬性型存取控制 (ABAC) 進行多租用戶訓練

在多租用戶環境中,確保每個租用戶的資料都已隔離,且只有授權的實體才能存取。SageMaker AI 支援使用屬性型存取控制 (ABAC) 來實現訓練任務的隔離。您可以設定工作階段鏈結組態,使用 AWS Security Token Service (AWS STS) 工作階段標籤來請求臨時、有限權限的登入資料,讓訓練任務存取特定租用戶,而不是為每個租用戶建立多個 IAM 角色。如需工作階段標籤的詳細資訊,請參閱 中的傳遞工作階段標籤 AWS STS

建立訓練任務時,您的工作階段鏈結組態會使用 AWS STS 來請求臨時安全登入資料。此請求會產生已標記的工作階段。每個 SageMaker 訓練任務只能使用所有訓練任務共用的單一角色來存取特定租用戶。透過使用工作階段鏈結實作 ABAC,您可以確保每個訓練任務只能存取工作階段標籤指定的租用戶,有效地隔離和保護每個租用戶。下一節將引導您完成使用 SageMaker Python SDK 設定及使用 ABAC 進行多租戶訓練任務隔離的步驟。

必要條件

若要開始使用 ABAC 進行多租戶訓練任務隔離,您必須具備下列項目:

  • 跨位置具有一致命名的租用戶。例如,如果租用戶的輸入資料 Amazon S3 URI 是 s3://your-input-s3-bucket/example-tenant,則相同租用戶的 Amazon FSx 目錄應該是 ,/fsx-train/train/example-tenant而輸出資料 Amazon S3 URI 應該是 s3://your-output-s3-bucket/example-tenant

  • SageMaker AI 任務建立角色。您可以使用 Amazon SageMaker AI Role Manager 建立 SageMaker AI 任務建立角色。 Amazon SageMaker 如需詳細資訊,請參閱使用角色管理員

  • 在其信任政策中具有 sts:AssumeRolests:TagSession許可的 SageMaker AI 執行角色。如需 SageMaker AI 執行角色的詳細資訊,請參閱 SageMaker AI 角色

    執行角色也應該有政策,允許任何屬性型多租用戶架構中的租用戶從連接至主體標籤的字首讀取。以下是限制 SageMaker AI 執行角色存取與tenant-id金鑰相關聯值的範例政策。如需命名標籤金鑰的詳細資訊,請參閱 IAM 和 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" } ] }

建立已啟用工作階段標籤鏈結的訓練任務

下列程序說明如何使用 SageMaker Python SDK for ABAC 啟用多租用戶訓練來建立工作階段標籤鏈結的訓練任務。

注意

除了多租戶資料儲存之外,您也可以使用 ABAC 工作流程將工作階段標籤傳遞給 Amazon VPC 的執行角色 AWS Key Management Service,以及任何其他您允許 SageMaker AI 呼叫的服務

啟用 ABAC 的工作階段標籤鏈結
  1. 匯入 boto3和 SageMaker Python SDK。已啟用 ABAC 的訓練任務隔離僅適用於 SageMaker AI Python SDK 的 2.217 版或更新版本。

    import boto3 import sagemaker from sagemaker.estimator import Estimator from sagemaker.inputs import TrainingInput
  2. 設定 AWS STS 和 SageMaker AI 用戶端以使用租戶標記的工作階段標籤。您可以變更標籤值來指定不同的租用戶。

    # 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)

    將標籤附加"tenant-id=example-tenant"至任務建立角色時,執行角色會擷取這些標籤,以使用下列政策:

    { "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" } ] }
  3. 定義估算器以使用 SageMaker Python SDK 建立訓練任務。將 enable_session_tag_chaining設定為 以True允許 SageMaker AI 訓練執行角色從您的任務建立角色擷取標籤。

    # 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 只能讀取訓練任務請求中提供的標籤,不會代表您將任何標籤新增至資源。

ABAC for SageMaker 訓練與 SageMaker AI 受管暖集區相容。若要搭配暖集區使用 ABAC,相符的訓練任務必須具有相同的工作階段標籤。如需詳細資訊,請參閱符合的訓練任務