

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Kubernetes ロールベースのアクセスコントロールの設定
<a name="sagemaker-hyperpod-eks-setup-rbac"></a>

また、クラスター管理者ユーザーは、データサイエンティストユーザーが [SageMaker HyperPod CLI](https://github.com/aws/sagemaker-hyperpod-cli) を使用して Amazon EKS とオーケストされた HyperPod クラスターでワークロードを実行するために、[Kubernetes ロールベースのアクセスコントロール (RBAC)](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) を設定する必要があります。

## オプション 1: Helm チャートを使用して RBAC を設定する
<a name="sagemaker-hyperpod-eks-setup-rbac-helm"></a>

SageMaker HyperPod サービスチームは、RBAC を設定するための Helm サブチャートを提供しています。詳細については[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
```

**名前空間に Role と 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>

上記の 2 つのオプションのいずれかを使用して 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) を使用する必要があります。