Sécuriser un Workload GKE avec une Authentification HTTP Basic sur GCP

Lorsque vous exécutez des workloads dans un cluster Google Kubernetes Engine (GKE), il est souvent nécessaire de sécuriser vos applications en utilisant une authentification HTTP Basic. Si vous travaillez avec une image Docker publique que vous ne pouvez pas modifier, l’utilisation d’un contrôleur Ingress NGINX offre une solution élégante pour ajouter cette couche de sécurité sans modifier le code de votre application.

Prérequis

  • Un cluster GKE en fonctionnement
  • Une application déployée sur un workload GKE
  • gcloud installer sur votre machine ou utiliser cloud shell

Étape 1 : Configuré kubectl pour interagir avec votre cluster

Utiliser la commande suivant pour configurer kubectl dans votre terminal ou cloud shell

gcloud container clusters get-credentials my-cluster-name --region cluster-region

Étape 2 : Installer le Contrôleur Ingress NGINX sur GKE

Tout d’abord, vous devez déployer un contrôleur Ingress NGINX si ce n’est pas déjà fait. Suivez le guide d’installation officiel du Contrôleur Ingress NGINX pour Kubernetes.

TL;DR, Si vous avez un cluster public et les droits d’admin, il suffit d’exécuter la commande suivante :

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/cloud/deploy.yaml

Étape 3 : Créer un Secret pour l’Authentification HTTP Basic

les instructions officielles Kubernetes : https://kubernetes.github.io/ingress-nginx/examples/auth/basic/

Create htpasswd file

htpasswd -c auth foo
New password: <bar>
New password
Re-type new password:
Adding password for user foo

Convert htpasswd into a secret

kubectl create secret generic basic-auth --from-file=auth
secret "basic-auth" created

Étape 4 : Créer un Service et un Ingress

Via l’interface web de GCP, aller sur votre workload et choisissez l’option EXPOSE pour créer un Service lié à votre workload.

Une fois votre Service créé, aller sur la liste des services via l’interface web et sélectionné votre service pour créer un nouvel Ingress associé.

Attention, si vous créez un Ingress via kubectl cela ne marchera pas. En effet, GKE doit créer les mapping, routing, NEG. Cela se fait automatiquement si vous passez par l’interface web

Étape 5 : Modifier les annotations de la Ressource Ingress

Ensuite, nous modifions notre ressource Ingress pour utiliser le secret d’authentification de base. Cela indique à NGINX de protéger votre application avec une authentification HTTP Basic.

apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     name: my-ingress
     annotations:
       kubernetes.io/ingress.class: nginx
       nginx.ingress.kubernetes.io/auth-type: "basic"
       nginx.ingress.kubernetes.io/auth-secret: "basic-auth"
       nginx.ingress.kubernetes.io/auth-realm: "Authentication Required"

Sources