本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用屬性型存取控制 (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/,則相同租戶的 Amazon FSx 目錄應該是example-tenant/fsx-train/train/,而輸出資料 Amazon S3 URI 應該是example-tenants3://your-output-s3-bucket/。example-tenant -
SageMaker AI 任務建立角色。您可以使用 Amazon SageMaker AI 角色管理器建立 SageMaker AI 任務建立角色。如需詳細資訊,請參閱使用角色管理器。
-
在其信任政策中具有
sts:AssumeRole和sts:TagSession許可的 SageMaker AI 執行角色。如需 SageMaker AI 執行角色的詳細資訊,請參閱 SageMaker AI 角色。執行角色也應該有一個政策,允許任何屬性型多租戶架構中的租戶從連接至主體標籤的字首讀取。以下的範例政策會限制 SageMaker AI 執行角色存取與
tenant-id金鑰相關聯的值。如需命名標籤金鑰的詳細資訊,請參閱 IAM 和 STS 中的標記規則。
建立工作階段標籤鏈結啟用的已訓練任務
下列程序說明如何使用 SageMaker Python SDK 建立具有工作階段標籤鏈結的訓練任務,以進行已啟用 ABAC 的多租戶訓練。
注意
除了多租戶資料儲存之外,您也可以使用 ABAC 工作流程將工作階段標籤傳遞給 Amazon VPC 的執行角色 AWS Key Management Service,以及您允許 SageMaker AI 呼叫的任何其他服務
啟用 ABAC 的工作階段標籤鏈結
-
匯入
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 -
設定 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"附加至任務建立角色時,執行角色會擷取這些標籤,以使用下列政策: -
定義估算器,以使用 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 搭配暖集區使用,相符的訓練任務必須具有相同的工作階段標籤。如需詳細資訊,請參閱符合的訓練任務。