

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# マルチテナンシートレーニングに属性ベースのアクセス制御 (ABAC) を使用する
<a name="model-access-training-data-abac"></a>

マルチテナント環境では、各テナントのデータが分離され、許可されたエンティティにのみアクセスできるようにすることが重要です。SageMaker AI は、[属性ベースのアクセス制御 (ABAC)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html) を使用して、トレーニングジョブでこの分離を実現します。テナントごとに複数の IAM ロールを作成する代わりに、 AWS Security Token Service (AWS STS) セッションタグを使用してトレーニングジョブが特定のテナントにアクセスするための一時的な制限付き特権認証情報をリクエストするセッションチェーン設定を設定することで、すべてのテナントに同じ IAM ロールを使用できます。セッションタグについては、「[AWS STSでセッションタグを渡します](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html)」を参照してください。

トレーニングジョブを作成する場合、セッションチェーン設定は を使用して一時的なセキュリティ認証情報 AWS STS をリクエストします。このリクエストにより、タグ付けされたセッションが生成されます。各 SageMaker トレーニングジョブは、すべてのトレーニングジョブで共有されている単一のロールのみを使用して、特定のテナントにアクセスします。セッションの連鎖化を使用して ABAC を実装することで、セッションタグで指定されたテナントにのみ各トレーニングジョブがアクセスでき、各テナントを効果的に分離して保護します。以下のセクションでは、SageMaker Python SDK を使用して、マルチテナントトレーニングジョブの分離に ABAC を設定して使用する手順について説明します。

## 前提条件
<a name="model-access-training-data-abac-prerequisites"></a>

マルチテナントのトレーニングジョブの分離に 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 ジョブ作成ロールを作成できます。詳細については、「[ロールマネージャ (コンソール) を使用する](https://docs.aws.amazon.com/sagemaker/latest/dg/role-manager-tutorial.html)」を参照してください。
+ 信頼ポリシーに `sts:AssumeRole` および `sts:TagSession` アクセス許可を持つ SageMaker AI 実行ロール。SageMaker AI 実行ロールの詳細については、「[SageMaker AI Roles](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)」を参照してください。

  実行ロールには、任意の属性ベースのマルチテナンシーアーキテクチャのテナントに対して、プリンシパルタグにアタッチされたプレフィックスからの読み取りを許可するポリシーも必要です。以下は、SageMaker AI 実行ロールのアクセス権を、`tenant-id` キーに関連付けられた値に制限するポリシーの例です。タグキーの命名方法の詳細については、「[IAM および AWS STS でのタグ付けの規則](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html#id_tags_rules)」を参照してください。

------
#### [ 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"
          }
      ]
  }
  ```

------

## セッションタグの連鎖化を有効にしてトレーニングジョブを作成する
<a name="model-access-training-data-abac-create-training-job"></a>

次の手順では、ABAC 対応マルチテナンシートレーニングに SageMaker Python SDK を使用して、セッションタグの連鎖化を有効にしてトレーニングジョブを作成する方法を示します。

**注記**  
マルチテナンシーデータストレージに加えて、ABAC ワークフローを使用して、Amazon VPC の実行ロール AWS Key Management Service、および SageMaker AI が呼び出すことを許可するその他のサービスにセッションタグを渡すこともできます。

**ABAC でセッションタグの連鎖化を有効にする**

1. `boto3` と SageMaker Python SDK をインポートします。ABAC 対応のトレーニングジョブの分離は、SageMaker AI Python SDK のバージョン [2.217](https://pypi.org/project/sagemaker/2.217.0/) 以降でのみ使用できます。

   ```
   import boto3
   import sagemaker
   
   from sagemaker.estimator import Estimator
   from sagemaker.inputs import TrainingInput
   ```

1. テナントラベル付きセッションタグを使用するように 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"
           }
       ]
   }
   ```

------

1. 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 はトレーニングジョブリクエストで提供されるタグのみを読み取ることができ、ユーザーに代わってリソースにタグを追加することはありません。

SageMaker トレーニングの ABAC は、SageMaker AI が管理するウォームプールと互換性があります。ウォームプールで ABAC を使用するには、対応するトレーニングジョブでセッションタグが同一である必要があります。詳細については、「[トレーニングジョブのマッチング](train-warm-pools.md#train-warm-pools-matching-criteria)」を参照してください。