Configuration d'un bastion pour l'accès à un cluster
Découvrez comment configurer un bastion pour accéder aux clusters créés à l'aide de Kubernetes Engine (OKE).
Lorsque vous effectuez des opérations sur un cluster à l'aide de kubectl, vous devez avoir accès à l'adresse d'API Kubernetes. De même, lorsque vous effectuez des tâches d'administration sur les noeuds de processus actif, vous devez y avoir accès. Toutefois, l'accès à l'adresse d'API Kubernetes et/ou aux noeuds de processus actif peut être restreint en raison de règles de liste de sécurité ou parce que l'adresse d'API Kubernetes et/ou les noeuds de processus actif se trouvent dans un sous-réseau privé. Dans ce cas, vous pouvez configurer des bastions dans le service Oracle Cloud Infrastructure Bastion afin de fournir un accès sécurisé à l'adresse d'API Kubernetes et/ou aux noeuds de processus actif.
La configuration des bastions et des sessions de bastion implique un certain nombre de tâches différentes. Selon votre organisation, ces tâches peuvent être effectuées par la même personne ou par différentes personnes, comme suit :
- Un administrateur VCN est responsable de la création du VCN, des sous-réseaux et des règles de sécurité pour un cluster Kubernetes et un bastion. Les stratégies IAM permettent à l'administrateur VCN de gérer le VCN.
- Un administrateur de cluster est responsable de la création de bastions pour accéder aux adresses d'API Kubernetes et aux noeuds de processus actif, ainsi que de la création de sessions de bastion pour l'accès aux noeuds de processus actif. Les stratégies IAM permettent à l'administrateur de cluster de gérer les clusters et les bastions.
- Un utilisateur de cluster est responsable de la création de sessions de bastion pour accéder aux adresses d'API Kubernetes. Les stratégies IAM permettent à l'utilisateur de cluster d'utiliser des clusters et des bastions.
Ce diagramme présente un exemple de configuration de cluster avec un bastion fournissant un accès sécurisé à l'adresse d'API Kubernetes d'un cluster et aux noeuds de processus actif.
Stratégies IAM requises pour la création et l'utilisation de bastions pour accéder aux clusters
Pour plus d'informations sur les stratégies IAM requises pour créer des bastions et des sessions de bastion, reportez-vous à Stratégies de bastion.
Si vous le souhaitez, les administrateurs de cluster peuvent également configurer des stratégies IAM pour limiter les ressources auxquelles les utilisateurs de cluster peuvent accéder à l'aide d'un bastion. Reportez-vous à Configuration de stratégies IAM pour limiter l'utilisation des bastions.
Configuration d'un bastion pour accéder à l'adresse d'API Kubernetes
Pour que les utilisateurs de cluster puissent accéder à l'adresse d'API Kubernetes privée d'un cluster, les administrateurs VCN, les administrateurs de cluster et les utilisateurs de cluster doivent chacun effectuer un certain nombre d'étapes, comme décrit dans cette section.
Procédure d'administrateur VCN
En tant qu'administrateur VCN, suivez les étapes ci-dessous pour configurer des règles de sécurité sortantes et entrantes afin de permettre à un bastion d'accéder à l'adresse d'API Kubernetes :
- Créez un sous-réseau privé pour héberger le bastion, dans le même VCN que le cluster auquel vous souhaitez accorder l'accès.
Si vous avez déjà créé un sous-réseau pour héberger un bastion afin d'accéder aux noeuds de processus actif, vous pouvez réutiliser ce sous-réseau au lieu d'en créer un. Reportez-vous à Configuration d'un bastion pour fournir un accès SSH aux noeuds gérés.
-
Ajoutez la règle de sécurité sortante TCP/6443 suivante à la liste de sécurité associée au sous-réseau de bastion.
Cette règle de sécurité sortante autorise le trafic du sous-réseau du bastion vers le sous-réseau de l'adresse d'API Kubernetes du cluster.
Etat : Destination Protocole/Port de destination Description : Avec conservation de statut CIDR de l'adresse d'API Kubernetes (par exemple, 10.0.0.0/29) TCP/6443 Autoriser la communication entre le bastion et l'adresse d'API Kubernetes. - Si elle n'est pas déjà présente, ajoutez la règle de sécurité entrante TCP/6443 suivante à une liste de sécurité nouvelle ou existante associée au sous-réseau hébergeant l'adresse d'API Kubernetes.
Cette règle de sécurité entrante autorise le trafic vers le sous-réseau d'adresse d'API Kubernetes à partir du sous-réseau de bastion.
Etat : Source Protocole/Port de destination Description : Avec conservation de statut CIDR de sous-réseau du bastion TCP/6443 Autoriser la communication entre le bastion et l'adresse d'API Kubernetes. Remarque
Bien qu'il ne s'agisse pas de la conception préférée d'Oracle, vous pouvez utiliser le même sous-réseau à la fois pour le bastion et pour l'adresse d'API Kubernetes du cluster. Dans ce cas, ajoutez la règle de sécurité sortante TCP/6443 à la liste de sécurité associée au sous-réseau d'adresse d'API Kubernetes.
Procédure d'administrateur de cluster
En tant qu'administrateur de cluster, procédez comme suit pour configurer un bastion afin d'accéder à l'adresse d'API Kubernetes :
- Créez un bastion, comme suit :
- Dans la console, ouvrez le menu de navigation et sélectionnez Identité, sécurité.
- Sélectionnez Bastion.
- Sur la page Bastion, sélectionnez Créer un bastion.
- Dans la boîte de dialogue Créer un bastion, définissez les propriétés suivantes :
- Nom du bastion : nom du bastion. Evitez de saisir des informations confidentielles. Seuls les caractères alphanumériques sont pris en charge.
- Réseau cloud virtuel cible : indiquez le VCN du cluster Kubernetes auquel vous souhaitez accorder l'accès.
- Sous-réseau cible : sous-réseau destiné à héberger le bastion, avec les règles de sécurité entrantes et sortantes que vous avez configurées.
- Liste d'autorisation de bloc CIDR : plage d'adresses de la notation CIDR que vous souhaitez autoriser à se connecter aux sessions hébergées par ce bastion. Par exemple, 0.0.0.0/0 pour autoriser l'accès à partir d'Internet ou d'une plage d'adresses plus limitée. Par exemple : 203.0.113.0/24.
- (Optional) To change the maximum amount of time that any session on this bastion can remain active, select Show Advanced Options, and then enter a value for Maximum Session Time-to-Live.
- Sélectionnez Créer un bastion.
- Une fois le bastion créé, sélectionnez son nom pour afficher des informations le concernant, y compris son OCID.
Pour plus d'informations sur la création d'un bastion, reportez-vous à Procédure de création d'un bastion.
- Fournissez aux utilisateurs de cluster l'OCID du bastion.
- Assurez-vous que des stratégies IAM appropriées sont en place pour autoriser les utilisateurs de cluster à utiliser le bastion. Reportez-vous à Stratégies IAM requises pour la création et l'utilisation de bastions pour accéder aux clusters.
Si vous le souhaitez, vous pouvez également configurer des stratégies IAM pour limiter les ressources auxquelles les utilisateurs du cluster peuvent accéder à l'aide du bastion. Reportez-vous à Configuration de stratégies IAM pour limiter l'utilisation des bastions.
Procédure d'utilisateur de cluster
En tant qu'utilisateur de cluster, procédez comme suit pour créer une session de bastion afin d'accéder à l'adresse d'API Kubernetes :
- Si vous ne l'avez pas encore fait, créez le fichier kubeconfig pour le cluster auquel vous souhaitez accéder, en exécutant :
oci ce cluster create-kubeconfig \ --cluster-id <cluster OCID> \ --file $HOME/.kube/config \ --region <region> \ --token-version 2.0.0
- Modifiez le fichier kubeconfig du cluster et l'adresse IP indiquée pour
server
afin d'indiquer l'adresse IP et le port sur lesquels écouter le trafic SSH :- Localisez la ligne suivante :
server: https://x.x.x.x:6443
- Modifiez la ligne comme suit :
server: https://127.0.0.1:6443
Par exemple :
apiVersion: v1 clusters: - cluster: certificate-authority-data:______ server: https://127.0.0.1:6443 - name: cluster-xxxxxxx …
- Localisez la ligne suivante :
-
Créez une session de bastion à l'aide de la console ou de l'interface de ligne de commande comme suit :
Utilisation de la console- Sur la page Bastion, sélectionnez le nom du bastion créé par l'administrateur du cluster.
- Sur la page Sessions, sélectionnez Créer une session.
- Dans la boîte de dialogue Créer une session, définissez les propriétés suivantes :
- Type de session : sélectionnez Session de transmission de ports SSH.
- Nom de session : nom d'affichage de la nouvelle session. Evitez de saisir des informations confidentielles.
- Connexion à l'hôte cible en utilisant : sélectionnez Adresse IP.
- Adresse IP : indiquez la partie de l'adresse IP de l'adresse privée d'API Kubernetes du cluster (affichée sur la page Détails du cluster).
- Port : indiquez la partie de port de l'adresse privée d'API Kubernetes du cluster (affichée sur la page Détails du cluster). Par exemple, 6443.
- Clé SSH : indiquez le fichier de clés publiques d'une paire de clés SSH existante que vous souhaitez utiliser pour la session, ou générez une nouvelle paire de clés SSH et enregistrez la clé privée.
- (Facultatif) Pour modifier la durée maximale durant laquelle la session peut rester active, sélectionnez Afficher les options avancées, puis entrez une valeur pour Durée de vie de session maximale.
- Sélectionnez Créer une session.
Utilisation de l'interface de ligne de commandeoci bastion session create-port-forwarding \ --bastion-id <bastion OCID> \ --ssh-public-key-file <ssh public key> \ --target-private-ip <API Private IP endpoint> \ --target-port 6443
Pour plus d'informations sur la création d'une session de bastion, reportez-vous à Procédure de création d'une session.
-
Procurez-vous la commande suivante pour créer un tunnel SSH à l'aide de la console ou de la CLI :
Utilisation de la consoleSur la page Sessions, sélectionnez Copier la commande SSH dans le menu
en regard de la session que vous venez de créer.Utilisation de l'interface de ligne de commandeoci bastion session get --session-id <session OCID> | jq '.data."ssh-metadata".command'
La commande de tunnel SSH que vous avez obtenue a le format suivant :
ssh -i <privateKey> -N -L <localPort>:<session-IP>:<session-port> -p 22 <session-ocid>
où :
<session-IP>:<session-port>
est l'adresse IP et le numéro de port de l'adresse d'API Kubernetes que vous avez indiqués lors de la création de la session de bastion. Par exemple,10.0.0.6:6443
.<session-ocid>
est l'OCID de la session de bastion que vous avez créée.
- Exécutez la commande pour créer le tunnel SSH sur un poste de travail local ou dans Cloud Shell, comme suit :
-
Modifiez la commande de tunnel SSH que vous avez obtenue comme suit :
- Remplacez
<privateKey>
par le chemin du fichier contenant la clé privée de la paire de clés SSH indiquée pour la session. Par exemple,/home/johndoe/.ssh/id_rsa
- Remplacez
<localPort>
par6443
ou un port libre sur votre système (station de travail locale si votre réseau est appairé avec le VCN du cluster ou Cloud Shell). - Ajoutez
&
à la fin de la commande pour l'exécuter en arrière-plan.
- Remplacez
- Exécutez la commande de tunnel SSH modifiée sur un poste de travail local ou dans la fenêtre Cloud Shell.
Par exemple :
ssh -i /home/johndoe/.ssh/id_rsa -N -L 6443:10.0.0.6:6443 -p 22 ocid1.bastionsession_______oraclecloud.com &
-
Vous pouvez désormais effectuer des opérations kubectl sur le cluster jusqu'à ce que le tunnel SSH ou la session de bastion expire.
Configuration d'un bastion pour fournir un accès SSH aux noeuds gérés
Pour permettre aux utilisateurs de cluster d'accéder via SSH aux noeuds gérés, les administrateurs VCN, les administrateurs de cluster et les utilisateurs de cluster doivent effectuer un certain nombre d'étapes, comme décrit dans cette section.
Procédure d'administrateur VCN
En tant qu'administrateur VCN, procédez comme suit pour configurer des règles de sécurité sortantes et entrantes afin d'activer un bastion pour fournir un accès SSH aux noeuds gérés :
- Créez un sous-réseau pour héberger le bastion, dans le même VCN que le cluster auquel vous souhaitez accorder l'accès.
Si vous avez déjà créé un sous-réseau pour héberger un bastion afin d'accéder à l'adresse d'API Kubernetes, vous pouvez réutiliser ce sous-réseau au lieu de créer un sous-réseau. Reportez-vous à Configuration d'un bastion pour accéder à l'adresse d'API Kubernetes.
-
Ajoutez la règle de sécurité sortante TCP/22 suivante à la liste de sécurité associée au sous-réseau de bastion.
Cette règle de sécurité sortante autorise le trafic du sous-réseau du bastion vers le sous-réseau des noeuds de processus actif.
Etat : Destination Protocole/Port de destination Description : Avec conservation de statut CIDR des noeuds de processus actif (par exemple, 10.0.1.0/24) TCP/22 Autoriser la communication entre le bastion et les noeuds de processus actif. -
Si elle n'est pas déjà présente, ajoutez la règle de sécurité entrante TCP/22 suivante à une liste de sécurité nouvelle ou existante associée au sous-réseau hébergeant les noeuds de processus actif.
Cette règle de sécurité entrante autorise le trafic vers le sous-réseau de noeud de processus actif à partir du sous-réseau de bastion.
Etat : Source Protocole/Port de destination Description : Avec conservation de statut CIDR de sous-réseau du bastion TCP/22 Autoriser la communication entre le bastion et les noeuds de processus actif. Remarque
Bien qu'il ne s'agisse pas de la conception préférée d'Oracle, vous pouvez utiliser le même sous-réseau pour le bastion et les noeuds de processus actif. Dans ce cas, ajoutez la règle de sécurité sortante TCP/22 à la liste de sécurité associée au sous-réseau de noeud de processus actif.
Procédure d'administrateur de cluster
En tant qu'administrateur de cluster, procédez comme suit pour configurer un bastion afin de fournir un accès SSH aux noeuds gérés :
- Activez l'agent de bastion sur le noeud de processus actif auquel vous souhaitez vous connecter via SSH comme suit :
- Dans la page de liste Clusters, sélectionnez le nom du cluster contenant le noeud de processus actif auquel vous souhaitez vous connecter. Si vous avez besoin d'aide pour trouver la page de liste ou le cluster, reportez-vous à Liste des clusters.
- Sous Ressources, sélectionnez Pools de noeuds et sélectionnez le nom du pool de noeuds contenant le noeud de processus actif auquel vous souhaitez vous connecter.
- Sous Ressources, sélectionnez Noeuds et sélectionnez le nom du noeud de processus actif auquel vous souhaitez vous connecter.
- Sur la page Détails de l'instance, affichez l'onglet Agent Oracle Cloud et activez/désactivez le module d'extension Bastion Activé.
L'application de la modification peut prendre jusqu'à 10 minutes.
- Attendez que le statut du module d'extension Bastion soit En cours avant de passer à l'étape suivante.
- Créez un bastion, comme suit :
- Ouvrez le menu de navigation et sélectionnez Identité et sécurité.
- Sélectionnez Bastion.
- Sur la page Bastion, sélectionnez Créer un bastion.
- Dans la boîte de dialogue Créer un bastion, définissez les propriétés suivantes :
- Nom du bastion : nom du bastion. Evitez de saisir des informations confidentielles. Seuls les caractères alphanumériques sont pris en charge.
- Réseau cloud virtuel cible : indiquez le VCN du cluster Kubernetes auquel vous souhaitez accorder l'accès.
- Sous-réseau cible : sous-réseau destiné à héberger le bastion, avec les règles de sécurité entrantes et sortantes que vous avez configurées.
- Liste d'autorisation de bloc CIDR : plage d'adresses de la notation CIDR que vous souhaitez autoriser à se connecter aux sessions hébergées par ce bastion. Par exemple, 0.0.0.0/0 pour autoriser l'accès à partir d'Internet ou d'une plage d'adresses plus limitée. Par exemple : 203.0.113.0/24.
- (Optional) To change the maximum amount of time that any session on this bastion can remain active, select Show Advanced Options, and then enter a value for Maximum Session Time-to-Live.
- Sélectionnez Créer un bastion.
- Une fois le bastion créé, sélectionnez son nom pour afficher des informations le concernant, y compris son OCID.
Pour plus d'informations sur la création d'un bastion, reportez-vous à Procédure de création d'un bastion.
- Fournissez aux utilisateurs de cluster l'OCID du bastion.
- Assurez-vous que des stratégies IAM appropriées sont en place pour autoriser les utilisateurs de cluster à utiliser le bastion. Reportez-vous à Stratégies IAM requises pour la création et l'utilisation de bastions pour accéder aux clusters.
Si vous le souhaitez, vous pouvez également configurer des stratégies IAM pour limiter les ressources auxquelles les utilisateurs du cluster peuvent accéder à l'aide du bastion. Reportez-vous à Configuration de stratégies IAM pour limiter l'utilisation des bastions.
Procédure d'utilisateur de cluster
En tant qu'utilisateur de cluster, procédez comme suit pour créer une session de bastion afin de fournir un accès SSH aux noeuds gérés :
-
Créez une session de bastion à l'aide de la console ou de l'interface de ligne de commande comme suit :
Utilisation de l'interface de ligne de commande- Sur la page Bastion, sélectionnez le nom du bastion créé par l'administrateur du cluster.
- Sur la page Sessions, sélectionnez Créer une session.
- Dans la boîte de dialogue Créer une session, définissez les propriétés suivantes :
- Type de session : sélectionnez Session SSH gérée.
- Nom de session : nom d'affichage de la nouvelle session. Evitez de saisir des informations confidentielles.
- Nom utilisateur : entrez
opc
. - Instance de calcul dans <nom du compartiment> : sélectionnez le nom de l'instance de calcul de noeud de processus actif dans la liste des instances de calcul du compartiment. Si nécessaire, changez de compartiment pour trouver l'instance. Seules les instances actives sont affichées.
- Clé SSH : indiquez le fichier de clés publiques d'une paire de clés SSH existante que vous souhaitez utiliser pour la session, ou générez une nouvelle paire de clés SSH et enregistrez la clé privée.
- (Facultatif) Pour modifier la durée maximale durant laquelle la session peut rester active, sélectionnez Afficher les options avancées, puis entrez une valeur pour Durée de vie de session maximale.
Notez que vous ne modifiez pas la valeur par défaut dans le champ Port d'instance de calcul cible (le port par défaut est déjà défini sur 22). En outre, vous n'indiquez pas d'adresses IP dans le champ Adresse IP de l'instance de calcul cible car vous avez déjà sélectionné les instances de calcul.
- Sélectionnez Créer une session.
Utilisation de l'interface de ligne de commandeoci bastion session create-managed-ssh \ --bastion-id <bastion OCID> \ --ssh-public-key-file <ssh public key> \ --target-resource-id <worker node instance OCID> \ --target-os-username <instance_username>
Pour plus d'informations sur la création d'une session de bastion, reportez-vous à Procédure de création d'une session.
-
Procurez-vous la commande suivante pour créer un tunnel SSH à l'aide de la console ou de la CLI :
Utilisation de la consoleSur la page Sessions, sélectionnez Copier la commande SSH dans le menu
en regard de la session que vous venez de créer.Utilisation de l'interface de ligne de commandeoci bastion session get --session-id <session OCID> | jq '.data."ssh-metadata".command'
La commande de tunnel SSH que vous avez obtenue a le format suivant :
ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 <session-ocid>" -p 22 opc@<node-private-ip>
où :
<session-ocid>
est l'OCID de la session de bastion que vous avez créée.<node-private-ip>
est l'adresse IP privée du noeud de processus actif que vous avez indiqué lors de la création de la session de bastion. Exemple :10.0.10.99
.
- Exécutez la commande pour créer le tunnel SSH sur un poste de travail local ou dans Cloud Shell, comme suit :
-
Modifiez la commande de tunnel SSH que vous avez obtenue comme suit :
- Remplacez
<privateKey>
par le chemin du fichier contenant la clé privée de la paire de clés SSH indiquée pour la session. Par exemple,/home/johndoe/.ssh/id_rsa
- Ajoutez
&
à la fin de la commande pour l'exécuter en arrière-plan.
- Remplacez
- Exécutez la commande de tunnel SSH modifiée sur un poste de travail local ou dans la fenêtre Cloud Shell.
Par exemple :
ssh -i /home/johndoe/.ssh/id_rsa -o ProxyCommand="ssh -i /home/johndoe/.ssh/id_rsa -W %h:%p -p 22 ocid1.bastionsession_______oraclecloud.com" -p 22 opc@10.0.10.99 &
-
Vous pouvez désormais effectuer des opérations sur les noeuds de processus actif jusqu'à ce que le tunnel SSH ou la session de bastion expire.
Configuration de stratégies IAM pour limiter l'utilisation des bastions
Les administrateurs de cluster peuvent configurer des stratégies IAM pour limiter les ressources auxquelles les utilisateurs de cluster peuvent accéder à l'aide d'un bastion. Par exemple, il est souvent nécessaire de restreindre les utilisateurs de cluster à l'utilisation d'un bastion pour accéder uniquement à l'adresse d'API Kubernetes d'un cluster, plutôt que de pouvoir accéder aux noeuds de processus actif via SSH.
L'exemple de stratégie suivant autorise les utilisateurs du groupe cluster-users
à créer des sessions de bastion, à s'y connecter et à y mettre fin pour les adresses d'API Kubernetes (dans le sous-réseau 10.0.0.11/32, sur le port 6443) uniquement, dans le compartiment ABC
:
Allow group cluster-users to use bastion in compartment ABC
Allow group cluster-users to manage bastion-session in compartment ABC where ALL {target.bastion.ocid='ocid1.bastion.xxx', target.bastion-session.type='port_forwarding', target.bastion-session.ip in ['10.0.0.11/32'], target.bastion-session.port='6443'}
Allow group cluster-users to read vcn in compartment ABC
Allow group cluster-users to read subnet in compartment ABC
L'exemple suppose :
- Un bastion a déjà été créé.
- Les réseaux et les noeuds de processus actif se trouvent dans le même compartiment que le bastion.
- L'accès réseau doit être défini sur la valeur minimale requise.