Sécuriser les applications et les ressources GKE avec IAP

Cette page explique comment sécuriser une instance Google Kubernetes Engine (GKE) avec Identity-Aware Proxy (IAP).

Pour sécuriser des ressources qui ne sont pas sur Google Cloud, consultez la page Sécuriser les applications et les ressources sur site avec IAP.

Présentation

IAP est intégré via l'objet Entrée pour GKE. Cette intégration permet de contrôler l'accès des employés au niveau de la ressource au lieu d'utiliser un VPN.

Dans un cluster GKE, le trafic entrant est géré par l'équilibrage de charge HTTP(S), un composant de Cloud Load Balancing. L'équilibreur de charge HTTP(S) est généralement configuré par le contrôleur Ingress Kubernetes. Le contrôleur d'entrée obtient les informations de configuration à partir d'un objet Ingress Kubernetes associé à un ou plusieurs objets Service. Chaque objet Service contient des informations de routage qui permettent de diriger une requête entrante vers un pod et un port particuliers.

À partir de la version 1.10.5-gke.3 de Kubernetes, vous pouvez ajouter une configuration pour l'équilibreur de charge en associant un service à un objet BackendConfig. BackendConfig est une définition de ressource personnalisée (CRD, Custom Resource Definition) spécifiée dans le dépôt kubernetes/ingress-gce.

Le contrôleur Kubernetes Ingress lit les informations de configuration à partir de BackendConfig et configure l'équilibreur de charge en conséquence. BackendConfig contient les informations de configuration propres à Cloud Load Balancing et permet de définir une configuration distincte pour chaque service de backend de l'équilibrage de charge HTTP(S).

Avant de commencer

Pour activer IAP pour GKE, vous avez besoin des éléments suivants :

  • Un projet Google Cloud Console avec la facturation activée.
  • Un groupe d'une ou de plusieurs instances GKE desservies par un équilibreur de charge HTTPS. L'équilibreur de charge doit se créer automatiquement lorsque vous créez un objet Ingress dans un cluster GKE.
  • Un nom de domaine enregistré à l'adresse de votre équilibreur de charge
  • Un code d'application pour vérifier que toutes les requêtes ont une identité.

Activer IAP

Configurer l'écran d'autorisation OAuth

Si vous n'avez pas configuré l'écran d'autorisation OAuth de votre projet, cette étape est obligatoire. Vous devez saisir une adresse e-mail et un nom de produit.

  1. Accédez à l'écran d'autorisation OAuth.
    Configurer l'écran d'autorisation
  2. Sous Adresse e-mail d'assistance, sélectionnez l'adresse e-mail que vous souhaitez afficher en tant que contact public. Celle-ci doit correspondre à votre adresse e-mail ou à un groupe Google dont vous êtes le propriétaire.
  3. Saisissez le nom de l'application que vous souhaitez afficher.
  4. Ajoutez des détails, si nécessaire.
  5. Cliquez sur Save.

Pour modifier ultérieurement les informations affichées sur l'écran d'autorisation OAuth, comme le nom du produit ou l'adresse e-mail, répétez les étapes de configuration précédentes.

Créer des identifiants OAuth

  1. Accédez à la page Identifiants.
    Accéder à la page "Identifiants"
  2. Dans la liste déroulante Créer des identifiants, sélectionnez l'ID client OAuth.
  3. Sous Type d'application, sélectionnez Application Web.
  4. Ajoutez un nom pour votre ID client OAuth.
  5. Cliquez sur Créer. Votre ID client OAuth et votre secret client sont générés et affichés dans la fenêtre Client OAuth.
  6. Cliquez sur OK.
  7. Sélectionnez le client que vous avez créé.
  8. Copiez l'ID client dans le presse-papiers.
  9. Ajoutez l'URL de redirection universelle au champ URI de redirection autorisés au format suivant :
    https://iap.googleapis.com/v1/oauth/clientIds/CLIENT_ID:handleRedirect

    CLIENT_ID correspond à l'ID client OAuth.

  10. En haut de la page, cliquez sur Télécharger JSON. Ces identifiants vous seront utiles lors d'une prochaine étape.

Configurer l'accès à IAP

  1. Accédez à la page Identity-Aware Proxy.
    Accéder à la page "Identity-Aware Proxy"
  2. Sélectionnez le projet que vous souhaitez sécuriser avec IAP.
  3. Cochez la case à côté de la ressource à laquelle vous souhaitez ajouter des membres.
  4. Dans le panneau d'informations situé à droite, cliquez sur Ajouter un membre.
  5. Dans la boîte de dialogue Ajouter des membres qui s'affiche, ajoutez les adresses e-mail des groupes ou des personnes auxquels vous souhaitez accorder le rôle Utilisateur de l'application Web sécurisée par IAP dans le cadre du projet.

    Les types de comptes suivants peuvent être ajoutés en tant que membres :

    • Compte Google : user@gmail.com
    • Groupe Google : admins@googlegroups.com
    • Compte de service : server@example.gserviceaccount.com
    • Domaine Google Workspace : example.com

    Veillez à ajouter un compte Google auquel vous avez accès.

  6. Sélectionnez Cloud IAP > Utilisateur de l'application Web sécurisée par IAP dans la liste déroulante Rôles.
  7. Cliquez sur Save.

Configurer BackendConfig

Pour configurer BackendConfig pour IAP, créez un secret Kubernetes, puis ajoutez un bloc iap à BackendConfig.

Créer un code secret Kubernetes

BackendConfig utilise un code secret Kubernetes pour encapsuler le client OAuth créé précédemment. Les secrets Kubernetes sont gérés comme les autres objets Kubernetes à l'aide de l'interface de ligne de commande (CLI) kubectl. Pour créer un secret, exécutez la commande suivante, où client_id_key et client_secret_key sont les clés du fichier JSON que vous avez téléchargé lors de la création des identifiants OAuth :

kubectl create secret generic my-secret --from-literal=client_id=client_id_key \
    --from-literal=client_secret=client_secret_key

La commande ci-dessus affiche le résultat suivant, confirmant que le secret a bien été créé :

secret "my-secret" created

Ajouter un bloc iap à BackendConfig

Pour configurer BackendConfig pour IAP, vous devez spécifier les valeurs enabled et secretName. Pour ce faire, vérifiez que vous disposez de l'autorisation compute.backendServices.update, puis ajoutez le bloc iap à BackendConfig. Dans ce bloc, my-secret est le nom du secret Kubernetes que vous avez créé précédemment :

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: config-default
  namespace: my-namespace
spec:
  iap:
    enabled: true
    oauthclientCredentials:
      secretName: my-secret

Vous devez également associer des ports de service à votre ressource BackendConfig pour déclencher l'activation d'IAP. Pour ce faire, vous pouvez par exemple définir tous les ports du service comme ports par défaut pour votre ressource BackendConfig. Pour cela, ajoutez l'annotation suivante à votre ressource Service :

metadata:
  annotations:
    beta.cloud.google.com/backend-config: '{"default": "config-default"}'

Pour tester la configuration, exécutez kubectl get event. Si le message "no BackendConfig for service port exists" s'affiche, cela signifie que vous avez bien associé un port de service à votre ressource BackendConfig, mais que celle-ci est introuvable. Cette erreur peut se produire si vous n'avez pas créé la ressource BackendConfig, l'avez créée dans le mauvais espace de noms ou si vous avez mal orthographié la référence dans l'annotation Service.

Si le secret secretName que vous avez référencé n'existe pas ou n'est pas correctement structuré, l'un des messages d'erreur suivants s'affiche :

  • BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found. Pour résoudre cette erreur, assurez-vous que vous avez correctement créé le secret Kubernetes, comme décrit dans la section précédente.
  • BackendConfig default/config-default is not valid: secret "foo" missing client_secret data. Pour résoudre cette erreur, assurez-vous que vous avez correctement créé les identifiants OAuth. Vérifiez également que vous avez référencé les clés client_id et client_secret correctes dans le fichier JSON que vous avez téléchargé précédemment.

Lorsque l'option enabled est définie sur true et que le secret secretName est correctement défini, IAP est configuré pour la ressource que vous avez sélectionnée.

Désactiver IAP

Pour désactiver IAP, vous devez définir enabled sur false dans BackendConfig. Si vous supprimez le bloc IAP de BackendConfig, les paramètres sont conservés. Par exemple, si IAP est activé à l'aide de secretName: my_secret et que vous supprimez le bloc, IAP reste activé avec les identifiants OAuth stockés dans my_secret.

Étapes suivantes