

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

# 設定許可
<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****SageMaker IDE/筆記本**) 功能時，必須建立並指派多個 IAM 角色。 SageMaker HyperPod 這些角色支援安全存取、路由、遠端 IDE 工作階段和 EBS 儲存佈建。下表摘要說明四個角色以及何時需要它們。

### 角色摘要資料表
<a name="role-table"></a>


| IAM 角色 | 是否為必要？ | 用途 | 誰使用它？ | SageMaker 主控台允許的自訂？ | 
| --- | --- | --- | --- | --- | 
|  Spaces 附加元件執行角色  |  一律為必要  |  允許 Spaces 控制器管理 Spaces、產生預先簽章URLs、管理 SSM 工作階段  |  附加元件控制器 Pod （特殊權限）  |  ✔ 是  | 
|  叢集內路由器角色  |  WebUI 存取時需要  |  允許路由器 Pod 執行 JWT 簽署的 KMS 操作 (WebUI 身分驗證）  |  叢集內路由器 Pod （特殊權限）  |  ✔ 是  | 
|  SSM 受管執行個體角色  |  遠端 IDE 存取的必要項目  |  SSM 代理程式附屬用於 SSH-over-SSM 遠端 IDE 工作階段  |  Space IDE Pod 中的 SSM 代理程式 （非附加元件 Pod)  |  ✔ 是  | 
|  EBS CSI 驅動程式附加元件的 IAM 角色  |  一律為必要  |  允許 EBS CSI 驅動程式建立create/attach/modify Spaces 工作負載的磁碟區  |  EBS CSI 驅動程式附加元件  |  自動建立  | 
|  外部 DNS 附加元件的 IAM 角色  |  WebUI 存取時需要  |  它可確保在客戶的 Route 53 託管區域中自動指派空間端點和叢集內元件的 DNS 名稱。  |  外部 DNS 附加元件  |  自動建立  | 

### 1. Spaces 附加元件執行角色 （必要）
<a name="add-n-execution-role"></a>

Spaces 附加元件執行角色始終是必要的，因為它由 SageMaker Spaces 附加元件控制器 Pod 使用，這是透過 EKS 附加元件安裝的管理元件。此角色可讓控制器管理 Spaces、佈建資源、與 SSM 互動，以及為遠端 IDE 和 WebUI 存取產生預先簽章URLs。它還支援用於請求簽署的 KMS 存取，以驗證 WebUI https 請求。透過 SageMaker 主控台安裝 SageMaker Spaces 附加元件時，可以自動建立此角色。對於手動建立， AWS 會提供 `AmazonSageMakerSpacesControllerPolicy`受管政策。

**參考信任政策**

```
{
  "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>

叢集內路由器角色由**路由器 Pod** 使用，這是驗證 Spaces WebUI 工作階段的特權元件。路由器使用 KMS 金鑰來建立和簽署 JWT 權杖，以授權使用者存取特定 Spaces。此角色允許路由器 Pod 產生資料金鑰，並將其解密。與控制器角色類似，它使用標籤型和叢集型範圍限制來強制執行安全性。透過 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>

註冊 SSM 受管執行個體以啟用遠端 IDE 存取時，會傳遞 SSM 受管執行個體角色。此角色允許 SSM 代理程式將 Pod 註冊為 SSM 受管執行個體，並使用 SSM Session Manager 通道進行遠端 IDE (SSH-over-SSM) 連線。可在使用 AWS SageMaker 主控台時自動建立。對於手動部署，客戶必須建立此角色並將其提供給 Spaces 附加元件。控制器 Pod 本身不會擔任此角色；它只會在呼叫 時提供它`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 驅動程式的 IAM 角色是必要的，因為 EBS CSI 驅動程式會為 Spaces 工作負載佈建持久性磁碟區。雖然 AWS受管 [AmazonEBSCSIDriverPolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEBSCSIDriverPolicy.html) 提供基準許可，但 SageMaker HyperPod 叢集需要[其他功能](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-ebs.html#sagemaker-hyperpod-eks-ebs-setup)，例如建立快速快照還原、標記叢集擁有的磁碟區，以及連接/刪除 HyperPod 受管節點的磁碟區。這些許可也包含 SageMaker 特定的 APIs，例如 `sagemaker:AttachClusterNodeVolume`。如果未安裝 EBS CSI 驅動程式，SageMaker 主控台現在會在 Spaces 附加元件安裝期間自動建立此角色，**不需要客戶動作**。

### 5. 外部 DNS 附加元件的 IAM 角色
<a name="role-external-nds"></a>

外部 DNS 附加元件會管理 HyperPod 叢集上服務和傳入資源的 DNS 記錄。它可確保在客戶的 Route 53 託管區域中自動指派空間端點和叢集內元件的 DNS 名稱。如今，客戶通常透過 EKS 主控台中的一鍵式選項手動安裝外部 DNS。作為改善 SageMaker Spaces 體驗的一部分，SageMaker 主控台現在會在 Spaces 附加元件安裝期間自動建立此角色，**無需客戶動作**。

## 工具 AWS 組存取 SageMaker Spaces 的許可設定
<a name="permission-for-toolkitl"></a>

若要允許 AWS VS Code Toolkit 資源總管側邊面板探索並連線至 SageMaker Spaces，需要下列 IAM 許可。這些許可允許 Toolkit 列出可用的 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 叢集 (SageMaker HyperPod)。
+ eks：GetToken 動作目前不支援資源層級限制，且必須使用資源："\$1"。這是 AWS 服務限制。用戶端身分驗證是透過 [EKS 存取項目](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)執行。