4.6. Configurer l'accès aux services Knative


4.6.1. Configuration de l'authentification par jeton Web JSON pour les services Knative

OpenShift Serverless ne dispose pas actuellement de fonctionnalités d'autorisation définies par l'utilisateur. Pour ajouter une autorisation définie par l'utilisateur à votre déploiement, vous devez intégrer OpenShift Serverless à Red Hat OpenShift Service Mesh, puis configurer l'authentification JSON Web Token (JWT) et l'injection sidecar pour les services Knative.

4.6.2. Utilisation de l'authentification par jeton Web JSON avec Service Mesh 2.x

Vous pouvez utiliser l'authentification par jeton Web JSON (JWT) avec les services Knative en utilisant Service Mesh 2.x et OpenShift Serverless. Pour ce faire, vous devez créer des demandes et des politiques d'authentification dans l'espace de noms de l'application qui est membre de l'objet ServiceMeshMemberRoll. Vous devez également activer l'injection de sidecar pour le service.

4.6.2.1. Configuration de l'authentification par jeton Web JSON pour Service Mesh 2.x et OpenShift Serverless

Important

L'ajout d'une injection de sidecar aux pods dans les espaces de noms du système, tels que knative-serving et knative-serving-ingress, n'est pas pris en charge lorsque Kourier est activé.

Si vous avez besoin de l'injection de sidecar pour les pods dans ces espaces de noms, consultez la documentation OpenShift Serverless sur Integrating Service Mesh with OpenShift Serverless natively.

Conditions préalables

  • Vous avez installé OpenShift Serverless Operator, Knative Serving et Red Hat OpenShift Service Mesh sur votre cluster.
  • Installez le CLI OpenShift (oc).
  • Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.

Procédure

  1. Ajoutez l'annotation sidecar.istio.io/inject="true" à votre service :

    Exemple de service

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: <service_name>
    spec:
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: "true" 1
            sidecar.istio.io/rewriteAppHTTPProbers: "true" 2
    ...

    1
    Ajouter l'annotation sidecar.istio.io/inject="true".
    2
    Vous devez définir l'annotation sidecar.istio.io/rewriteAppHTTPProbers: "true" dans votre service Knative, car les versions 1.14.0 et supérieures d'OpenShift Serverless utilisent par défaut une sonde HTTP comme sonde de préparation pour les services Knative.
  2. Appliquer la ressource Service:

    $ oc apply -f <filename>
  3. Créer une ressource RequestAuthentication dans chaque espace de noms d'application sans serveur qui est un membre de l'objet ServiceMeshMemberRoll:

    apiVersion: security.istio.io/v1beta1
    kind: RequestAuthentication
    metadata:
      name: jwt-example
      namespace: <namespace>
    spec:
      jwtRules:
      - issuer: testing@secure.istio.io
        jwksUri: https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/jwks.json
  4. Appliquer la ressource RequestAuthentication:

    $ oc apply -f <filename>
  5. Autoriser l'accès à la ressource RequestAuthenticaton à partir des pods système pour chaque espace de noms d'application sans serveur qui est un membre de l'objet ServiceMeshMemberRoll, en créant la ressource AuthorizationPolicy suivante :

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: allowlist-by-paths
      namespace: <namespace>
    spec:
      action: ALLOW
      rules:
      - to:
        - operation:
            paths:
            - /metrics 1
            - /healthz 2
    1
    Le chemin d'accès à votre application pour collecter les métriques par pod système.
    2
    Le chemin d'accès à votre application pour sonder le pod du système.
  6. Appliquer la ressource AuthorizationPolicy:

    $ oc apply -f <filename>
  7. Pour chaque espace de noms d'application sans serveur qui est un membre de l'objet ServiceMeshMemberRoll, créez la ressource AuthorizationPolicy suivante :

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: require-jwt
      namespace: <namespace>
    spec:
      action: ALLOW
      rules:
      - from:
        - source:
           requestPrincipals: ["testing@secure.istio.io/testing@secure.istio.io"]
  8. Appliquer la ressource AuthorizationPolicy:

    $ oc apply -f <filename>

Vérification

  1. Si vous essayez d'utiliser une requête curl pour obtenir l'URL du service Knative, elle est refusée :

    Example command

    $ curl http://hello-example-1-default.apps.mycluster.example.com/

    Exemple de sortie

    RBAC: access denied

  2. Vérifier la demande avec un JWT valide.

    1. Obtenir le jeton JWT valide :

      $ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.8/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
    2. Accédez au service en utilisant le jeton valide dans l'en-tête de la requête curl:

      $ curl -H "Authorization: Bearer $TOKEN"  http://hello-example-1-default.apps.example.com

      La demande est désormais autorisée :

      Exemple de sortie

      Hello OpenShift!

4.6.3. Utilisation de l'authentification par jeton Web JSON avec Service Mesh 1.x

Vous pouvez utiliser l'authentification par jeton Web JSON (JWT) avec les services Knative en utilisant Service Mesh 1.x et OpenShift Serverless. Pour ce faire, vous devez créer une politique dans l'espace de noms de l'application qui est un membre de l'objet ServiceMeshMemberRoll. Vous devez également activer l'injection de sidecar pour le service.

4.6.3.1. Configuration de l'authentification par jeton Web JSON pour Service Mesh 1.x et OpenShift Serverless

Important

L'ajout d'une injection de sidecar aux pods dans les espaces de noms du système, tels que knative-serving et knative-serving-ingress, n'est pas pris en charge lorsque Kourier est activé.

Si vous avez besoin de l'injection de sidecar pour les pods dans ces espaces de noms, consultez la documentation OpenShift Serverless sur Integrating Service Mesh with OpenShift Serverless natively.

Conditions préalables

  • Vous avez installé OpenShift Serverless Operator, Knative Serving et Red Hat OpenShift Service Mesh sur votre cluster.
  • Installez le CLI OpenShift (oc).
  • Vous avez créé un projet ou avez accès à un projet avec les rôles et autorisations appropriés pour créer des applications et d'autres charges de travail dans OpenShift Container Platform.

Procédure

  1. Ajoutez l'annotation sidecar.istio.io/inject="true" à votre service :

    Exemple de service

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: <service_name>
    spec:
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: "true" 1
            sidecar.istio.io/rewriteAppHTTPProbers: "true" 2
    ...

    1
    Ajouter l'annotation sidecar.istio.io/inject="true".
    2
    Vous devez définir l'annotation sidecar.istio.io/rewriteAppHTTPProbers: "true" dans votre service Knative, car les versions 1.14.0 et supérieures d'OpenShift Serverless utilisent par défaut une sonde HTTP comme sonde de préparation pour les services Knative.
  2. Appliquer la ressource Service:

    $ oc apply -f <filename>
  3. Créer une politique dans l'espace de noms d'une application sans serveur, qui est un membre de l'objet ServiceMeshMemberRoll, qui n'autorise que les demandes avec des jetons Web JSON valides (JWT) :

    Important

    Les chemins /metrics et /healthz doivent être inclus dans excludedPaths car ils sont accessibles à partir des pods du système dans l'espace de noms knative-serving.

    apiVersion: authentication.istio.io/v1alpha1
    kind: Policy
    metadata:
      name: default
      namespace: <namespace>
    spec:
      origins:
      - jwt:
          issuer: testing@secure.istio.io
          jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.6/security/tools/jwt/samples/jwks.json"
          triggerRules:
          - excludedPaths:
            - prefix: /metrics 1
            - prefix: /healthz 2
      principalBinding: USE_ORIGIN
    1
    Le chemin d'accès à votre application pour collecter les métriques par pod système.
    2
    Le chemin d'accès à votre application pour sonder le pod du système.
  4. Appliquer la ressource Policy:

    $ oc apply -f <filename>

Vérification

  1. Si vous essayez d'utiliser une requête curl pour obtenir l'URL du service Knative, elle est refusée :

    $ curl http://hello-example-default.apps.mycluster.example.com/

    Exemple de sortie

    Origin authentication failed.

  2. Vérifier la demande avec un JWT valide.

    1. Obtenir le jeton JWT valide :

      $ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.6/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode -
    2. Accédez au service en utilisant le jeton valide dans l'en-tête de la requête curl:

      $ curl http://hello-example-default.apps.mycluster.example.com/ -H "Authorization: Bearer $TOKEN"

      La demande est désormais autorisée :

      Exemple de sortie

      Hello OpenShift!

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. Découvrez nos récentes mises à jour.

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.