Utiliser Workload Identity Federation for GKE

Découvrez comment authentifier vos services Knative serving avec Workload Identity Federation for GKE pour accéder aux APIGoogle Cloud telles que les API Compute, Storage et Database, ou des API de machine learning.

Pour authentifier vos services Knative serving, vous devez effectuer les opérations suivantes :

  1. Activer Workload Identity Federation for GKE dans votre cluster
  2. Créez un compte de service Kubernetes et attribuez-lui les rôles IAM requis.

Une fois ces étapes effectuées, vous pouvez déployer un nouveau service Knative serving qui utilise l'identité que vous avez créée.

Activer Workload Identity Federation for GKE sur votre cluster

Pour configurer Workload Identity Federation for GKE avec Knative serving, vous pouvez configurer un parc de fédération d'identité de charge de travail au lieu d'utiliser un fichier JSON de compte de service Google Cloud .

Configurer les autorisations pour activer toutes les métriques

Pour activer les métriques, telles que le nombre de requêtes ou la latence des requêtes dans Google Cloud Observability, vous devez définir les autorisations d'écriture pour Cloud Monitoring. Par exemple, vous pouvez accorder le rôle Rédacteur de métriques Monitoring (roles/monitoring.metricWriter) au compte de service Kubernetes associé à Knative serving, car il inclut les autorisations nécessaires pour écrire des données de surveillance.

Attribuer des rôles IAM à un compte de service Kubernetes

Tout service Knative Serving exécuté en tant que compte de service Kubernetes que vous configurez s'authentifie automatiquement avec son identité fédérée lorsqu'il accède aux API Google Cloud . Le compte de service Kubernetes doit exister dans le cluster et l'espace de noms du service Knative serving pour lequel vous souhaitez utiliser Workload Identity Federation for GKE.

  1. Si aucun compte de service Kubernetes (KSA) n'existe, créez-en un dans le même espace de noms Kubernetes que votre service Knative serving. Sinon, passez à l'étape suivante :

    kubectl create serviceaccount --namespace K8S_NAMESPACE KUBERNETES_SERVICEACCOUNT
  2. Attribuez les rôles IAM requis directement à votre compte de service Kubernetes :

    gcloud projects add-iam-policy-binding RESOURCE_PROJECT_ID \
        --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/K8S_NAMESPACE/sa/KUBERNETES_SERVICEACCOUNT" \
        --role "ROLE_NAME" \
        --condition=None

    Remplacez :

    • Remplacez RESOURCE_PROJECT_ID par l'ID du projet Google Cloud dans lequel résident les ressources Google Cloud cibles.
    • PROJECT_NUMBER par le numéro du projetGoogle Cloud pour le cluster où se trouvent votre compte de service Kubernetes et vos services Knative serving.
    • PROJECT_ID par l'ID du projet Google Cloud pour le cluster où se trouvent votre compte de service Kubernetes et vos services Knative serving.
    • K8S_NAMESPACE et KUBERNETES_SERVICEACCOUNT par l'espace de noms et le nom de votre compte de service Kubernetes.
    • ROLE_NAME par le rôle IAM à attribuer à votre compte de service Kubernetes, tel que roles/monitoring.metricWriter.

Déployer un nouveau service pour qu'il utilise Workload Identity Federation for GKE

Déployez un nouveau service Knative serving qui utilise Workload Identity Federation for GKE que vous avez activé.

Console

  1. Accédez à Knative serving dans la console Google Cloud  :

    Accéder à Knative serving

  2. Cliquez sur Créer un service si vous configurez un nouveau service sur lequel effectuer un déploiement. Si vous configurez un service existant, cliquez sur celui-ci, puis sur Modifier et déployer la nouvelle révision.

  3. Sous Paramètres avancés, cliquez sur Conteneur.

  4. Cliquez sur le menu déroulant Service account (Compte de service), puis sélectionnez le compte de service souhaité.

  5. Cliquez sur Next (Suivant) pour passer à la section suivante.

  6. Dans la section Configurer la manière dont ce service est déclenché, sélectionnez la connectivité que vous souhaitez utiliser pour appeler le service.

  7. Cliquez sur Créer pour déployer l'image sur Knative serving et attendez la fin du déploiement.

Ligne de commande

  • Pour les services existants, définissez le compte de service Kubernetes en exécutant la commande gcloud run services update avec les paramètres suivants :

    gcloud run services update SERVICE --service-account KUBERNETES_SERVICEACCOUNT

    Remplacez :

    • SERVICE par le nom de votre service Knative serving ;
    • KUBERNETES_SERVICEACCOUNT par le compte de service Kubernetes que vous avez utilisé pour créer la fonctionnalité Workload Identity.
  • Pour les nouveaux services, définissez le compte de service Kubernetes en exécutant la commande gcloud run deploy avec le paramètre --service-account :

    gcloud run deploy --image IMAGE_URL --service-account KUBERNETES_SERVICEACCOUNT

    Remplacez :

    • IMAGE_URL par une référence à l'image de conteneur, par exemple gcr.io/cloudrun/hello.
    • KUBERNETES_SERVICEACCOUNT par le compte de service Kubernetes que vous avez utilisé pour créer la fonctionnalité Workload Identity.

YAML

Vous pouvez télécharger la configuration d'un service existant dans un fichier YAML avec la commande gcloud run services describe à l'aide de l'option --format=export. Vous pouvez ensuite modifier ce fichier YAML et déployer ces modifications à l'aide de la commande gcloud run services replace. Veillez à ne modifier que les attributs spécifiés.

  1. Téléchargez la configuration de votre service dans un fichier nommé service.yaml sur l'espace de travail local :

    gcloud run services describe SERVICE --format export > service.yaml

    Remplacez SERVICE par le nom de votre service Knative serving.

  2. Dans votre fichier local, mettez à jour l'attribut serviceAccountName: :

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: KUBERNETES_SERVICEACCOUNT

    Remplacer

    • SERVICE par le nom de votre service Knative serving ;
    • KUBERNETES_SERVICEACCOUNT par le compte de service Kubernetes que vous avez utilisé pour créer la fonctionnalité Workload Identity.
  3. Déployez la configuration sur votre service Knative serving en exécutant la commande suivante :

    gcloud run services replace service.yaml

Migrer des services existants pour qu'ils utilisent Workload Identity Federation for GKE

Si vous avez activé Workload Identity Federation for GKE sur un cluster existant, chaque service de ce cluster pour lequel vous souhaitez l'utiliser doit être migré. Découvrez comment migrer des services existants.

Étapes suivantes

Découvrez comment gérer l'accès à vos services.