Utiliser Workload Identity

Découvrez comment authentifier vos services de diffusion Knative avec Workload Identity pour accéder aux API Google Cloud telles que les API de calcul, de stockage et de base de données, ou les API de machine learning.

Pour authentifier vos services de diffusion Knative, vous devez:

  1. Activer Workload Identity dans votre cluster
  2. Configurer les autorisations
  3. Associer votre compte de service Kubernetes (KSA) à un compte de service Google (GSA).

Après avoir suivi ces étapes, vous pouvez déployer un nouveau service de diffusion Knative utilisant l'identité que vous avez créée.

Activer Workload Identity sur votre cluster

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

Configurer les autorisations pour activer toutes les métriques

Pour activer des métriques telles que la création de rapports sur le nombre de requêtes ou la latence des requêtes pour Google Cloud Observability, vous devez accorder des autorisations d'écriture à Cloud Monitoring. Par exemple, vous pouvez attribuer le rôle Rédacteur de métriques Monitoring (roles/monitoring.metricWriter) au compte de service Google associé à la diffusion Knative, car il inclut les autorisations nécessaires pour écrire des données de surveillance. Pour en savoir plus sur la création de comptes de service Google, consultez la page Utiliser des comptes de service.

Lier des comptes de service

Vous devez configurer une relation afin qu'un compte de service Kubernetes (KSA) agisse en tant que compte de service Google (GSA). Toute charge de travail exécutée en tant que KSA que vous associez s'authentifie automatiquement en tant que GSA lors de l'accès aux API Google Cloud. Le KSA que vous liez doit exister dans le cluster et l'espace de noms du service de diffusion Knative pour lequel vous souhaitez utiliser Workload Identity. Le système Google Search Appliance peut appartenir à un projet Google Cloud différent du projet Google Cloud où réside le cluster.

  1. Si aucun GSA n'existe, créez-en un. Dans le cas contraire, passez à l'étape suivante. Vous pouvez créer un système Google Search Appliance à utiliser avec la diffusion Knative dans n'importe quel projet Google Cloud de votre organisation, puis l'utiliser dans le projet Google Cloud où s'exécutent vos services de diffusion Knative.

    Pour créer un système GSA, exécutez la commande suivante :

    gcloud iam service-accounts create GSA_NAME

    Remplacez GSA_NAME par le nom du nouveau compte de service Google.

    Pour en savoir plus sur l'utilisation des comptes de service Google avec vos services de diffusion Knative, consultez la page Utiliser des comptes de service.

  2. Assurez-vous que votre GSA dispose des rôles IAM dont vous avez besoin. Vous pouvez attribuer des rôles supplémentaires à l'aide de la commande suivante :

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role "ROLE_NAME"
    

    Remplacez :

    • PROJECT_ID par l'ID du projet Google Cloud dans lequel réside votre compte de service Google.
    • GSA_NAME par le nom de votre compte de service Google.
    • ROLE_NAME par le rôle IAM à attribuer à votre GSA, tel que roles/monitoring.metricWriter.
  3. S'il n'existe pas de compte de service Kubernetes, créez-en un dans le même espace de noms Kubernetes que votre service de diffusion Knative. Sinon, passez à l'étape suivante:

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  4. Liez les comptes de service Kubernetes et Google pour créer l'identité, puis déployez-la sur votre cluster:

    1. Autorisez le KSA à emprunter l'identité du GSA en créant une liaison de stratégie IAM entre les deux.

      gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \
      GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      Remplacez :

      • PROJECT_ID par l'ID du projet Google Cloud pour le cluster contenant votre compte de service Kubernetes et vos services de diffusion Knative.
      • K8S_NAMESPACE/KSA_NAME par l'espace de noms et le nom de votre compte de service Kubernetes.
      • GSA_NAME@GSA_PROJECT_ID par le nom de votre compte de service Google et l'ID du projet Google Cloud. Vous pouvez utiliser n'importe quel compte de service Google dans votre organisation. Pour afficher vos comptes de service Google, consultez la page Répertorier les comptes de service.
    2. Ajoutez l'annotation iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID au KSA à l'aide de l'adresse e-mail du GSA.

      kubectl annotate serviceaccount \
      --namespace K8S_NAMESPACE KSA_NAME \
       iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      Remplacez :

      • K8S_NAMESPACE/KSA_NAME par l'espace de noms et le nom du compte de service Kubernetes pour lequel vous avez créé une liaison.
      • GSA_NAME@GSA_PROJECT_ID par le nom de votre compte de service Google et l'ID du projet Google Cloud pour lequel vous avez créé une liaison.

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

Déployez un nouveau service de diffusion Knative qui utilise la Workload Identity que vous avez créée.

Console

  1. Accédez à l'inférence Knative dans la console Google Cloud:

    Accéder à l'inférence Knative

  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 la diffusion Knative 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 KSA_NAME
    

    Remplacez :

    • SERVICE par le nom de votre service de diffusion Knative.
    • KSA_NAME par le compte de service Kubernetes que vous avez utilisé pour créer l'identité de charge de travail.
  • 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 KSA_NAME
    

    Remplacez :

    • IMAGE_URL par une référence à l'image de conteneur, par exemple gcr.io/cloudrun/hello.
    • KSA_NAME par le compte de service Kubernetes que vous avez utilisé pour créer l'identité de charge de travail.

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 de diffusion Knative.

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

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

    Remplacer

    • SERVICE par le nom de votre service de diffusion Knative.
    • KSA_NAME par le compte de service Kubernetes que vous avez utilisé pour créer l'identité de la charge de travail.
  3. Déployez la configuration sur votre service de diffusion Knative en exécutant la commande suivante:

    gcloud run services replace service.yaml

Migrer des services existants pour qu'ils utilisent Workload Identity

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

Étapes suivantes

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