Gérer les accès pour les utilisateurs OKS

OKS vous permet de gérer les accès à vos clusters Kubernetes. Vous pouvez accorder des droits d’accès par utilisateur, des accès temporaires, et accès à des traces de log spécifiques.

Configurer des accès en fonction des utilisateurs

Vous pouvez générer des fichiers kubeconfig spécifiques pour votre cluster Kubernetes. Cela vous permet de gérer les accès d’un cluster pour chaque utilisateur, et de suivre leurs actions dans les logs d’accès du cluster. La valeur par défaut de ce paramètre est kube-user.

Exemple de requête
$ oks-cli cluster kubeconfig \
  --project-name NAME_OF_PROJECT \
  --cluster-name NAME_OF_CLUSTER \
  --user user2 \
  --print-path

Cette commande contient les options suivantes que vous devez spécifier :

  • cluster-name : Le nom du cluster, d’une longueur maximale de 40 caractères alphanumériques et tirets (-). Ce nom ne doit pas commencer ou finir par un tiret, et il doit être unique dans le projet.

  • (optionnel) project-name : Le nom du projet dans lequel le cluster a été créé.

  • user : Le nom de l’utilisateur.

Pour accorder des droits au nouvel utilisateur, vous devez lui appliquer le contrôle d’accès basé sur les rôles (RBAC) correspondant à son nom d’utilisateur, ou lui appliquer un des groupes existants. Pour en savoir plus sur le RBAC, voir la documentation Kubernetes (anglais uniquement).

Gérer les droits pour les groupes

Au sein d’un projet, vous pouvez gérer les droits pour différentes équipes ou différents rôles en assignant les groupes qui utilisent le RBAC aux fichiers kubeconfigs qui ont été générés.

Le groupe par défaut est cluster-admin. Il possède tous les droits sur le cluster, à l’exception d’actions qui sont considérées comme dangereuses.

Les noms de groupe commençant par system: et oks: sont réservés au cluster. Les requêtes pour obtenir les configurations associées entraîneront une erreur.

Exemple de requête
$ oks-cli cluster kubeconfig \
  --project-name NAME_OF_PROJECT \
  --cluster-name NAME_OF_CLUSTER \
  --group "devops" \
  --print-path

Cette commande contient les options suivantes que vous devez spécifier :

  • cluster-name : Le nom du cluster, d’une longueur maximale de 40 caractères alphanumériques et tirets (-). Ce nom ne doit pas commencer ou finir par un tiret, et il doit être unique dans le projet.

  • (optionnel) project-name : Le nom du projet dans lequel le cluster a été créé.

  • group : Le nom du groupe.

Après avoir obtenu votre fichier kubeconfig admin, vous pouvez appliquer les définitions RBAC requises, et générer des droits d’accès limités.

Donner accès à un seul namespace

  1. Pour accorder des droits d’accès à un namespace, vous devez remplacer la valeur suivante dans les paramètres RBAC du fichier YAML :

    • namespace-admin : Le nom du groupe auquel vous voulez accorder des droits.

    • target-namespace : Le namespace auquel vous voulez donner accès.

      ---
      # Service Account
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: namespace-admin
        namespace: target-namespace
      
      ---
      # Role definition with full permissions in the namespace
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
        name: namespace-admin-role
        namespace: target-namespace
      rules:
        - apiGroups: ["*"]
          resources: ["*"]
          verbs: ["*"]
      
      ---
      # RoleBinding to bind the Role to the ServiceAccount
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: namespace-admin-binding
        namespace: target-namespace
      subjects:
      - kind: Group
        name: namespace-admin
        namespace: target-namespace
      roleRef:
        kind: Role
        name: namespace-admin-role
        apiGroup: rbac.authorization.k8s.io
  2. Appliquez le manifeste, puis rafraîchissez le fichier kubeconfig correspondant :

    Exemple de requête
    $ oks-cli cluster kubeconfig \
      --project-name NAME_OF_PROJECT \
      --cluster-name NAME_OF_CLUSTER \
      --group "namespace-admin" \
      --print-path \
      --refresh

Donner accès en lecture seule

  1. Pour donner accès en lecture seule à un cluster, vous devez remplacer la valeur suivante dans les paramètres RBAC du fichier YAML :

    readonly-users : Le nom du groupe auquel vous voulez accorder des droits.

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: readonly
      labels:
        app.kubernetes.io/name: readonly
        app.kubernetes.io/part-of: rbac-system
    rules:
    - apiGroups: ["*"]
      resources: ["*"]
      verbs: ["get", "list", "watch"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: readonly-binding
      labels:
        app.kubernetes.io/name: readonly-binding
        app.kubernetes.io/part-of: rbac-system
    subjects:
    - kind: Group
      name: readonly-users
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: readonly
      apiGroup: rbac.authorization.k8s.io
    ---
    # Optional: ServiceAccount for programmatic access
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: readonly-service-account
      namespace: default
      labels:
        app.kubernetes.io/name: readonly-service-account
        app.kubernetes.io/part-of: rbac-system
    ---
    # Optional: RoleBinding for ServiceAccount
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: readonly-sa-binding
      labels:
        app.kubernetes.io/name: readonly-sa-binding
        app.kubernetes.io/part-of: rbac-system
    subjects:
    - kind: ServiceAccount
      name: readonly-service-account
      namespace: default
    roleRef:
      kind: ClusterRole
      name: readonly
      apiGroup: rbac.authorization.k8s.io
  2. Appliquez le manifeste, puis générez le fichier kubeconfig correspondant :

    Exemple de requête
    $ oks-cli cluster kubeconfig \
      --project-name NAME_OF_PROJECT \
      --cluster-name NAME_OF_CLUSTER \
      --group "readonly-users" \
      --refresh

Pages connexes