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

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

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

在多租戶環境中,確保每個租戶的資料都已隔離且只能由授權的實體存取,這一點至關重要。SageMaker AI 支援使用屬性型存取控制 (ABAC) 來實現訓練任務的隔離。您可以設定工作階段鏈結組態,使用 AWS Security Token Service (AWS STS) 工作階段標籤請求臨時、有限權限的登入資料,讓訓練任務存取特定租用戶,而不是為每個租用戶建立多個 IAM 角色,為所有租用戶使用相同的 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 角色管理器建立 SageMaker AI 任務建立角色。如需詳細資訊,請參閱使用角色管理器

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

    執行角色也應該有一個政策,允許任何屬性型多租戶架構中的租戶從連接至主體標籤的字首讀取。以下的範例政策會限制 SageMaker AI 執行角色存取與 tenant-id 金鑰相關聯的值。如需命名標籤金鑰的詳細資訊,請參閱 IAM 和 STS 中的標記規則

    JSON
    { "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}/*", "Effect": "Allow" }, { "Action": "s3:ListBucket", "Resource": "*", "Effect": "Allow" } ] }

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

下列程序說明如何使用 SageMaker Python SDK 建立具有工作階段標籤鏈結的訓練任務,以進行已啟用 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" 附加至任務建立角色時,執行角色會擷取這些標籤,以使用下列政策:

    JSON
    { "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/*", "Effect": "Allow" }, { "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 搭配暖集區使用,相符的訓練任務必須具有相同的工作階段標籤。如需詳細資訊,請參閱符合的訓練任務