Utiliser le contrôle d'accès basé sur les rôles avec Oracle Cloud Native Environment
Présentation
Avec l'augmentation du nombre de déploiements dans votre grappe Kubernetes, vous aurez peut-être besoin d'aide pour la gérer. L'API Kubernetes permet d'ajouter des utilisateurs et de définir leurs autorisations à la grappe.
Une fois l'utilisateur authentifié, Kubernetes vérifie les actions que l'utilisateur est autorisé à effectuer. Le contrôle d'accès basé sur le rôle est pris en charge de manière native par Kubernetes et activé par défaut dans Oracle Cloud Native Environment (Oracle CNE). Ce qui en fait l'une des méthodes de contrôle d'accès couramment utilisées. Le contrôle d'accès par rôle (RBAC) vous permet de gérer l'accès aux ressources déployées dans l'environnement Kubernetes en appliquant des règles qui limitent l'accès des utilisateurs aux ressources de grappe. Ces règles peuvent être restreintes à l'espace de noms à l'aide d'un rôle ou à l'échelle de la grappe à l'aide d'un ClusterRole.
Vous trouverez utile de comprendre les principaux composants du contrôle d'accès basé sur les rôles (RBAC) dans Kubernetes, à savoir :
- Rôles : Jeu défini d'autorisations qui définissent les actions autorisées dans un espace de noms.
- RoleBindings : Permet de lier un rôle à un utilisateur ou à un compte de service dans un espace de noms.
- ClusterRole : Jeu défini d'autorisations définissant des actions autorisées sur tous les espaces de noms de la grappe.
- ClusterRoleBindings : Permet de lier un ClusterRole à des comptes d'utilisateur ou de service dans tous les espaces de noms de la grappe.
- Objets : Il s'agit d'utilisateurs, de groupes ou de comptes de service liés aux rôles ou à ClusterRoles.
- Autorisations : Elles définissent les actions autorisées qu'un rôle, ou ClusterRole, peut effectuer sur une ressource spécifiée. Ils sont associés à des rôles et à des rôles de grappe plutôt qu'à des utilisateurs ou à des comptes de service.
Un autre moyen de gérer l'accès à la grappe Kubernetes est le contrôle d'accès basé sur les attributs, qui permet un réglage plus fin des politiques par rapport au contrôle d'accès basé sur les attributs. Mais cela sort du cadre de ce tutoriel.
Ce tutoriel présente les bases de l'utilisation du contrôle d'accès par rôle (RBAC) pour gérer l'accès à votre grappe Kubernetes et présente un cas d'utilisation simple.
Pour plus d'informations sur Oracle Cloud Native Environment 2, veuillez consulter la documentation de version actuelle.
Objectifs
Dans ce tutoriel, vous apprendrez à :
- Créez un rôle pour démontrer la restriction des autorisations d'utilisateur par espace de noms.
- Créez une valeur ClusterRole pour démontrer l'octroi d'autorisations d'utilisateur à l'échelle de la grappe.
Préalables
- Installation d'Oracle Cloud Native Environment (Oracle CNE)
- Un noeud de contrôle unique et un noeud de travail
Configurer Oracle Cloud Native Environment
Note : Si vous exécutez votre propre location, lisez les préalables du projet linux-virt-labs
GitHub README.md et remplissez les conditions requises avant de déployer l'environnement de laboratoire.
-
Ouvrez un terminal sur le Luna Desktop.
-
Clonez le projet
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Accédez au répertoire de travail.
cd linux-virt-labs/ocne2
-
Installez les collections requises.
ansible-galaxy collection install -r requirements.yml
-
Déployez l'environnement de l'exercice.
ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e install_ocne_rpm=true -e create_ocne_cluster=true -e "ocne_cluster_node_options='-n 1 -w 1'"
L'environnement de laboratoire gratuit nécessite la variable supplémentaire
local_python_interpreter
, qui définitansible_python_interpreter
pour les lectures exécutées sur localhost. Cette variable est nécessaire car l'environnement installe l'ensemble RPM pour la trousse SDK Oracle Cloud Infrastructure pour Python, située sous les modules python3.6.La forme de déploiement par défaut utilise le processeur AMD et Oracle Linux 8. Pour utiliser une unité centrale Intel ou Oracle Linux 9, ajoutez
-e instance_shape="VM.Standard3.Flex"
ou-e os_version="9"
à la commande de déploiement.Important : Attendez que le livre de jeu s'exécute avec succès et atteignez la tâche Mettre en pause. À ce stade du livre de jeux, l'installation du CNE Oracle est terminée et les instances sont prêtes. Prenez note de la lecture précédente, qui imprime les adresses IP publiques et privées des noeuds qu'il déploie et toutes les autres informations de déploiement nécessaires lors de l'exécution de l'exercice.
Accéder à la grappe Kubernetes
-
Ouvrez un terminal et connectez-vous au moyen de SSH à l'instance ocne.
ssh oracle@<ip_address_of_instance>
-
Attendez que la grappe se stabilise et que tous les pods soient en cours d'exécution.
watch kubectl get pods -A
Une fois que tous les pods affichent le statut STATUS En cours d'exécution, entrez
Ctrl-C
pour quitter la commandewatch
. -
Vérifiez le nombre de noeuds présents.
kubectl get nodes
Confirmer la configuration RBAC courante
RBAC gère les autorisations pour les actions que vous effectuez sur les ressources déployées sur votre grappe Kubernetes. Vous allez vérifier que RBAC est activé et vérifier les rôles par défaut dans votre grappe.
-
Confirmer que le contrôle d'accès par rôle (RBAC) est activé.
Si l'API
rbac.authorization.k8s.io
est visible, cela signifie que RBAC est configuré et utilisé pour contrôler les actions que les utilisateurs ou les comptes de service peuvent effectuer sur les ressources de grappe.kubectl api-versions | grep rbac
Exemple de sortie :
[oracle@ocne ~]$ kubectl api-versions | grep rbac rbac.authorization.k8s.io/v1
-
Afficher les rôles de grappe intégrés.
kubectl get clusterroles | grep admin
Exemple de sortie :
[oracle@ocne ~]$ kubectl get clusterroles | grep admin admin 2025-07-23T10:21:55Z cluster-admin 2025-07-23T10:21:55Z system:aggregate-to-admin 2025-07-23T10:21:55Z system:kubelet-api-admin 2025-07-23T10:21:55Z
Les utilisateurs normaux utilisent les rôles
admin
etcluster-admin
, tandis que l'API RBAC réserve les rôlessystem:
pour les composants internes. -
Listez les autorisations pour
cluster-admin
.kubectl describe clusterrole cluster-admin
Exemple de sortie :
[oracle@ocne ~]$ kubectl describe clusterrole cluster-admin Name: cluster-admin Labels: kubernetes.io/bootstrapping=rbac-defaults Annotations: rbac.authorization.kubernetes.io/autoupdate: true PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- *.* [] [] [*] [*] [] [*]
Les astérisques des colonnes Verbes et Ressources signifient que le rôle
cluster-admin
peut effectuer n'importe quelle action. Une liste de haut niveau des opérations (verbes) disponibles pour chaque version de Kubernetes est disponible dans l'aperçu de l'API pour cette version. Par exemple, dans Kubernetes v1.33.0. Une liste détaillée des opérations valides (Verbes) disponibles pour chaque type de ressource est disponible en exécutantkubectl api-resources -o wide
à partir de la ligne de commande.Toutefois, comme vous ne vous connectez pas à
kubectl
, comment Kubernetes sait-il qui est l'utilisateur qui exécute la commande? Les systèmes de production utilisent généralement un serveur LDAP pour l'authentification. Un fichier ServiceAccount peut être utilisé si un système d'authentification externe n'est pas disponible.Note : ServiceAccounts sont utilisés par les charges de travail automatisées, telles que les pipelines d'intégration et de développement en continu, mais peuvent également être utilisés pour les tests.
Créer un rôle
Un rôle est une ressource restreinte à l'espace de noms qui définit les autorisations d'accès aux ressources Kubernetes dans un espace de noms unique.
Créer un espace de noms et un rôle
-
Créez un espace de noms.
Créez un espace de noms pour cet exemple.
kubectl create namespace rbac-example
-
Créer un rôle.
Créez un rôle qui accorde l'accès en lecture seule ('get' et 'list' autorisations) aux pods et aux déploiements dans l'espace de noms rbac-exemple.
cat << EOF | tee pod-reader-role.yaml > /dev/null apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: pod-reader namespace: rbac-example rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list"] - apiGroups: ["apps"] resources: ["deployments"] verbs: ["get", "list"] EOF
Où :
rules:
- Définit les autorisations accordées au rôle. Cet exemple définit deux règles (voir ci-dessous).apiGroups: [""]
- Permet à l'utilisateur ou au compte de service lié à cette règle d'extraire et de lister les pods dans l'espace de nomsrbac-example
.apiGroups: ["apps"]
- Permet à l'utilisateur ou au compte de service lié à cette règle d'extraire et de lister les déploiements dans l'espace de nomsrbac-example
.
-
Appliquez le fichier.
kubectl apply -f pod-reader-role.yaml
-
Vérifiez les autorisations du rôle de lecteur de pod nouvellement créé.
kubectl describe role/pod-reader -n rbac-example
Exemple de sortie :
[oracle@ocne ~]$ kubectl describe role/pod-reader -n rbac-example Name: pod-reader Labels: <none> Annotations: <none> PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- pods [] [] [get list] deployments.apps [] [] [get list]
Créer un utilisateur et lier au rôle
-
Créez un utilisateur ServiceAccount nommé pod-reader-user et liez-le au rôle pod-reader.
cat << EOF | tee pod-reader-user.yaml > /dev/null apiVersion: v1 kind: ServiceAccount metadata: name: pod-reader-user namespace: rbac-example --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: pod-reader-binding namespace: rbac-example roleRef: name: pod-reader kind: Role subjects: - kind: ServiceAccount name: pod-reader-user namespace: rbac-example EOF
Où :
- ServiceAccount crée le compte de service.
name:
- Nom de l'utilisateur du compte de service (pod-reader-user
).namespace
- Espace de noms où il est créé (rbac-example
).
- RoleBinding accorde les autorisations relatives à l'espace de noms au compte de service.
roleRef:
- Spécifie le rôle de liaison. Dans cet exemple, il référence un rôle nommépod-reader
.subjects:
- Spécifie l'entité à laquelle accorder les autorisations. Dans cet exemple, un compte de service nommépod-reader-user
.
- ServiceAccount crée le compte de service.
-
Appliquez le fichier.
kubectl apply -f pod-reader-user.yaml
Tester RoleBinding
Ensuite, testez RoleBinding en créant un nouveau pod et en y accédant à l'aide du nouveau compte de service pod-reader-user.
-
Créez un nouveau déploiement de test.
cat << EOF | tee testpod.yaml > /dev/null apiVersion: v1 kind: Pod metadata: name: test-pod namespace: rbac-example spec: containers: - name: test-container image: ghcr.io/oracle/oraclelinux9-nginx:1.20 ports: - containerPort: 80 serviceAccountName: pod-reader-user EOF
Où :
spec:
définit l'état souhaité du pod.containers:
- Spécifie la liste des conteneurs à exécuter dans le pod. Dans cet exemple, il n'y a qu'un seul conteneur.name:
- Nom du conteneur (test-container
).image:
- Image à utiliser (ghcr.io/oracle/oraclelinux9-nginx:1.20
).ports:
- Spécifie le port exposé par le conteneur. Dans cet exemple, il s'agit du port 80 (containerPort: 80
).
serviceAccountName:
- Spécifie le compte de service à utiliser pour le pod. Dans cette configuration, le pod utilise les autorisations et les données d'identification affectées au compte de servicepod-reader-user
.
-
Appliquez le fichier.
kubectl apply -f testpod.yaml
-
Maintenant, essayez d'accéder au pod à l'aide de pod-reader-user ServiceAccount.
kubectl auth can-i get pod/test-pod --as=system:serviceaccount:rbac-example:pod-reader-user -n rbac-example
Vous devez voir
yes
comme sortie, indiquant que pod-reader-user est autorisé à accéder au pod.Note : Utilisez la fonctionnalité
kubectl auth can-i
pour exécuter des commandes en tant que compte d'utilisateur ServiceAccount nouvellement créé afin de vérifier qu'une action est autorisée. -
Vérifiez que ServiceAccount fonctionne comme prévu.
kubectl --as=system:serviceaccount:rbac-example:pod-reader-user get pods -n rbac-example
Exemple de sortie :
[oracle@ocne ~]$ kubectl --as=system:serviceaccount:rbac-example:pod-reader-user get pods -n rbac-example NAME READY STATUS RESTARTS AGE test-pod 1/1 Running 0 109s
-
Essayez de supprimer un pod à l'aide du rôle
pod-reader-user
.kubectl --as=system:serviceaccount:rbac-example:pod-reader-user delete pod test-pod -n rbac-example
Exemple de sortie :
[oracle@ocne ~]$ kubectl --as=system:serviceaccount:rbac-example:pod-reader-user delete pod test-pod -n rbac-example Error from server (Forbidden): pods "test-pod" is forbidden: User "system:serviceaccount:rbac-example:pod-reader-user" cannot delete resource "pods" in API group "" in the namespace "rbac-example"
Le rôle
pod-reader-user
ne peut pas supprimer les pods dansrbac-example
. Peut-être peuvent-ils commencer de nouveaux pods? -
Essayez d'exécuter un pod à l'aide du rôle
pod-reader-role
.kubectl run nginx1 --image=ghcr.io/oracle/oraclelinux9-nginx:1.20 --as=system:serviceaccount:default:my-serviceaccount -n rbac-example
Exemple de sortie :
[oracle@ocne ~]$ kubectl run nginx1 --image=ghcr.io/oracle/oraclelinux9-nginx:1.20 --as=system:serviceaccount:rbac-example:pod-reader-user -n rbac-example Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:rbac-example:pod-reader-user" cannot create resource "pods" in API group "" in the namespace "rbac-example"
Cette erreur est correcte car le rôle
pod-reader-user
n'est autorisé à effectuer que des actionsget
etlist
sur les ressources de pod dans l'espace de noms rbac-example de la grappe. Les autres actions, delete (Supprimer) ou create (Créer), ne sont pas autorisées.
Créer un ClusterRole
ClusterRoles est similaire aux rôles, mais ils définissent les autorisations autorisées sur les ressources dans l'ensemble de la grappe.
Note : Soyez prudent lorsque vous accordez des autorisations trop générales. Utilisez plutôt le moins 'principe du moindre privilège' pour accorder aux utilisateurs et aux comptes de service uniquement les autorisations nécessaires pour effectuer les tâches qui leur sont affectées.
Créer un fichier ClusterRole et ClusterRoleBinding
L'exemple précédent montre comment créer un utilisateur et un rôle propres à un espace de noms. Les étapes suivantes montrent comment créer un fichier ClusterRole et le lier à un utilisateur pour lui accorder un accès administrateur à l'échelle de la grappe.
-
Créez une nouvelle ClusterRole.
Cette commande ClusterRole permet aux utilisateurs qui y sont ajoutés d'effectuer toute action sur toutes les ressources de la grappe.
cat << EOF | tee cluster-admin-clusterrole.yaml > /dev/null apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: cluster-admin-cr rules: - apiGroups: ["*"] resources: ["*"] verbs: ["*"] EOF
Où :
rules:
- Définit les autorisations accordées à ClusterRole. Cet exemple ne comporte qu'une seule règle :apiGroups: ["*"]
- Spécifie que la règle s'applique à tous les groupes d'API.resources: ["*"]
- Spécifie que la règle s'applique à toutes les ressources des groupes d'API.verbs: ["*"]
- Spécifie que la règle accorde tous les verbes possibles sur les ressources, notammentget
,list
,create
,delete
, etc.
-
Appliquez le fichier.
kubectl apply -f cluster-admin-clusterrole.yaml
-
Créez un ClusterRoleBinding pour lier ClusterRole à un nouvel utilisateur.
ClusterRoleBinding est similaire à RoleBinding que vous avez créé précédemment, mais il a une portée de grappe.
cat << EOF | tee cluster-admin-user.yaml > /dev/null apiVersion: v1 kind: ServiceAccount metadata: name: cluster-admin-user namespace: rbac-example --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: cluster-admin-crb roleRef: name: cluster-admin-cr kind: ClusterRole subjects: - kind: ServiceAccount name: cluster-admin-user namespace: rbac-example EOF
Où :
subjects:
- Définit les entités auxquelles accorder des autorisations dans ClusterRole. Dans cet exemple, il s'agit du compte de servicecluster-admin-user
.
-
Appliquez le fichier.
kubectl apply -f cluster-admin-user.yaml
Tester ClusterRoleBinding
-
Testez le rôle de grappe en tentant d'accéder à une ressource dans un autre espace de noms. Par exemple, l'espace de noms par défaut.
kubectl auth can-i list pods --as=system:serviceaccount:rbac-example:cluster-admin-user -n default
Vous devriez voir
yes
comme sortie, indiquant que cluster-admin-user dispose d'un accès cluster-admin. -
Vérifiez que le nouveau fichier ClusterRole fonctionne comme prévu.
kubectl --as=system:serviceaccount:rbac-example:cluster-admin-user get pods -A
Exemple de sortie :
[oracle@ocne ~]$ kubectl --as=system:serviceaccount:rbac-example:cluster-admin-user get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-flannel kube-flannel-ds-ptwkz 1/1 Running 0 6h58m kube-flannel kube-flannel-ds-wn2g6 1/1 Running 0 6h58m kube-system coredns-7cbdbfd99c-7xqkl 1/1 Running 0 6h59m kube-system coredns-7cbdbfd99c-k2ssb 1/1 Running 0 6h59m kube-system etcd-ocne-control-plane-1 1/1 Running 0 6h59m kube-system kube-apiserver-ocne-control-plane-1 1/1 Running 0 6h59m kube-system kube-controller-manager-ocne-control-plane-1 1/1 Running 0 6h59m kube-system kube-proxy-48rm5 1/1 Running 0 6h59m kube-system kube-proxy-h4kd2 1/1 Running 0 6h58m kube-system kube-scheduler-ocne-control-plane-1 1/1 Running 0 6h59m ocne-system ocne-catalog-577b7cd5f9-bnvtm 1/1 Running 0 6h58m ocne-system ui-846bddd4b-lnrwm 1/1 Running 0 6h58m rbac-example test-pod 1/1 Running 0 6h34m
Cette sortie confirme que la nouvelle instance ClusterRole peut accéder à tous les espaces de noms définis dans la grappe.
Confirmer que l'utilisateur ClusterRole peut créer un nouveau déploiement
Testez ClusterRole pour voir si les utilisateurs affectés peuvent créer un nouveau déploiement. Essayez ensuite d'y accéder à l'aide de ClusterRole nouvellement créé.
-
Créez un nouveau déploiement de test.
cat << EOF | tee testpod2.yaml > /dev/null apiVersion: v1 kind: Pod metadata: name: test-pod2 namespace: default spec: containers: - name: test-container image: ghcr.io/oracle/oraclelinux9-nginx:1.20 ports: - containerPort: 8080 EOF
Notez que ce déploiement se déploie dans l'espace de noms 'default', et non dans l'espace de noms rbac-example utilisé précédemment.
-
Appliquez le fichier.
kubectl apply -f testpod2.yaml
-
Vérifiez que le déploiement est terminé.
kubectl --as=system:serviceaccount:rbac-example:cluster-admin-user get pods -A
Exemple de sortie :
[oracle@ocne ~]$ kubectl --as=system:serviceaccount:rbac-example:cluster-admin-user get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE default test-pod2 1/1 Running 0 28s kube-flannel kube-flannel-ds-shgh7 1/1 Running 0 38m kube-flannel kube-flannel-ds-zzrgh 1/1 Running 0 38m kube-system coredns-7cbdbfd99c-jg6lz 1/1 Running 0 38m kube-system coredns-7cbdbfd99c-wh5g4 1/1 Running 0 38m kube-system etcd-ocne-control-plane-1 1/1 Running 0 38m kube-system kube-apiserver-ocne-control-plane-1 1/1 Running 0 38m kube-system kube-controller-manager-ocne-control-plane-1 1/1 Running 0 38m kube-system kube-proxy-5qngx 1/1 Running 0 38m kube-system kube-proxy-6fz2q 1/1 Running 0 38m kube-system kube-scheduler-ocne-control-plane-1 1/1 Running 0 38m ocne-system ocne-catalog-577b7cd5f9-vz782 1/1 Running 0 38m ocne-system ui-846bddd4b-bbhtj 1/1 Running 0 38m rbac-example test-pod 1/1 Running 0 21m
Confirmer que le nouveau ClusterRole autorise les nouveaux déploiements dans un autre espace de noms.
Étapes suivantes
Ce tutoriel explique comment configurer et utiliser le contrôle d'accès basé sur les rôles avec Kubernetes en créant des rôles pour gérer l'accès aux ressources Kubernetes. Pour ce faire, vous définissez des rôles et des liaisons pour contrôler les actions autorisées sur les ressources d'un espace de noms ou à l'échelle d'une grappe. De cette façon, le contrôle granulaire fourni par RBAC est essentiel pour sécuriser votre environnement Kubernetes, en particulier pour les déploiements volumineux. Consultez la station de formation Oracle Linux pour obtenir des tutoriels et du contenu supplémentaires.
Liens connexes
- Documentation sur Oracle Cloud Native Environment
- Parcours Environnement natif Oracle Cloud
- Parcours d'apprentissage pour Oracle Linux
Autres ressources d'apprentissage
Explorez d'autres laboratoires sur le site docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir la documentation sur le produit, visitez Oracle Help Center.
Use Role-Based Access Control with Oracle Cloud Native Environment
G40837-01