Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Restrict resource operations in a cluster by using custom RBAC

Dernière mise à jour :Oct 12, 2026

Lorsque 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 pour mettre en œuvre un contrôle d’accès basé sur les rôles (RBAC) granulaire.

Politiques RBAC personnalisées

Créez des manifestes YAML personnalisés pour les objets Role et ClusterRole afin de mettre en œuvre un contrôle d'accès granulaire aux ressources de votre cluster ACK. Utilisez les exemples suivants comme référence.

Mécanisme RBAC de Kubernetes

image

Role (limité à un namespace)

Un objet Role définit un ensemble d'autorisations limité à un seul namespace. Un objet RoleBinding associe ensuite le Role à des sujets, de sorte que les autorisations ne s'appliquent qu'à ce namespace. L'exemple YAML suivant définit un Role nommé my-role qui accorde un accès en lecture aux ressources Pod dans le namespace default.

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 (limité au cluster)

Un objet ClusterRole définit un ensemble d'autorisations limité à l'ensemble du cluster. Un objet ClusterRoleBinding associe ensuite le ClusterRole à des sujets, de sorte que les autorisations s'appliquent à l'échelle du cluster. L'exemple YAML suivant définit un ClusterRole nommé my-clusterrole qui accorde un accès en lecture aux ressources Pod et Service dans le cluster.

Un objet ClusterRole est une ressource limitée au cluster. La spécification d'un namespace dans le fichier YAML n'a aucun effet.
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"]

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 API (apiGroups)

Autorisations (verbs)

Pod

resources: ["pods"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Service

resources: ["services"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

ConfigMap

resources: ["configmaps"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Secret

resources: ["secrets"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

PersistentVolume

resources: ["persistentvolumes"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

PersistentVolumeClaim

resources: ["persistentvolumeclaims"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Namespace

resources: ["namespaces"]

apiGroups: [""]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Deployment

resources: ["deployments"]

apiGroups: ["apps"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

DaemonSet

resources: ["daemonsets"]

apiGroups: ["apps"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

StatefulSet

resources: ["statefulsets"]

apiGroups: ["apps"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Ingress

resources: ["ingresses"]

apiGroups: ["networking.k8s.io"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

NetworkPolicy

resources: ["networkpolicies"]

apiGroups: ["networking.k8s.io"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Job

resources: ["jobs"]

apiGroups: ["batch"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

CronJob

resources: ["cronjobs"]

apiGroups: ["batch"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

StorageClass

resources: ["storageclasses"]

apiGroups: ["storage.k8s.io"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

HorizontalPodAutoscaler

resources: ["horizontalpodautoscalers"]

apiGroups: ["autoscaling"]

verbs: ["get", "list", "watch", "update", "create", "patch", "delete"]

Procédure

image

Vous pouvez appliquer des autorisations RBAC personnalisées via la console ACK ou à l'aide de kubectl.

Important

La console Container Service for Kubernetes (ACK) permet uniquement de lier des ClusterRoles personnalisés. Pour lier un Role personnalisé, utilisez l'outil de ligne de commande kubectl.

Console

Étape 1 : Créer un ClusterRole personnalisé

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Security > Role.

  3. Sur la page Role, cliquez sur l'onglet Cluster Role. Cliquez ensuite sur Create.

  4. Dans le panneau Create YAML, saisissez le manifeste YAML de votre politique personnalisée, puis cliquez sur OK pour créer le ClusterRole.

    Cette étape utilise le YAML d'un ClusterRole (étendue au cluster) à titre d'exemple. Une fois le ClusterRole créé, vous pouvez consulter le ClusterRole personnalisé my-clusterrole dans l'onglet Cluster Role.

Étape 2 : Attribuer le ClusterRole personnalisé

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Authorizations.

  2. Sur la page Authorizations, configurez les autorisations de gestion.

    • Pour autoriser un utilisateur RAM : Cliquez sur l'onglet RAM Users, recherchez 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.

  3. Cliquez sur +Add Permissions. Dans la boîte de dialogue, sélectionnez le Cluster dans lequel 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, sélectionnez my-clusterrole, puis cliquez sur Submit.

kubectl

Étape 1 : Créer un ClusterRole personnalisé

  1. Créez un fichier nommé my-clusterrole.yaml contenant le manifeste YAML suivant.

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: my-clusterrole
    rules:
      - apiGroups: [""]
        resources: ["pods"]
        verbs: ["get", "list", "watch"]
      - apiGroups: [""]
        resources: ["services"]
        verbs: ["get", "list", "watch"]
  2. Exécutez la commande suivante pour déployer le ClusterRole :

    kubectl apply -f my-clusterrole.yaml

Étape 2 : Obtenir l'ID du sujet

Étape 3 : Attribuer le ClusterRole personnalisé

  1. Créez un fichier nommé my-clusterrole-binding.yaml contenant le manifeste 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.
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: my-clusterrole
      apiGroup: rbac.authorization.k8s.io
  2. 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 nécessite les autorisations get et create sur la sous-ressource Pod pods/exec.

Vous devez donc accorder les autorisations get et create sur la ressource pods/exec dans les règles rules d'un rôle ou d'un ClusterRole, puis lier 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 Workloads > Pods . 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"]