

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

# 設定 Kubernetes 角色型存取控制
<a name="sagemaker-hyperpod-eks-setup-rbac"></a>

叢集管理員使用者還需要為資料科學家使用者設定 [Kubernetes 角色型存取控制 (RBAC)](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)，以使用 [SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli) 在與 Amazon EKS 協作的 HyperPod 叢集上執行工作負載。

## 選項 1：使用 Helm Chart 設定 RBAC
<a name="sagemaker-hyperpod-eks-setup-rbac-helm"></a>

SageMaker HyperPod 服務團隊提供 Helm 子圖表，用於設定 RBAC。如需詳細資訊，請參閱 [使用 Helm 在 Amazon EKS 叢集上安裝套件](sagemaker-hyperpod-eks-install-packages-using-helm-chart.md)。

## 選項 2：手動設定 RBAC
<a name="sagemaker-hyperpod-eks-setup-rbac-manual"></a>

建立具有最低權限的 `ClusterRole` 和 `ClusterRoleBinding`，並建立具有變動許可的 `Role` 和 `RoleBinding`。

**為資料科學家 IAM 角色建立 `ClusterRole` 和 `ClusterRoleBinding`**

建立叢集層級組態檔案 `cluster_level_config.yaml`，如下所示。

```
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: hyperpod-scientist-user-cluster-role
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["list"]
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: hyperpod-scientist-user-cluster-role-binding
subjects:
- kind: Group
  name: hyperpod-scientist-user-cluster-level
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: hyperpod-scientist-user-cluster-role # this must match the name of the Role or ClusterRole you wish to bind to
  apiGroup: rbac.authorization.k8s.io
```

將組態套用至 EKS 叢集。

```
kubectl apply -f cluster_level_config.yaml
```

**在命名空間中建立角色和 RoleBinding**

這是執行訓練任務的命名空間訓練運算子，而且根據預設，彈性將會進行監控。任務自動繼續只能在 `kubeflow` 命名空間或字首為 `aws-hyperpod` 的命名空間中得到支援。

建立角色組態檔案 `namespace_level_role.yaml`，如下所示。此範例會在 `kubeflow` 命名空間建立角色。

```
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: kubeflow
  name: hyperpod-scientist-user-namespace-level-role
###
#  1) add/list/describe/delete pods
#  2) get/list/watch/create/patch/update/delete/describe kubeflow pytroch job
#  3) get pod log
###
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["create", "get"]
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["get", "list"]
- apiGroups: [""]
  resources: ["pods/log"]
  verbs: ["get", "list"]
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["get", "create"]
- apiGroups: ["kubeflow.org"]
  resources: ["pytorchjobs", "pytorchjobs/status"]
  verbs: ["get", "list", "create", "delete", "update", "describe"]
- apiGroups: [""]
  resources: ["configmaps"]
  verbs: ["create", "update", "get", "list", "delete"]
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["create", "get", "list", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: kubeflow
  name: hyperpod-scientist-user-namespace-level-role-binding
subjects:
- kind: Group
  name: hyperpod-scientist-user-namespace-level
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: hyperpod-scientist-user-namespace-level-role # this must match the name of the Role or ClusterRole you wish to bind to
  apiGroup: rbac.authorization.k8s.io
```

將組態套用至 EKS 叢集。

```
kubectl apply -f namespace_level_role.yaml
```

## 建立 Kubernetes 群組的存取項目
<a name="sagemaker-hyperpod-eks-setup-rbac-access-entry"></a>

在使用上述兩個選項之一設定 RBAC 之後，請使用下列範例命令取代必要資訊。

```
aws eks create-access-entry \
    --cluster-name <eks-cluster-name> \
    --principal-arn arn:aws:iam::<AWS_ACCOUNT_ID_SCIENTIST_USER>:role/ScientistUserRole \
    --kubernetes-groups '["hyperpod-scientist-user-namespace-level","hyperpod-scientist-user-cluster-level"]'
```

針對 `principal-arn` 參數，您需要使用 [科學家的 IAM 使用者](sagemaker-hyperpod-prerequisites-iam.md#sagemaker-hyperpod-prerequisites-iam-cluster-user)。