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 Copier lienLien copié sur presse-papiers!
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.
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 Copier lienLien copié sur presse-papiers!
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.
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.loginURLl'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éfisWWW-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}
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 Copier lienLien copié sur presse-papiers!
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 Copier lienLien copié sur presse-papiers!
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
ConfigMapcontenant l'autorité de certification en utilisant la commande suivante. L'autorité de certification doit être stockée dans la cléca.crtde l'objetConfigMap.oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config
$ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow AstuceVous pouvez également appliquer le YAML suivant pour créer la carte de configuration :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.4. Exemple d'en-tête de requête CR Copier lienLien copié sur presse-papiers!
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
- 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/authorizenon 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 vershttps://<namespace_route>/oauth/authorizedoit 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,loginURLdoit être utilisé. - 4
- Facultatif : URL vers laquelle rediriger les requêtes
/oauth/authorizenon authentifiées, qui authentifiera les clients qui attendent des défisWWW-Authenticate, puis les redirigera vershttps://<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 utiliserchallengeURL. - 5
- Référence à un objet OpenShift Container Platform
ConfigMapcontenant un paquet de certificats codé en PEM. Utilisé comme ancre de confiance pour valider les certificats TLS présentés par le serveur distant.ImportantDepuis OpenShift Container Platform 4.1, le champ
caest 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 avecca. - 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.
7.5.5. Ajouter un fournisseur d'identité à votre cluster Copier lienLien copié sur presse-papiers!
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
Appliquer le CR défini :
oc apply -f </path/to/CR>
$ oc apply -f </path/to/CR>Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteSi un CR n'existe pas,
oc applycré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.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>
$ oc login -u <nom d'utilisateur>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Confirmez que l'utilisateur s'est connecté avec succès et affichez le nom de l'utilisateur.
oc whoami
$ oc whoamiCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5.6. Exemple de configuration de l'authentification Apache à l'aide de l'en-tête de requête Copier lienLien copié sur presse-papiers!
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-Userdans 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-Tokensoit défini pour toutes les demandes d'authentification utilisant le flux de défi. -
Veillez à ce que seuls le point d'accès
/oauth/authorizeet 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/authorizedoit se terminer par/authorizesans 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/authorizedoivent faire office de proxy vers les sous-chemins dehttps://<namespace_route>/oauth/authorize. Par exemple,https://proxy.example.com/login-proxy/authorize/approve?…doit faire office de proxy vershttps://<namespace_route>/oauth/authorize/approve?….
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
ConfigMapcontenant 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
$ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- L'autorité de certification doit être stockée dans la clé
ca.crtde l'objetConfigMap.
AstuceVous pouvez également appliquer le YAML suivant pour créer la carte de configuration :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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.
-
Créez le certificat pour la configuration Apache. Le certificat que vous spécifiez comme valeur du paramètre
SSLProxyMachineCertificateFileest le certificat client du proxy qui est utilisé pour authentifier le proxy auprès du serveur. Il doit utiliserTLS Web Client Authenticationcomme type de clé étendue. Créez la configuration d'Apache. Utilisez le modèle suivant pour fournir les paramètres et les valeurs nécessaires :
ImportantExaminez attentivement le modèle et adaptez son contenu à votre environnement.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteL'adresse
https://<namespace_route>est la route vers le serveur OAuth et peut être obtenue en exécutantoc get route -n openshift-authentication.Mettez à jour la strophe
identityProvidersdans la ressource personnalisée (CR) :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vérifier la configuration.
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
# curl -L -k -H "X-Remote-User: joe" \ --cert /etc/pki/tls/certs/authproxy.pem \ https://<namespace_route>/oauth/token/requestCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
# curl -L -k -H "X-Remote-User: joe" \ https://<namespace_route>/oauth/token/requestCopy to Clipboard Copied! Toggle word wrap Toggle overflow Confirmez que la redirection
challengeURLest active :curl -k -v -H 'X-Csrf-Token: 1' \ https://<namespace_route>/oauth/authorize?client_id=openshift-challenging-client&response_type=token
# curl -k -v -H 'X-Csrf-Token: 1' \ https://<namespace_route>/oauth/authorize?client_id=openshift-challenging-client&response_type=tokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow Copiez la redirection
challengeURLpour l'utiliser dans l'étape suivante.Exécutez cette commande pour afficher une réponse
401avec un défi de baseWWW-Authenticate, un défi de négociation ou les deux défis :curl -k -v -H 'X-Csrf-Token: 1' \ <challengeURL_redirect + query>
# curl -k -v -H 'X-Csrf-Token: 1' \ <challengeURL_redirect + query>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Tester la connexion à l'OpenShift CLI (
oc) avec et sans l'utilisation d'un ticket Kerberos :Si vous avez généré un ticket Kerberos en utilisant
kinit, détruisez-le :kdestroy -c nom_du_cache
# kdestroy -c nom_du_cache1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Veillez à indiquer le nom de votre cache Kerberos.
Connectez-vous à l'outil
ocen utilisant vos identifiants Kerberos :oc login -u <nom d'utilisateur>
# oc login -u <nom d'utilisateur>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Saisissez votre mot de passe Kerberos à l'invite.
Déconnectez-vous de l'outil
oc:oc logout
# oc logoutCopy to Clipboard Copied! Toggle word wrap Toggle overflow Utilisez vos identifiants Kerberos pour obtenir un ticket :
kinit
# kinitCopy to Clipboard Copied! Toggle word wrap Toggle overflow Saisissez votre nom d'utilisateur et votre mot de passe Kerberos à l'invite.
Confirmez que vous pouvez vous connecter à l'outil
oc:oc login
# oc loginCopy to Clipboard Copied! Toggle word wrap Toggle overflow Si votre configuration est correcte, vous êtes connecté sans avoir à saisir d'informations d'identification distinctes.