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

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

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

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

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

必要條件

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

  • 跨位置具有一致命名的租用戶。例如,如果租用戶URI的輸入資料 Amazon S3 為 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 任務建立角色。您可以使用 Amazon SageMaker Role Manager 建立 SageMaker 任務建立角色。如需詳細資訊,請參閱使用角色管理員

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

    執行角色還應具有允許任何屬性型多租戶架構中的租戶從連接至主體標籤的字首讀取的政策。以下是限制 SageMaker 執行角色存取與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 呼叫的任何其他服務

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

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

    # 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執行角色從您的任務建立角色擷取標籤。

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

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