Configuration du contrôle d’accès basé sur les rôles Kubernetes
Les utilisateurs administrateurs de clusters doivent également configurer le contrôle d’accès basé sur les rôles (RBAC) Kubernetes
Option 1 : Configuration de RBAC à l’aide des Charts de Helm
L’équipe de service SageMaker HyperPod fournit un sous-graphique Helm pour configurer RBAC. Pour en savoir plus, consultez Installation de packages sur le cluster Amazon EKS à l’aide de Helm.
Option 2 : Configuration manuelle de RBAC
Créez ClusterRole et ClusterRoleBinding avec le privilège minimum, et créez Role et RoleBinding avec des autorisations de mutation.
Pour créer ClusterRole et ClusterRoleBinding pour le rôle IAM de scientifique des données
Créez un fichier de configuration cluster_level_config.yaml au niveau du cluster comme suit.
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
Appliquez la configuration au cluster EKS.
kubectl apply -f cluster_level_config.yaml
Pour créer Role et RoleBinding dans l’espace de noms
Il s’agit des opérateurs d’entraînement de l’espace de noms qui exécutent les tâches d’entraînement et Resiliency surveillera par défaut. La reprise automatique des tâches peut être prise en charge uniquement dans l’espace de noms kubeflow ou dans l’espace de noms préfixé par aws-hyperpod.
Créez un fichier de configuration de rôle namespace_level_role.yaml comme suit. Cet exemple crée un rôle dans l’espace de noms 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
Appliquez la configuration au cluster EKS.
kubectl apply -f namespace_level_role.yaml
Création d’une entrée d’accès pour les groupes Kubernetes
Après avoir configuré RBAC à l’aide de l’une des deux options ci-dessus, utilisez l’exemple de commande suivant pour remplacer les informations nécessaires.
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"]'
Pour le paramètre principal-arn, vous devez utiliser les Utilisateurs IAM pour les scientifiques.