Si les ClusterRoles prédéfinis disponibles dans la console Container Service for Kubernetes (ACK) ne répondent pas à vos besoins, créez des Roles et des ClusterRoles personnalisés. Cette approche permet de mettre en œuvre un contrôle d'accès basé sur les rôles (RBAC) granulaire et d'adapter les autorisations à vos exigences spécifiques. Cette rubrique explique comment configurer ces autorisations personnalisées.
Politiques RBAC personnalisées
Créez des manifests YAML personnalisés pour les Roles et les ClusterRoles afin d'appliquer un contrôle d'accès fin aux ressources de votre cluster ACK. Utilisez les informations relatives aux politiques des ressources suivantes comme guide.
Role (étendu au namespace)
L'exemple YAML suivant définit un Role nommé my-role. Ce Role accorde des autorisations en lecture seule sur les Pods dans le namespace par défaut.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: my-role
rules: # A list of permission rules.
- apiGroups: [""] # The API group of the resource. An empty string "" indicates the core API group.
resources: ["pods"] # The resource type that the rule applies to.
verbs: ["get", "list"] # The actions that are allowed on the resource.
ClusterRole (étendu au cluster)
L'exemple YAML suivant définit un ClusterRole nommé my-clusterrole. Ce ClusterRole accorde des autorisations en lecture seule sur les Pods et les Services à l'échelle du cluster entier.
Un ClusterRole est une ressource étendue au cluster. Si vous spécifiez un namespace dans le fichier YAML, cette indication est ignorée.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default # A namespace is not required for a ClusterRole.
name: my-clusterrole
rules: # A list of permission rules.
- apiGroups: [""] # The API group of the resource.
resources: ["pods"] # The resource type.
verbs: ["get", "list"] # The allowed actions.
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]
Cette méthode permet d'accorder un contrôle d'accès granulaire sur les ressources du cluster aux utilisateurs RAM ou aux rôles RAM.
Politiques de ressources courantes
-
Autorisations en lecture
get: lire les détails d'une ressource spécifique.list: répertorier une collection de ressources.watch: surveiller les modifications apportées aux ressources et recevoir des mises à jour en temps réel.
-
Autorisations en écriture
create: créer une nouvelle instance de ressource.update: modifier une ressource existante.patch: appliquer une modification partielle à une ressource existante.delete: supprimer une ressource spécifiée.
|
Nom de la ressource |
Type de ressource (resources) |
Groupe d'API (apiGroups) |
Autorisations (verbs) |
|
Pod |
resources: ["pods"] |
|
|
|
Service |
resources: ["services"] |
apiGroups: [""] |
|
|
ConfigMap |
resources: ["configmaps"] |
apiGroups: [""] |
|
|
Secret |
resources: ["secrets"] |
apiGroups: [""] |
|
|
PersistentVolume |
resources: ["persistentvolumes"] |
apiGroups: [""] |
|
|
PersistentVolumeClaim |
resources: ["persistentvolumeclaims"] |
apiGroups: [""] |
|
|
Namespace |
resources: ["namespaces"] |
apiGroups: [""] |
|
|
Deployment |
resources: ["deployments"] |
apiGroups: ["apps"] |
|
|
DaemonSet |
resources: ["daemonsets"] |
apiGroups: ["apps"] |
|
|
StatefulSet |
resources: ["statefulsets"] |
apiGroups: ["apps"] |
|
|
Ingress |
resources: ["ingresses"] |
apiGroups: ["networking.k8s.io"] |
|
|
NetworkPolicy |
resources: ["networkpolicies"] |
apiGroups: ["networking.k8s.io"] |
|
|
Job |
resources: ["jobs"] |
apiGroups: ["batch"] |
|
|
CronJob |
resources: ["cronjobs"] |
apiGroups: ["batch"] |
|
|
StorageClass |
resources: ["storageclasses"] |
apiGroups: ["storage.k8s.io"] |
|
|
HorizontalPodAutoscaler |
resources: ["horizontalpodautoscalers"] |
apiGroups: ["autoscaling"] |
|
Procédure
Appliquez des autorisations RBAC personnalisées via la console ACK ou à l'aide de kubectl.
La console Container Service for Kubernetes (ACK) prend uniquement en charge la liaison de ClusterRoles personnalisés. Pour lier un Role personnalisé, utilisez l'outil de ligne de commande kubectl.
Console
Étape 1 : Créer un ClusterRole personnalisé
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
Sur la page Role, sélectionnez l'onglet Cluster Role. Cliquez ensuite sur Create.
-
Dans le panneau Create YAML, saisissez le manifest YAML de votre politique personnalisée, puis cliquez sur OK pour créer le ClusterRole.
Cette étape utilise le YAML d'un ClusterRole (étendu au cluster) à titre d'exemple. Une fois le ClusterRole créé, consultez le ClusterRole personnalisé my-clusterrole dans l'onglet Cluster Role.
Étape 2 : Assigner le ClusterRole personnalisé
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Authorizations.
-
Sur la page Authorizations, configurez les autorisations de gestion.
Pour autoriser un utilisateur RAM : cliquez sur l'onglet RAM Users, repérez l'utilisateur RAM cible et cliquez sur Modify Permissions dans la colonne Actions pour accéder à la page Permissions.
Pour autoriser un rôle RAM : cliquez sur l'onglet RAM Role, sélectionnez le rôle RAM cible et cliquez sur Modify Permissions pour accéder à la page Permissions.
Cliquez sur +Add Permissions. Dans la boîte de dialogue, sélectionnez le Cluster où vous avez créé le ClusterRole ainsi que le Namespace que vous souhaitez autoriser. Dans la section Permissions, sélectionnez Custom. Dans la liste déroulante qui s'affiche, choisissez my-clusterrole, puis cliquez sur Submit.
kubectl
Étape 1 : Créer un ClusterRole personnalisé
-
Créez un fichier nommé my-clusterrole.yaml contenant le manifest YAML suivant.
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: my-clusterrole # namespace: default # A namespace is not required for a ClusterRole and is ignored if specified. rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["services"] verbs: ["get", "list", "watch"] -
Exécutez la commande suivante pour déployer le ClusterRole :
kubectl apply -f my-clusterrole.yaml
Étape 2 : Obtenir l'ID du sujet
Pour accorder des autorisations à un utilisateur RAM, obtenez son ID utilisateur. Pour plus d'informations, consultez la rubrique Afficher les détails d'un utilisateur RAM.
Pour accorder des autorisations à un rôle RAM, obtenez son ID de rôle. Pour plus d'informations, consultez la rubrique Afficher les informations d'un rôle RAM.
Étape 3 : Assigner le ClusterRole personnalisé
-
Créez un fichier nommé my-clusterrole-binding.yaml contenant le manifest YAML suivant.
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: my-clusterrole-binding subjects: - kind: User name: "20811XXXXXXXXX2288" # The user ID or role ID of the subject obtained in Step 2. roleRef: kind: ClusterRole name: my-clusterrole apiGroup: rbac.authorization.k8s.io -
Exécutez la commande suivante pour déployer le ClusterRoleBinding :
kubectl apply -f my-clusterrole-binding.yaml
Une fois les autorisations personnalisées accordées à l'utilisateur RAM ou au rôle RAM cible, obtenez le fichier kubeconfig du cluster et utilisez kubectl pour vous y connecter afin de vérifier les autorisations.
FAQ
Comment accorder l'accès au terminal de la console ?
Par défaut, un utilisateur RAM ou un rôle RAM ne peut pas accéder au terminal d'un conteneur depuis la console ACK, même s'il dispose des autorisations en lecture seule get et list pour les Pods. Cette action requiert les autorisations get et create sur la sous-ressource de Pod pods/exec.
Accordez donc les autorisations get et create sur la ressource pods/exec dans les règles (`rules`) d'un Role ou d'un ClusterRole, puis liez ce rôle à l'utilisateur ou au groupe d'utilisateurs cible. Voici un exemple.
Pour accéder au terminal : connectez-vous à la console ACK . Sur la page Clusters , cliquez sur le nom du cluster cible. Dans le volet de navigation de gauche, choisissez . Dans la colonne Actions , cliquez sur Terminal .
Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: ns-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
# Grant permissions on pods/exec in the namespace.
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["get", "create"]
ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
# namespace: default
name: my-clusterrole
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
- apiGroups: [""]
resources: ["services"]
verbs: ["get", "list"]
# Grant permissions on pods/exec in the cluster.
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["get", "create"]