Chapitre 12. Utiliser un compte de service comme client OAuth


12.1. Comptes de service en tant que clients OAuth

Vous pouvez utiliser un compte de service comme une forme limitée de client OAuth. Les comptes de service ne peuvent demander qu'un sous-ensemble de champs d'application permettant d'accéder à certaines informations de base sur l'utilisateur et à des pouvoirs basés sur le rôle à l'intérieur de l'espace de noms propre au compte de service :

  • user:info
  • user:check-access
  • role:<any_role>:<service_account_namespace>
  • role:<any_role>:<service_account_namespace>:!

Lors de l'utilisation d'un compte de service en tant que client OAuth :

  • client_id est system:serviceaccount:<service_account_namespace>:<service_account_name>.
  • client_secret peut être n'importe quel jeton d'API pour ce compte de service. Par exemple, il peut s'agir de n'importe quel jeton d'API pour ce compte de service :

    oc sa get-token <service_account_name>
  • Pour obtenir les défis WWW-Authenticate, définissez une annotation serviceaccounts.openshift.io/oauth-want-challenges sur le compte de service à true.
  • redirect_uri doit correspondre à une annotation sur le compte de service.

12.1.1. Redirection des URI pour les comptes de service en tant que clients OAuth

Les clés d'annotation doivent avoir le préfixe serviceaccounts.openshift.io/oauth-redirecturi. ou serviceaccounts.openshift.io/oauth-redirectreference., comme par exemple :

serviceaccounts.openshift.io/oauth-redirecturi.<name>

Dans sa forme la plus simple, l'annotation peut être utilisée pour spécifier directement des URI de redirection valides. Par exemple, l'annotation suivante peut être utilisée pour spécifier directement des URI de redirection valides :

"serviceaccounts.openshift.io/oauth-redirecturi.first":  "https://example.com"
"serviceaccounts.openshift.io/oauth-redirecturi.second": "https://other.com"

Les postfixes first et second dans l'exemple ci-dessus sont utilisés pour séparer les deux URI de redirection valides.

Dans les configurations plus complexes, les URI de redirection statiques peuvent ne pas suffire. Par exemple, vous souhaitez peut-être que tous les Ingresses d'une route soient considérés comme valides. C'est là que les URI de redirection dynamique via le préfixe serviceaccounts.openshift.io/oauth-redirectreference. entrent en jeu.

Par exemple :

"serviceaccounts.openshift.io/oauth-redirectreference.first": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"

Comme la valeur de cette annotation contient des données JSON sérialisées, elle est plus facile à voir dans un format développé :

{
  "kind": "OAuthRedirectReference",
  "apiVersion": "v1",
  "reference": {
    "kind": "Route",
    "name": "jenkins"
  }
}

Vous pouvez maintenant voir qu'un OAuthRedirectReference nous permet de référencer la route nommée jenkins. Ainsi, toutes les entrées pour cette route seront désormais considérées comme valides. La spécification complète d'un OAuthRedirectReference est la suivante :

{
  "kind": "OAuthRedirectReference",
  "apiVersion": "v1",
  "reference": {
    "kind": ..., 1
    "name": ..., 2
    "group": ... 3
  }
}
1
kind fait référence au type de l'objet référencé. Actuellement, seul route est pris en charge.
2
name fait référence au nom de l'objet. L'objet doit se trouver dans le même espace de noms que le compte de service.
3
group fait référence au groupe de l'objet. Laissez ce champ vide, car le groupe d'un itinéraire est la chaîne vide.

Les deux préfixes d'annotation peuvent être combinés pour remplacer les données fournies par l'objet de référence. Par exemple :

"serviceaccounts.openshift.io/oauth-redirecturi.first":  "custompath"
"serviceaccounts.openshift.io/oauth-redirectreference.first": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"

Le postfixe first est utilisé pour relier les annotations entre elles. En supposant que la route jenkins ait une entrée de https://example.com, https://example.com/custompath est maintenant considéré comme valide, mais https://example.com ne l'est pas. Le format pour fournir partiellement des données d'annulation est le suivant :

TypeSyntaxe

Régime

"https://"

Nom d'hôte

"//website.com"

Port

"//:8000"

Chemin d'accès

\N- "examplepath\N"

Note

La spécification d'un remplacement de nom d'hôte remplacera les données de nom d'hôte de l'objet référencé, ce qui n'est probablement pas le comportement souhaité.

Toute combinaison de la syntaxe ci-dessus peut être combinée en utilisant le format suivant :

<scheme:>//<hostname><:port>/<path>

Le même objet peut être référencé plusieurs fois pour plus de flexibilité :

"serviceaccounts.openshift.io/oauth-redirecturi.first":  "custompath"
"serviceaccounts.openshift.io/oauth-redirectreference.first": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"
"serviceaccounts.openshift.io/oauth-redirecturi.second":  "//:8000"
"serviceaccounts.openshift.io/oauth-redirectreference.second": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"

En supposant que la route nommée jenkins a une entrée de https://example.com, alors les deux https://example.com:8000 et https://example.com/custompath sont considérés comme valides.

Des annotations statiques et dynamiques peuvent être utilisées en même temps pour obtenir le comportement souhaité :

"serviceaccounts.openshift.io/oauth-redirectreference.first": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"
"serviceaccounts.openshift.io/oauth-redirecturi.second": "https://other.com"
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.