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 :Aug 11, 2026

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"]

apiGroups: [""]

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

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

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

Important

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é

  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, sélectionnez l'onglet Cluster Role. Cliquez ensuite sur Create.

  4. 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é

  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, 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.

  3. 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é

  1. 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"]
  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 : Assigner le ClusterRole personnalisé

  1. 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
  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 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 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"]