7.5. Configuration d'un fournisseur d'identité d'en-tête de requête


Configurez le fournisseur d'identité request-header pour qu'il identifie les utilisateurs à partir des valeurs d'en-tête des requêtes, telles que X-Remote-User. Il est généralement utilisé en combinaison avec un proxy d'authentification, qui définit la valeur de l'en-tête de la requête.

7.5.1. À propos des fournisseurs d'identité dans OpenShift Container Platform

Par défaut, seul un utilisateur kubeadmin existe sur votre cluster. Pour spécifier un fournisseur d'identité, vous devez créer une ressource personnalisée (CR) qui décrit ce fournisseur d'identité et l'ajouter au cluster.

Note

Les noms d'utilisateur OpenShift Container Platform contenant /, :, et % ne sont pas pris en charge.

7.5.2. À propos de l'authentification de l'en-tête de la requête

Un fournisseur d'identité d'en-tête de requête identifie les utilisateurs à partir des valeurs d'en-tête de requête, telles que X-Remote-User. Il est généralement utilisé en combinaison avec un proxy d'authentification, qui définit la valeur de l'en-tête de la requête. Le fournisseur d'identité d'en-tête de requête ne peut pas être combiné avec d'autres fournisseurs d'identité qui utilisent des connexions directes par mot de passe, comme htpasswd, Keystone, LDAP ou l'authentification de base.

Note

Vous pouvez également utiliser le fournisseur d'identité de l'en-tête de la requête pour des configurations avancées telles que l'authentification SAML supportée par la communauté. Notez que cette solution n'est pas prise en charge par Red Hat.

Pour que les utilisateurs puissent s'authentifier à l'aide de ce fournisseur d'identité, ils doivent accéder à https://<namespace_route>/oauth/authorize (et aux sous-chemins) via un proxy d'authentification. Pour ce faire, configurez le serveur OAuth pour qu'il redirige les demandes non authentifiées de jetons OAuth vers le point d'extrémité du proxy qui fait office de proxy vers https://<namespace_route>/oauth/authorize.

Pour rediriger les demandes non authentifiées des clients qui attendent des flux de connexion basés sur un navigateur :

  • Attribuez au paramètre provider.loginURL l'URL du proxy d'authentification qui authentifiera les clients interactifs et transmettra ensuite la requête à https://<namespace_route>/oauth/authorize.

Pour rediriger les demandes non authentifiées des clients qui s'attendent à être confrontés à WWW-Authenticate:

  • Définissez le paramètre provider.challengeURL à l'URL du proxy d'authentification qui authentifiera les clients qui attendent des défis WWW-Authenticate, puis transmettra la demande à https://<namespace_route>/oauth/authorize.

Les paramètres provider.challengeURL et provider.loginURL peuvent inclure les jetons suivants dans la partie requête de l'URL :

  • ${url} est remplacé par l'URL actuelle, échappée pour être sûre dans un paramètre de requête.

    Par exemple : https://www.example.com/sso-login?then=${url}

  • ${query} est remplacée par la chaîne de requête actuelle, non codée.

    Par exemple : https://www.example.com/auth-proxy/oauth/authorize?${query}

Important

Depuis OpenShift Container Platform 4.1, votre proxy doit prendre en charge TLS mutuel.

7.5.2.1. Prise en charge de la connexion SSPI sous Microsoft Windows

Important

L'utilisation de la prise en charge de la connexion SSPI sur Microsoft Windows est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes d'un point de vue fonctionnel. Red Hat ne recommande pas leur utilisation en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.

Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.

L'OpenShift CLI (oc) prend en charge la Security Support Provider Interface (SSPI) pour permettre les flux SSO sur Microsft Windows. Si vous utilisez le fournisseur d'identité d'en-tête de demande avec un proxy compatible GSSAPI pour connecter un serveur Active Directory à OpenShift Container Platform, les utilisateurs peuvent s'authentifier automatiquement à OpenShift Container Platform en utilisant l'interface de ligne de commande oc à partir d'un ordinateur Microsoft Windows connecté à un domaine.

7.5.3. Création d'une carte de configuration

Les fournisseurs d'identité utilisent les objets OpenShift Container Platform ConfigMap dans l'espace de noms openshift-config pour contenir le paquet de l'autorité de certification. Ces objets sont principalement utilisés pour contenir les paquets de certificats nécessaires au fournisseur d'identité.

Procédure

  • Définissez un objet OpenShift Container Platform ConfigMap contenant l'autorité de certification en utilisant la commande suivante. L'autorité de certification doit être stockée dans la clé ca.crt de l'objet ConfigMap.

    $ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config
    Astuce

    Vous pouvez également appliquer le YAML suivant pour créer la carte de configuration :

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ca-config-map
      namespace: openshift-config
    data:
      ca.crt: |
        <CA_certificate_PEM>

7.5.4. Exemple d'en-tête de requête CR

La ressource personnalisée (CR) suivante indique les paramètres et les valeurs acceptables pour un fournisseur d'identité d'en-tête de requête.

En-tête de requête CR

apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
  name: cluster
spec:
  identityProviders:
  - name: requestheaderidp 1
    mappingMethod: claim 2
    type: RequestHeader
    requestHeader:
      challengeURL: "https://www.example.com/challenging-proxy/oauth/authorize?${query}" 3
      loginURL: "https://www.example.com/login-proxy/oauth/authorize?${query}" 4
      ca: 5
        name: ca-config-map
      clientCommonNames: 6
      - my-auth-proxy
      headers: 7
      - X-Remote-User
      - SSO-User
      emailHeaders: 8
      - X-Remote-User-Email
      nameHeaders: 9
      - X-Remote-User-Display-Name
      preferredUsernameHeaders: 10
      - X-Remote-User-Login

1
Ce nom de fournisseur est préfixé au nom d'utilisateur dans l'en-tête de la demande pour former un nom d'identité.
2
Contrôle la manière dont les correspondances sont établies entre les identités de ce fournisseur et les objets User.
3
Facultatif : URL vers laquelle rediriger les requêtes /oauth/authorize non authentifiées, qui authentifiera les clients basés sur un navigateur et transmettra leur requête par proxy à https://<namespace_route>/oauth/authorize. L'URL qui redirige vers https://<namespace_route>/oauth/authorize doit se terminer par /authorize (sans barre oblique à la fin), ainsi que les sous-chemins de proxy, afin que les flux d'approbation OAuth fonctionnent correctement. ${url} est remplacé par l'URL actuelle, échappée pour être sûre dans un paramètre de requête. ${query} est remplacé par la chaîne de requête actuelle. Si cet attribut n'est pas défini, loginURL doit être utilisé.
4
Facultatif : URL vers laquelle rediriger les requêtes /oauth/authorize non authentifiées, qui authentifiera les clients qui attendent des défis WWW-Authenticate, puis les redirigera vers https://<namespace_route>/oauth/authorize. ${url} est remplacé par l'URL actuelle, échappée pour être sûre dans un paramètre de requête. ${query} est remplacé par la chaîne de requête actuelle. Si cet attribut n'est pas défini, il faut utiliser challengeURL.
5
Référence à un objet OpenShift Container Platform ConfigMap contenant un paquet de certificats codé en PEM. Utilisé comme ancre de confiance pour valider les certificats TLS présentés par le serveur distant.
Important

Depuis OpenShift Container Platform 4.1, le champ ca est obligatoire pour ce fournisseur d'identité. Cela signifie que votre proxy doit prendre en charge TLS mutuel.

6
Facultatif : liste de noms communs (cn). S'il est défini, un certificat client valide avec un nom commun (cn) figurant dans la liste spécifiée doit être présenté avant que les en-têtes de la demande ne soient vérifiés pour les noms d'utilisateur. S'il est vide, n'importe quel nom commun est autorisé. Ne peut être utilisé qu'en combinaison avec ca.
7
Noms des en-têtes à vérifier, dans l'ordre, pour l'identité de l'utilisateur. Le premier en-tête contenant une valeur est utilisé comme identité. Obligatoire, insensible à la casse.
8
Noms des en-têtes à vérifier, dans l'ordre, pour une adresse électronique. Le premier en-tête contenant une valeur est utilisé comme adresse électronique. Facultatif, insensible à la casse.
9
Noms d'en-tête à vérifier, dans l'ordre, pour un nom d'affichage. Le premier en-tête contenant une valeur est utilisé comme nom d'affichage. Facultatif, insensible à la casse.
10
Noms des en-têtes à vérifier, dans l'ordre, pour un nom d'utilisateur préféré, s'il est différent de l'identité immuable déterminée à partir des en-têtes spécifiés à l'adresse headers. Le premier en-tête contenant une valeur est utilisé comme nom d'utilisateur préféré lors du provisionnement. Facultatif, insensible à la casse.

Ressources complémentaires

7.5.5. Ajouter un fournisseur d'identité à votre cluster

Après avoir installé votre cluster, ajoutez-y un fournisseur d'identité pour que vos utilisateurs puissent s'authentifier.

Conditions préalables

  • Créer un cluster OpenShift Container Platform.
  • Créez la ressource personnalisée (CR) pour vos fournisseurs d'identité.
  • Vous devez être connecté en tant qu'administrateur.

Procédure

  1. Appliquer le CR défini :

    $ oc apply -f </path/to/CR>
    Note

    Si un CR n'existe pas, oc apply crée un nouveau CR et peut déclencher l'avertissement suivant : Warning: oc apply should be used on resources created by either oc create --save-config or oc apply. Dans ce cas, vous pouvez ignorer cet avertissement.

  2. Connectez-vous au cluster en tant qu'utilisateur de votre fournisseur d'identité, en saisissant le mot de passe lorsque vous y êtes invité.

    $ oc login -u <nom d'utilisateur>
  3. Confirmez que l'utilisateur s'est connecté avec succès et affichez le nom de l'utilisateur.

    $ oc whoami

7.5.6. Exemple de configuration de l'authentification Apache à l'aide de l'en-tête de requête

Cet exemple configure un proxy d'authentification Apache pour OpenShift Container Platform en utilisant le fournisseur d'identité de l'en-tête de requête.

Configuration personnalisée du proxy

L'utilisation du module mod_auth_gssapi est un moyen courant de configurer le proxy d'authentification Apache en utilisant le fournisseur d'identité de l'en-tête de requête ; cependant, ce n'est pas obligatoire. D'autres mandataires peuvent facilement être utilisés si les conditions suivantes sont remplies :

  • Bloquer l'en-tête X-Remote-User dans les requêtes des clients pour empêcher l'usurpation d'identité.
  • Renforcer l'authentification du certificat du client dans la configuration de RequestHeaderIdentityProvider.
  • Exiger que l'en-tête X-Csrf-Token soit défini pour toutes les demandes d'authentification utilisant le flux de défi.
  • Veillez à ce que seuls le point d'accès /oauth/authorize et ses sous-chemins soient protégés ; les redirections doivent être réécrites pour permettre au serveur dorsal d'envoyer le client au bon endroit.
  • L'URL qui fait office de proxy vers https://<namespace_route>/oauth/authorize doit se terminer par /authorize sans barre oblique de fin. Par exemple, https://proxy.example.com/login-proxy/authorize?…​ doit se substituer à https://<namespace_route>/oauth/authorize?…​.
  • Les sous-chemins de l'URL qui fait office de proxy vers https://<namespace_route>/oauth/authorize doivent faire office de proxy vers les sous-chemins de https://<namespace_route>/oauth/authorize. Par exemple, https://proxy.example.com/login-proxy/authorize/approve?…​ doit faire office de proxy vers https://<namespace_route>/oauth/authorize/approve?…​.
Note

L'adresse https://<namespace_route> est la route vers le serveur OAuth et peut être obtenue en exécutant oc get route -n openshift-authentication.

Configuration de l'authentification Apache à l'aide de l'en-tête de requête

Cet exemple utilise le module mod_auth_gssapi pour configurer un proxy d'authentification Apache en utilisant le fournisseur d'identité de l'en-tête de requête.

Conditions préalables

  • Obtenez le module mod_auth_gssapi à partir du canal optionnel. Les paquets suivants doivent être installés sur votre machine locale :

    • httpd
    • mod_ssl
    • mod_session
    • apr-util-openssl
    • mod_auth_gssapi
  • Générer une autorité de certification pour valider les demandes qui soumettent l'en-tête de confiance. Définir un objet OpenShift Container Platform ConfigMap contenant l'AC. Cette opération s'effectue en exécutant :

    $ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config 1
    1
    L'autorité de certification doit être stockée dans la clé ca.crt de l'objet ConfigMap.
    Astuce

    Vous pouvez également appliquer le YAML suivant pour créer la carte de configuration :

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: ca-config-map
      namespace: openshift-config
    data:
      ca.crt: |
        <CA_certificate_PEM>
  • Générer un certificat client pour le proxy. Vous pouvez générer ce certificat en utilisant n'importe quel outil de certificat x509. Le certificat client doit être signé par l'autorité de certification que vous avez générée pour valider les demandes qui soumettent l'en-tête de confiance.
  • Créez la ressource personnalisée (CR) pour vos fournisseurs d'identité.

Procédure

Ce proxy utilise un certificat client pour se connecter au serveur OAuth, qui est configuré pour faire confiance à l'en-tête X-Remote-User.

  1. Créez le certificat pour la configuration Apache. Le certificat que vous spécifiez comme valeur du paramètre SSLProxyMachineCertificateFile est le certificat client du proxy qui est utilisé pour authentifier le proxy auprès du serveur. Il doit utiliser TLS Web Client Authentication comme type de clé étendue.
  2. Créez la configuration d'Apache. Utilisez le modèle suivant pour fournir les paramètres et les valeurs nécessaires :

    Important

    Examinez attentivement le modèle et adaptez son contenu à votre environnement.

    LoadModule request_module modules/mod_request.so
    LoadModule auth_gssapi_module modules/mod_auth_gssapi.so
    # Some Apache configurations might require these modules.
    # LoadModule auth_form_module modules/mod_auth_form.so
    # LoadModule session_module modules/mod_session.so
    
    # Nothing needs to be served over HTTP.  This virtual host simply redirects to
    # HTTPS.
    <VirtualHost *:80>
      DocumentRoot /var/www/html
      RewriteEngine              On
      RewriteRule     ^(.*)$     https://%{HTTP_HOST}$1 [R,L]
    </VirtualHost>
    
    <VirtualHost *:443>
      # This needs to match the certificates you generated.  See the CN and X509v3
      # Subject Alternative Name in the output of:
      # openssl x509 -text -in /etc/pki/tls/certs/localhost.crt
      ServerName www.example.com
    
      DocumentRoot /var/www/html
      SSLEngine on
      SSLCertificateFile /etc/pki/tls/certs/localhost.crt
      SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
      SSLCACertificateFile /etc/pki/CA/certs/ca.crt
    
      SSLProxyEngine on
      SSLProxyCACertificateFile /etc/pki/CA/certs/ca.crt
      # It is critical to enforce client certificates. Otherwise, requests can
      # spoof the X-Remote-User header by accessing the /oauth/authorize endpoint
      # directly.
      SSLProxyMachineCertificateFile /etc/pki/tls/certs/authproxy.pem
    
      # To use the challenging-proxy, an X-Csrf-Token must be present.
      RewriteCond %{REQUEST_URI} ^/challenging-proxy
      RewriteCond %{HTTP:X-Csrf-Token} ^$ [NC]
      RewriteRule ^.* - [F,L]
    
      <Location /challenging-proxy/oauth/authorize>
          # Insert your backend server name/ip here.
          ProxyPass https://<namespace_route>/oauth/authorize
          AuthName "SSO Login"
          # For Kerberos
          AuthType GSSAPI
          Require valid-user
          RequestHeader set X-Remote-User %{REMOTE_USER}s
    
          GssapiCredStore keytab:/etc/httpd/protected/auth-proxy.keytab
          # Enable the following if you want to allow users to fallback
          # to password based authentication when they do not have a client
          # configured to perform kerberos authentication.
          GssapiBasicAuth On
    
          # For ldap:
          # AuthBasicProvider ldap
          # AuthLDAPURL "ldap://ldap.example.com:389/ou=People,dc=my-domain,dc=com?uid?sub?(objectClass=*)"
        </Location>
    
        <Location /login-proxy/oauth/authorize>
        # Insert your backend server name/ip here.
        ProxyPass https://<namespace_route>/oauth/authorize
    
          AuthName "SSO Login"
          AuthType GSSAPI
          Require valid-user
          RequestHeader set X-Remote-User %{REMOTE_USER}s env=REMOTE_USER
    
          GssapiCredStore keytab:/etc/httpd/protected/auth-proxy.keytab
          # Enable the following if you want to allow users to fallback
          # to password based authentication when they do not have a client
          # configured to perform kerberos authentication.
          GssapiBasicAuth On
    
          ErrorDocument 401 /login.html
        </Location>
    
    </VirtualHost>
    
    RequestHeader unset X-Remote-User
    Note

    L'adresse https://<namespace_route> est la route vers le serveur OAuth et peut être obtenue en exécutant oc get route -n openshift-authentication.

  3. Mettez à jour la strophe identityProviders dans la ressource personnalisée (CR) :

    identityProviders:
      - name: requestheaderidp
        type: RequestHeader
        requestHeader:
          challengeURL: "https://<namespace_route>/challenging-proxy/oauth/authorize?${query}"
          loginURL: "https://<namespace_route>/login-proxy/oauth/authorize?${query}"
          ca:
            name: ca-config-map
            clientCommonNames:
            - my-auth-proxy
            headers:
            - X-Remote-User
  4. Vérifier la configuration.

    1. Confirmez que vous pouvez contourner le proxy en demandant un jeton en fournissant le certificat client et l'en-tête corrects :

      # curl -L -k -H "X-Remote-User: joe" \
         --cert /etc/pki/tls/certs/authproxy.pem \
         https://<namespace_route>/oauth/token/request
    2. Confirmez que les demandes qui ne fournissent pas le certificat du client échouent en demandant un jeton sans le certificat :

      # curl -L -k -H "X-Remote-User: joe" \
         https://<namespace_route>/oauth/token/request
    3. Confirmez que la redirection challengeURL est active :

      # curl -k -v -H 'X-Csrf-Token: 1' \
         https://<namespace_route>/oauth/authorize?client_id=openshift-challenging-client&response_type=token

      Copiez la redirection challengeURL pour l'utiliser dans l'étape suivante.

    4. Exécutez cette commande pour afficher une réponse 401 avec un défi de base WWW-Authenticate, un défi de négociation ou les deux défis :

      # curl -k -v -H 'X-Csrf-Token: 1' \
         <challengeURL_redirect + query>
    5. Tester la connexion à l'OpenShift CLI (oc) avec et sans l'utilisation d'un ticket Kerberos :

      1. Si vous avez généré un ticket Kerberos en utilisant kinit, détruisez-le :

        # kdestroy -c nom_du_cache 1
        1
        Veillez à indiquer le nom de votre cache Kerberos.
      2. Connectez-vous à l'outil oc en utilisant vos identifiants Kerberos :

        # oc login -u <nom d'utilisateur>

        Saisissez votre mot de passe Kerberos à l'invite.

      3. Déconnectez-vous de l'outil oc:

        # oc logout
      4. Utilisez vos identifiants Kerberos pour obtenir un ticket :

        # kinit

        Saisissez votre nom d'utilisateur et votre mot de passe Kerberos à l'invite.

      5. Confirmez que vous pouvez vous connecter à l'outil oc:

        # oc login

        Si votre configuration est correcte, vous êtes connecté sans avoir à saisir d'informations d'identification distinctes.

Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.