

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

# 권한 설정
<a name="permission-setup"></a>

## 추가 기능 및 해당 종속성에 필요한 역할
<a name="permission-setup-addon"></a>

### SageMaker HyperPod의 SageMaker 스페이스에 필요한 IAM 역할
<a name="role-hyperpod"></a>

**SageMaker HyperPod(EKS) 클러스터에서 SageMaker Spaces(a.k.aSageMaker**** IDE/노트북 SageMaker**) 기능을 활성화할 때는 여러 IAM 역할을 생성하고 할당해야 합니다. SageMaker HyperPod 이러한 역할은 보안 액세스, 라우팅, 원격 IDE 세션 및 EBS 스토리지 프로비저닝을 지원합니다. 다음 표에는 네 가지 역할과 필요한 시기가 요약되어 있습니다.

### 역할 요약 테이블
<a name="role-table"></a>


| IAM 역할 | 필수 | 용도 | 누가 사용하나요? | SageMaker 콘솔에서 허용하는 사용자 지정 | 
| --- | --- | --- | --- | --- | 
|  스페이스 추가 기능 실행 역할  |  항상 필수  |  스페이스 컨트롤러가 스페이스를 관리하고, 미리 서명된 URLs 생성하고, SSM 세션을 관리할 수 있도록 허용합니다.  |  추가 기능 컨트롤러 포드(권한 있음)  |  ✔ 예  | 
|  클러스터 내 라우터 역할  |  WebUI 액세스에 필요  |  라우터 포드가 JWT 서명을 위한 KMS 작업을 수행하도록 허용(WebUI 인증)  |  클러스터 내 라우터 포드(권한 있음)  |  ✔ 예  | 
|  SSM 관리형 인스턴스 역할  |  원격 IDE 액세스에 필요  |  SSH-over-SSM 원격 IDE 세션에 SSM 에이전트 사이드카에서 사용  |  스페이스 IDE 포드의 SSM 에이전트(추가 기능 포드 아님)  |  ✔ 예  | 
|  EBS CSI 드라이버 추가 기능에 대한 IAM 역할  |  항상 필수  |  EBS CSI 드라이버가 Spaces 워크로드용 볼륨을 create/attach/modify하도록 허용  |  EBS CSI 드라이버 추가 기능  |  자동 생성됨  | 
|  외부 DNS 추가 기능에 대한 IAM 역할  |  WebUI 액세스에 필요  |  이를 통해 고객의 Route 53 호스팅 영역에서 스페이스 엔드포인트 및 클러스터 내 구성 요소에 DNS 이름을 자동으로 할당할 수 있습니다.  |  외부 DNS 추가 기능  |  자동 생성됨  | 

### 1. 스페이스 추가 기능 실행 역할(필수)
<a name="add-n-execution-role"></a>

Spaces 추가 기능 실행 역할은 EKS 추가 기능을 통해 설치된 관리 구성 요소인 SageMaker Spaces 추가 기능 컨트롤러 포드에서 사용되므로 항상 필요합니다. 이 역할을 통해 컨트롤러는 스페이스를 관리하고, 리소스를 프로비저닝하고, SSM과 상호 작용하고, 원격 IDE 및 WebUI 액세스 모두에 대해 미리 서명된 URLs을 생성할 수 있습니다. 또한 WebUI https 요청을 인증하기 위한 요청 서명에 사용되는 KMS 액세스를 지원합니다. 이 역할은 SageMaker 콘솔을 통해 SageMaker Spaces 추가 기능을 설치할 때 자동으로 생성될 수 있습니다. 수동 생성의 경우 `AmazonSageMakerSpacesControllerPolicy` 관리형 정책을 AWS 제공합니다.

**참조 신뢰 정책**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "pods.eks.amazonaws.com"
      },
      "Action": [
          "sts:AssumeRole",
          "sts:TagSession"
      ],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{accountId}}",
          "aws:SourceArn": "arn:aws:eks:{{region}}:{{accountId}}:cluster/{{eksClusterName}}"
        }
      }
    }
  ]
}
```

### 2. 클러스터 내 라우터 역할(WebUI 인증에 필요)
<a name="in-cluster-role"></a>

클러스터 내 라우터 역할은 Spaces WebUI 세션을 인증하는 권한 있는 구성 요소인** 라우터 포드**에서 사용됩니다. 라우터는 KMS 키를 사용하여 특정 스페이스에 대한 사용자 액세스를 승인하는 JWT 토큰을 생성하고 서명합니다. 이 역할을 통해 라우터 포드는 데이터 키를 생성하고 해독할 수 있습니다. 컨트롤러 역할과 마찬가지로 태그 및 클러스터 기반 범위 제한을 사용하여 보안을 적용합니다. 이 역할은 AWS SageMaker 콘솔을 통해 Spaces 추가 기능을 설치할 때 자동으로 생성될 수 있지만 고객은 수동으로 생성할 수 있습니다.

**참조 신뢰 정책**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "pods.eks.amazonaws.com"
      },
      "Action": [
          "sts:AssumeRole",
          "sts:TagSession"
      ],
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "{{accountId}}",
          "aws:SourceArn": "arn:aws:eks:{{region}}:{{accountId}}:cluster/{{eksClusterName}}"
        }
      }
    }
  ]
}
```

**참조 권한 정책**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "KMSDescribeKey",
            "Effect": "Allow",
            "Action": [
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:{{region}}:{{accountId}}:key/{{kmsKeyId}}"
        },
        {
            "Sid": "KMSKeyOperations",
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:{{region}}:{{accountId}}:key/{{kmsKeyId}}",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:sagemaker:component": "amazon-sagemaker-spaces",
                    "kms:EncryptionContext:sagemaker:eks-cluster-arn": "${aws:PrincipalTag/eks-cluster-arn}"
                }
            }
        }
    ]
}
```

### 3. SSM 관리형 인스턴스 역할(원격 IDE 액세스에 필요)
<a name="ssm-role"></a>

원격 IDE 액세스를 활성화하기 위해 SSM 관리형 인스턴스를 등록할 때 SSM 관리형 인스턴스 역할이 전달됩니다. 이 역할을 통해 SSM 에이전트는 포드를 SSM 관리형 인스턴스로 등록하고 원격 IDE(SSH-over-SSM) 연결을 위해 SSM 세션 관리자 채널을 사용할 수 있습니다. SageMaker 콘솔을 AWS 사용할 때 자동으로 생성할 수 있습니다. 수동 배포의 경우 고객은이 역할을 생성하여 Spaces 추가 기능에 제공해야 합니다. 컨트롤러 포드 자체는이 역할을 수임하지 않고를 호출할 때만 제공합니다`ssm:CreateActivation`.

**참조 신뢰 정책**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "{{account}}"
                },
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:ssm:{{region}}:{{account}}:*"
                }
            }
        }
    ]
}
```

**참조 권한 정책**

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:DescribeAssociation"
      ],
      "Resource": [
        "arn:aws:ssm:{{region}}:{{account}}:association/*",
        "arn:aws:ssm:{{region}}:{{account}}:document/*",
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetDocument",
        "ssm:DescribeDocument"
      ],
      "Resource": "arn:aws:ssm:{{region}}:{{account}}:document/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameter",
        "ssm:GetParameters"
      ],
      "Resource": "arn:aws:ssm:{{region}}:{{account}}:parameter/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:ListInstanceAssociations"
      ],
      "Resource": [
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:PutComplianceItems"
      ],
      "Resource": [
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:UpdateAssociationStatus"
      ],
      "Resource": [
        "arn:aws:ssm:{{region}}:{{account}}:document/*",
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:UpdateInstanceAssociationStatus"
      ],
      "Resource": [
        "arn:aws:ssm:{{region}}:{{account}}:association/*",
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:UpdateInstanceInformation"
      ],
      "Resource": [
        "arn:aws:ec2:{{region}}:{{account}}:instance/*",
        "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetDeployablePatchSnapshotForInstance",
        "ssm:GetManifest",
        "ssm:ListAssociations",
        "ssm:PutInventory",
        "ssm:PutConfigurePackageResult"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ssmmessages:CreateControlChannel",
        "ssmmessages:CreateDataChannel",
        "ssmmessages:OpenControlChannel",
        "ssmmessages:OpenDataChannel"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2messages:AcknowledgeMessage",
        "ec2messages:DeleteMessage",
        "ec2messages:FailMessage",
        "ec2messages:GetEndpoint"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2messages:GetMessages",
        "ec2messages:SendReply"
      ],
      "Resource": "*",
      "Condition": {
        "ArnLike": {
          "ssm:SourceInstanceARN": "arn:aws:ssm:{{region}}:{{account}}:managed-instance/*"
        }
      }
    }
  ]
}
```

### 4. EBS CSI 드라이버 추가 기능에 대한 IAM 역할
<a name="role-ebs-csi"></a>

EBS CSI 드라이버는 Spaces 워크로드에 영구 볼륨을 프로비저닝하기 때문에 EBS CSI 드라이버의 IAM 역할이 필요합니다. AWS관리형 [AmazonEBSCSIDriverPolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEBSCSIDriverPolicy.html)는 기본 권한을 제공하지만 SageMaker HyperPod 클러스터에는 빠른 스냅샷 복원 생성, 클러스터 소유 볼륨에 태그 지정, HyperPod 관리형 노드에 대한 볼륨 연결/분리와 같은 [추가 기능이](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-ebs.html#sagemaker-hyperpod-eks-ebs-setup) 필요합니다. 이러한 권한에는와 같은 SageMaker별 APIs도 포함됩니다`sagemaker:AttachClusterNodeVolume`. EBS CSI 드라이버가 설치되지 않은 경우 이제 Spaces 추가 기능 설치 중에 SageMaker 콘솔에서이 역할이 자동으로 생성되므로 **고객 작업이 필요하지 않습니다**.

### 5. 외부 DNS 추가 기능에 대한 IAM 역할
<a name="role-external-nds"></a>

외부 DNS 추가 기능은 HyperPod 클러스터의 서비스 및 수신 리소스에 대한 DNS 레코드를 관리합니다. 이를 통해 고객의 Route 53 호스팅 영역에서 스페이스 엔드포인트 및 클러스터 내 구성 요소에 DNS 이름을 자동으로 할당할 수 있습니다. 오늘날 고객은 EKS 콘솔에서 원클릭 옵션을 통해 외부 DNS를 수동으로 설치하는 경우가 많습니다. SageMaker Spaces 환경 개선의 일환으로 이제이 역할은 Spaces 추가 기능 설치 중에 SageMaker 콘솔에 의해 자동으로 생성되므로 **고객 작업이 필요하지 않습니다**.

## AWS Toolkit이 SageMaker Spaces에 액세스하기 위한 권한 설정
<a name="permission-for-toolkitl"></a>

 AWS VS Code Toolkit 리소스 탐색기 사이드 패널이 SageMaker Spaces를 검색하고 연결할 수 있도록 하려면 다음 IAM 권한이 필요합니다. 이러한 권한을 통해 도구 키트는 사용 가능한 SageMaker HyperPod 클러스터를 나열하고, 클러스터 세부 정보를 검색하고, 연결된 Amazon EKS 클러스터에 대한 연결 토큰을 얻을 수 있습니다.

**필수 IAM 정책**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SageMakerListClusters",
            "Effect": "Allow",
            "Action": "sagemaker:ListClusters",
            "Resource": "*"
        },
        {
            "Sid": "SageMakerDescribeCluster",
            "Effect": "Allow",
            "Action": "sagemaker:DescribeCluster",
            "Resource": "arn:aws:sagemaker:{{region}}:{{account}}:cluster/cluster-name"
        },
        {
            "Sid": "EksDescribeCluster",
            "Effect": "Allow",
            "Action": "eks:DescribeCluster",
            "Resource": "arn:aws:eks:{{region}}:{{account}}:cluster/cluster-name"
        },
        {
            "Sid": "EksGetToken",
            "Effect": "Allow",
            "Action": "eks:GetToken",
            "Resource": "*"
        }
    ]
}
```

**권장 사항 범위 지정**
+ cluster-name을 사용자가 액세스해야 하는 특정 SageMaker HyperPod 클러스터(들)로 바꿉니다.
+ eks:GetToken 작업은 현재 리소스 수준 제한을 지원하지 않으며 Resource: "\$1"를 사용해야 합니다. 이는 AWS 서비스 제한 사항입니다. 클라이언트 측 인증은 [EKS 액세스 항목을](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html) 통해 수행됩니다.