

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

# 부록
<a name="appendix"></a>

## 멀티테넌시 비교
<a name="multi-tenancy-comparison"></a>

*표 2 - 멀티테넌시 비교*


|  다중 도메인  |  다중 계정  |  단일 도메인 내의 속성 기반 액세스 제어(ABAC)  | 
| --- | --- | --- | 
|  리소스 격리는 태그를 사용하여 이루어집니다. SageMaker AI Studio는 도메인 ARN 및 사용자 프로필/스페이스를 사용하여 모든 리소스에 태그를 자동으로 지정합니다ARN.  |  각 테넌트는 자체 계정에 있으므로 절대적인 리소스 격리가 있습니다.  |  태그를 사용하여 리소스 격리가 이루어집니다. 사용자는에 대해 생성된 리소스의 태그 지정을 관리해야 합니다ABAC.  | 
|  목록은 태그로 제한할 수 APIs 없습니다. 리소스의 UI 필터링은 공유 공간에서 수행되지만 AWS CLI 또는 Boto3를 통해 수행된 API 호출 나열SDK은 리전 전반의 리소스를 나열합니다.  |  테넌트는 전용 계정에 있으므로 목록 APIs 격리도 가능합니다.  |  목록은 태그로 제한할 수 APIs 없습니다. AWS CLI 또는 Boto3를 통해 수행된 API 호출을 나열SDK하면 리전 전반의 리소스가 나열됩니다.  | 
|  SageMaker 도메인를 비용 할당 태그ARN로 사용하여 테넌트당 AI Studio 컴퓨팅 및 스토리지 비용을 쉽게 모니터링할 수 있습니다.  |  SageMaker 테넌트당 AI Studio 컴퓨팅 및 스토리지 비용은 전용 계정으로 쉽게 모니터링할 수 있습니다.  |  SageMaker 테넌트당 AI Studio 컴퓨팅 비용은 사용자 지정 태그를 사용하여 계산해야 합니다.  SageMaker 모든 테넌트가 동일한 EFS 볼륨을 공유하므로 도메인당 AI Studio 스토리지 비용을 모니터링할 수 없습니다.  | 
|  서비스 할당량은 계정 수준에서 설정되므로 단일 테넌트가 여전히 모든 리소스를 사용할 수 있습니다.  |  서비스 할당량은 각 테넌트의 계정 수준에서 설정할 수 있습니다.  |  서비스 할당량은 계정 수준에서 설정되므로 단일 테넌트가 여전히 모든 리소스를 사용할 수 있습니다.  | 
|  코드형 인프라(IaC) 또는 서비스 카탈로그를 통해 여러 테넌트로 확장할 수 있습니다.  |  여러 테넌트로 확장하려면 Organizations와 여러 계정을 벤딩해야 합니다.  |  크기 조정에는 각 새 테넌트에 대한 테넌트별 역할이 필요하며 사용자 프로필에 테넌트 이름으로 태그를 지정해야 합니다.  | 
|  테넌트 내 사용자 간의 협업은 공유 공간을 통해 가능합니다.  |  테넌트 내 사용자 간의 협업은 공유 공간을 통해 가능합니다.  |  모든 테넌트는 공동 작업을 위해 동일한 공유 공간에 액세스할 수 있습니다.  | 

## SageMaker AI Studio 도메인 백업 및 복구
<a name="sagemaker-studio-domain-backup-and-recovery"></a>

실수로 EFS 삭제되거나 네트워킹 또는 인증 변경으로 인해 도메인을 다시 생성해야 하는 경우 다음 지침을 따르십시오.

### 옵션 1:를 EFS 사용하여 기존에서 백업 EC2
<a name="option-1"></a>

#### SageMaker Studio 도메인 백업
<a name="sagemaker-studio-domain-backup"></a>

1.  SageMaker Studio([CLI](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/list-user-profiles.html), )에 사용자 프로필과 공백을 나열합니다[SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.list_user_profiles).

1. 사용자 프로필/스페이스를의 UIDs에 매핑합니다EFS.

   1. users/spaces, describe the user profile/space ([CLI](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-user-profile.html), [SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.describe_user_profile)) 목록의 각 사용자에 대해.

   1. 사용자 프로필/스페이스를 `HomeEfsFileSystemUid`에 매핑합니다.

   1. 사용자에게 고유한 실행 역할이 있다면 `UserSettings['ExecutionRole']`에 사용자 프로필을 매핑합니다.

   1. 기본 스페이스 실행 역할을 식별합니다.

1. 새 도메인을 만들고 기본 스페이스 실행 역할을 지정합니다.

1. 사용자 프로필 및 스페이스를 생성합니다.
   + 사용자 목록의 각 사용자에 대해 실행 역할 매핑을 사용하여 사용자 프로필([CLI](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-user-profile.html), [SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_user_profile))을 생성합니다.

1. 새 EFS 및에 대한 매핑을 생성합니다UIDs.

   1. 사용자 목록의 각 사용자에 대해 사용자 프로필([CLI](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-user-profile.html), )을 설명합니다[SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.describe_user_profile).

   1. `HomeEfsFileSystemUid`에 사용자 프로필을 매핑합니다.

1. 필요한 경우 모든 앱, 사용자 프로필, 스페이스를 삭제한 다음 도메인을 삭제합니다.

#### EFS 백업
<a name="efs-backup"></a>

를 백업하려면 다음 지침을 EFS사용합니다.

1. EC2 인스턴스를 시작하고 이전 SageMaker Studio 도메인의 인바운드/아웃바운드 보안 그룹을 새 EC2 인스턴스에 연결합니다(포트 2049TCP에서를 통한 NFS 트래픽 허용. [에서 외부 리소스VPC에 SageMaker Studio 노트북 연결을 참조하세요](https://docs.aws.amazon.com/sagemaker/latest/dg/studio-notebooks-and-internet-access.html#:~:text=NFS%20traffic%20over%20TCP%20on%20port%202049%20between%20the%20domain%20and%20the%20Amazon%20EFS%20volume.).

1.  SageMaker Studio EFS 볼륨을 새 EC2 인스턴스에 마운트합니다. [EFS 파일 시스템 탑재](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html)를 참조하세요.

1. 파일을 EBS 로컬 스토리지로 복사합니다. `>sudo cp -rp /efs /studio-backup:` 

   1. 새 도메인 보안 그룹을 EC2 인스턴스에 연결합니다.

   1. 새 EFS 볼륨을 EC2 인스턴스에 마운트합니다.

   1. 파일을 새 EFS 볼륨에 복사합니다.

   1. 사용자의 컬렉션에 있는 각 사용자에 대해:

      1. `mkdir new_uid` 디렉터리를 만듭니다.

      1. 이전 UID 디렉터리의 파일을 새 UID 디렉터리로 복사합니다.

      1. 모든 파일의 소유권을 변경합니다: 모든 파일에 `chown <new_UID>`를 실행하세요.

### 옵션 2: S3 및 수명 주기 구성을 EFS 사용하여 기존에서 백업
<a name="option-2"></a>

1. [Amazon Linux 2를 사용하여 Amazon SageMaker 노트북 인스턴스로 작업 마이그레이션을 참조하세요](https://aws.amazon.com/blogs/machine-learning/migrate-your-work-to-amazon-sagemaker-notebook-instance-with-amazon-linux-2/).

1. 백업용 S3 버킷을 생성합니다(예:`>studio-backup`).

1. 실행 역할이 있는 모든 사용자 프로필을 나열합니다.

1. 현재 SageMaker Studio 도메인에서 도메인 수준에서 기본 LCC 스크립트를 설정합니다.
   + 에서의 모든 `/home/sagemaker-user` 내용을 S3의 사용자 프로필 접두사(예: `s3://studio-backup/studio-user1`)에 LCC복사합니다.

1. 모든 기본 Jupyter Server 앱(실행할 용)LCC을 다시 시작합니다.

1. 모든 앱, 사용자 프로필, 도메인을 삭제합니다.

1. 새 SageMaker Studio 도메인을 생성합니다.

1. 사용자 프로필 및 실행 역할 목록에서 새 사용자 프로필을 생성합니다.

1. 도메인 LCC 수준에서를 설정합니다.
   + 에서 S3의 사용자 프로필 접두사에 있는 모든 항목을에 LCC복사합니다. `/home/sagemaker-user` 

1. [LCC 구성](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateApp.html#:~:text=%22ResourceSpec%22%3A%20%7B%20%0A%20%20%20%20%20%20%22InstanceType%22%3A%20%22string%22%2C%0A%20%20%20%20%20%20%22LifecycleConfigArn%22%3A%20%22string%22%2C)([CLI](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-app.html), )이 있는 모든 사용자를 위한 기본 Jupyter Server 앱을 생성합니다[SDK](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_app).

## SageMaker SAML어설션을 사용한 Studio 액세스
<a name="sagemaker-studio-access-using-saml"></a>

솔루션 설정:

1. 외부 IdP에서 SAML 애플리케이션을 생성합니다.

1. 에서 외부 IdP를 자격 증명 공급자로 설정합니다IAM.

1. IdP에서 액세스할 수 있는 `SAMLValidator` Lambda 함수를 생성합니다( 함수 URL 또는 API 게이트웨이를 통해).

1. `GeneratePresignedUrl` Lambda 함수와 API 게이트웨이를 생성하여 함수에 액세스합니다.

1. 사용자가 API Gateway를 호출하기 위해 맡을 수 있는 IAM 역할을 생성합니다. 이 역할은 어SAML설션에서 다음 형식의 속성으로 전달되어야 합니다.
   + 속성 이름: https://aws.amazon.com/SAML/속성/역할
   + 속성 값: `<IdentityProviderARN>`, `<RoleARN>` 

1. SAML Assertion Consumer Service(ACS) 엔드포인트를 `SAMLValidator` 호출로 업데이트합니다URL.

SAML 검사기 예제 코드:

```
import requests
import os
import boto3
from urllib.parse import urlparse, parse_qs
import base64
import requests
from aws_requests_auth.aws_auth import AWSRequestsAuth
import json


# Config for calling AssumeRoleWithSAML
idp_arn = "arn:aws:iam::0123456789:saml-provider/MyIdentityProvider"
api_gw_role_arn = 'arn:aws:iam:: 0123456789:role/APIGWAccessRole'
studio_api_url = "abcdef.execute-api.us-east-1.amazonaws.com"
studio_api_gw_path = "https://" + studio_api_url + "/Prod "

# Every customer will need to get SAML Response from the POST call
def get_saml_response(event):
    saml_response_uri = base64.b64decode(event['body']).decode('ascii')
    request_body = parse_qs(saml_response_uri)
    print(f"b64 saml response: {request_body['SAMLResponse'][0]}")
    return request_body['SAMLResponse'][0]


def lambda_handler(event, context):
    sts = boto3.client('sts')
    
    # get temporary credentials 
    response = sts.assume_role_with_saml(
                    RoleArn=api_gw_role_arn,
                    PrincipalArn=durga_idp_arn,
                    SAMLAssertion=get_saml_response(event)
                )    
    auth = AWSRequestsAuth(aws_access_key=response['Credentials']['AccessKeyId'],
                      aws_secret_access_key=response['Credentials']['SecretAccessKey'],
                      aws_host=studio_api_url,
                      aws_region='us-west-2',
                      aws_service='execute-api',
                      aws_token=response['Credentials']['SessionToken'])
                      
    presigned_response = requests.post(
        studio_api_gw_path,
        data=saml_response_data,
        auth=auth)
        
    return presigned_response
```