

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 다중 테넌시 훈련에 속성 기반 액세스 제어(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 역할 관리자를 사용하여 SageMaker AI 작업 만들기 역할을 만들 수 있습니다. 자세한 내용은 [역할 관리자 사용을 참조하세요](https://docs.aws.amazon.com/sagemaker/latest/dg/role-manager-tutorial.html).
+ 신뢰 정책에 `sts:AssumeRole` 및 `sts:TagSession` 권한이 있는 SageMaker AI 실행 역할입니다. SageMaker AI 실행 역할에 대한 자세한 내용은 [SageMaker AI 역할](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)을 참조하세요.

  또한 실행 역할에는 속성 기반 다중 테넌트 아키텍처의 테넌트가 보안 주체 태그에 연결된 접두사에서 읽을 수 있도록 허용하는 정책이 있어야 합니다. 다음은 SageMaker AI 실행 역할이 `tenant-id` 키와 연결된 값에 액세스할 수 있도록 제한하는 예시 정책입니다. 태그 키 이름 지정에 대한 자세한 내용은 [IAM 및 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>

다음 절차에서는 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](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를 사용하여 훈련 작업을 생성할 추정기를 정의합니다. SageMaker AI 훈련 실행 역할이 작업 만들기 역할에서 태그를 검색할 수 있도록 `enable_session_tag_chaining`을 `True`로 설정합니다.

   ```
   # 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 AI 훈련용 ABAC는 SageMaker AI 관리형 웜 풀과 호환되지 않습니다. 웜 풀과 함께 ABAC를 사용하려면 일치하는 훈련 작업에 동일한 세션 태그가 있어야 합니다. 자세한 내용은 [매칭하는 훈련 작업](train-warm-pools.md#train-warm-pools-matching-criteria) 섹션을 참조하세요.