Recevoir des événements à l'aide de Cloud Audit Logs (gcloud CLI)

Ce guide de démarrage rapide explique comment configurer un service Google Kubernetes Engine (GKE) en tant que destination pour recevoir des événements de Cloud Storage à l'aide d'Eventarc.

Dans ce guide, vous allez :

  1. configurer un compte de service afin qu'Eventarc puisse extraire des événements et les transférer à la cible ;
  2. créer un bucket Cloud Storage qui servira de source d'événements ;
  3. créer un cluster GKE ;
  4. initialiser les destinations GKE dans Eventarc ;
  5. déployer un service GKE qui reçoit des événements ;
  6. créer un déclencheur Eventarc qui envoie des événements depuis Cloud Storage vers le service GKE ;
  7. Importer un fichier dans le bucket Cloud Storage pour générer un événement et afficher l'événement dans les journaux du pod GKE.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Installez Google Cloud CLI.
  3. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  4. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  6. Installez Google Cloud CLI.
  7. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  8. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  9. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  10. Mettez à jour les composants de Google Cloud CLI :
    gcloud components update
  11. Activez les API Eventarc, Resource Manager et Google Kubernetes Engine :
    gcloud services enable eventarc.googleapis.com \
        cloudresourcemanager.googleapis.com \
        container.googleapis.com
  12. Définissez les variables de configuration utilisées dans ce guide de démarrage rapide :
    PROJECT_ID=$(gcloud config get-value project)
    TRIGGER_SA=eventarc-sa
    CLUSTER_NAME=events-cluster
    SERVICE_NAME=hello-gke
  13. Si vous êtes le créateur du projet, vous disposez du rôle de base Propriétaire (roles/owner). Par défaut, ce rôle Identity and Access Management (IAM) inclut les autorisations nécessaires pour accéder à la plupart des ressources Google Cloud. Vous pouvez ignorer cette étape.

    Si vous n'êtes pas le créateur du projet, les autorisations requises doivent être accordées au compte principal approprié sur le projet. Par exemple, un compte principal peut être un compte Google (pour les utilisateurs finaux) ou un compte de service (pour les applications et les charges de travail de calcul). Pour en savoir plus, consultez la page Rôles et autorisations pour la destination de votre événement.

    Autorisations requises

    Pour obtenir les autorisations nécessaires pour suivre ce tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

    Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

    Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

  14. Le compte de service Compute Engine par défaut est créé automatiquement après l'activation ou l'utilisation d'un service Google Cloud utilisant Compute Engine.

    À des fins de test, vous pouvez associer ce compte de service à un déclencheur Eventarc pour représenter l'identité du déclencheur. Notez le format de l'adresse e-mail à utiliser lors de la création d'un déclencheur :

    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Remplacez PROJECT_NUMBER par votre numéro de projet Google Cloud. Vous pouvez trouver le numéro de votre projet sur la page Bienvenue de la console Google Cloud ou en exécutant la commande suivante :

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    Le compte de service Compute Engine dispose automatiquement du rôle de base Éditeur (roles/editor) sur votre projet. Toutefois, si les attributions automatiques de rôles ont été désactivées, consultez les instructions Rôles et autorisations applicables pour créer un compte de service et lui accorder les rôles requis.

  15. Attribuez le rôle d'abonné Pub/Sub (roles/pubsub.subscriber) sur le projet au compte de service Compute Engine par défaut afin que le déclencheur Eventarc puisse extraire des événements. à partir de Pub/Sub.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/pubsub.subscriber
  16. Attribuez le rôle Récepteur d'événements Eventarc (roles/eventarc.eventReceiver) sur le projet au compte de service Compute Engine par défaut afin que le déclencheur Eventarc puisse recevoir des événements en provenance des fournisseurs d'événements
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
  17. Si vous avez activé l'agent de service Cloud Pub/Sub le 8 avril 2021 ou à une date antérieure, attribuez le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator) au compte de service géré par Google pour accepter les requêtes push Pub/Sub authentifiées. Sinon, ce rôle est attribué par défaut :
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  18. Pour Google Cloud Storage, activez les types de journaux pour les services suivants : Lecture administrateur, Lecture de données et Écriture de données :

    1. Consultez la stratégie IAM de votre projet et stockez-la dans un fichier :
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. Modifiez votre stratégie dans `/tmp/policy.yaml`. Vous ne devez ajouter ou modifier que la configuration des journaux d'audit pour l'accès aux données. Attention : Vous devez conserver les sections `bindings` et `etag:` sans les modifier. Dans le cas contraire, votre projet pourrait devenir inutilisable.
      auditConfigs:
        - auditLogConfigs:
          - logType: ADMIN_READ
          - logType: DATA_WRITE
          - logType: DATA_READ
          service: storage.googleapis.com
        bindings:
        - members:
          - user:EMAIL_ADDRESS
          role: roles/owner
        etag: BwW_bHKTV5U=
        version: 1
      Remplacez EMAIL_ADDRESS par votre adresse e-mail.
    3. Rédigez votre nouvelle stratégie IAM :
      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      Si la commande précédente signale un conflit avec une autre modification, répétez ces étapes en commençant par lire le stratégie IAM du projet.

Créer un bucket Cloud Storage

Ce guide de démarrage rapide utilise Cloud Storage comme source d'événements. Créez un bucket Cloud Storage :

gsutil mb -l us-central1 gs://events-quickstart-$(gcloud config get-value project)/

Une fois la source d'événements créée, vous pouvez déployer le service récepteur d'événements sur GKE.

Créer un cluster GKE

Un cluster GKE contient au moins une machine de plan de contrôle de cluster et plusieurs machines de calcul appelées nœuds. Les nœuds sont des instances de machines virtuelles (VM) Compute Engine qui exécutent les processus Kubernetes nécessaires pour faire partie du cluster. Vous déployez les applications sur des clusters, et ces applications s'exécutent sur les nœuds.

Créez un cluster Autopilot nommé events-cluster :

gcloud container clusters create-auto $CLUSTER_NAME --region us-central1

La création du cluster peut prendre plusieurs minutes. Une fois le cluster créé, le résultat doit ressembler à ce qui suit :

Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1/projects/MY_PROJECT/zones/us-central1/clusters/events-cluster].
[...]
STATUS: RUNNING

Cela crée un cluster GKE nommé events-cluster dans un projet avec un ID de projet Google Cloud MY_PROJECT.

Activer les destinations GKE

Pour chaque déclencheur qui cible un service GKE, Eventarc crée un composant de redirecteur d'événement qui extrait les événements de Pub/Sub et les transfère vers la cible. Pour créer le composant et gérer les ressources dans le cluster GKE, accordez des autorisations à l'agent de service Eventarc :

  1. Activez les destinations GKE pour Eventarc :

    gcloud eventarc gke-destinations init
    
  2. Lorsque vous êtes invité à lier les rôles requis, saisissez y.

    Les rôles suivants sont liés au compte de service :

    • compute.viewer
    • container.developer
    • iam.serviceAccountAdmin

Créer une destination de service GKE

À l'aide d'une image prédéfinie, gcr.io/cloudrun/hello, déployez un service GKE qui recevra et consignera les événements :

  1. Kubernetes se sert d'un fichier YAML appelé kubeconfig pour stocker les informations d'authentification de cluster pour kubectl. Mettez à jour le fichier kubeconfig avec les identifiants et les informations sur les points de terminaison pour pointer kubectl vers le cluster GKE :

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --region us-central1
    
  2. Créez un déploiement Kubernetes :

    kubectl create deployment $SERVICE_NAME \
        --image=gcr.io/cloudrun/hello
    
  3. Exposez-le en tant que service Kubernetes :

    kubectl expose deployment $SERVICE_NAME \
        --type ClusterIP --port 80 --target-port 8080
    

Créer un déclencheur Eventarc

Lorsque vous importez un fichier dans Cloud Storage, le déclencheur Eventarc envoie des événements depuis Cloud Storage vers le service GKE hello-gke pour Anthos.

  1. Créez un déclencheur Cloud Audit Logs :

    gcloud eventarc triggers create my-gke-trigger \
        --location="us-central1" \
        --destination-gke-cluster="events-cluster" \
        --destination-gke-location="us-central1" \
        --destination-gke-namespace="default" \
        --destination-gke-service="hello-gke" \
        --destination-gke-path="/" \
        --event-filters="type=google.cloud.audit.log.v1.written" \
        --event-filters="serviceName=storage.googleapis.com" \
        --event-filters="methodName=storage.objects.create" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
    

    Cette action crée un déclencheur appelé my-gke-trigger.

  2. Vérifiez que le déclencheur a bien été créé :

    gcloud eventarc triggers list
    

    La sortie devrait ressembler à ce qui suit :

    NAME: my-gke-trigger
    TYPE: google.cloud.audit.log.v1.written
    DESTINATION: GKE: hello-gke
    ACTIVE: By 20:39:43
    LOCATION: us-central1
    

Générer et afficher un événement

Importez un fichier texte dans Cloud Storage pour générer un événement et déclencher le service GKE. Vous pouvez ensuite afficher le message de l'événement dans les journaux du pod.

  1. Transférez un fichier texte vers Cloud Storage :

    echo "Hello World" > random.txt
    gsutil cp random.txt gs://events-quickstart-$(gcloud config get-value project)/random.txt

    L'importation génère un événement et le pod GKE consigne le message de l'événement.

  2. Pour afficher le message de l'événement, procédez comme suit :

    1. Recherchez l'ID du pod :

      kubectl get pods

      La sortie devrait ressembler à ce qui suit :

      NAME                                         READY   STATUS             RESTARTS   AGE
      hello-gke-645964f578-2mjjt                   1/1     Running            0          35s

      Copiez la valeur NAME du pod à utiliser à l'étape suivante.

    2. Vérifiez les journaux du pod :

      kubectl logs NAME

      Remplacez NAME par le nom du pod que vous avez copié.

    3. Recherchez une entrée de journal semblable à ceci :

      2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT
      {"severity":"INFO","eventType":"google.cloud.audit.log.v1.written","message":"Received event of type google.cloud.audit.log.v1.written. [...]}
      

Effectuer un nettoyage

Bien que Cloud Run ne facture pas un service inutilisé, il se peut que des frais vous soient toujours facturés pour le stockage de l'image de conteneur dans Container Registry, les ressources Eventarc, les messages Pub/Sub et pour le cluster GKE.

Vous pouvez supprimer votre image, supprimer votre bucket de stockage et supprimer le cluster GKE.

Pour supprimer le déclencheur Eventarc :

gcloud eventarc triggers delete my-gke-trigger

Vous pouvez également supprimer votre projet Google Cloud pour éviter des frais. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.

gcloud projects delete PROJECT_ID_OR_NUMBER

Remplacez PROJECT_ID_OR_NUMBER par l'ID ou le numéro du projet.

Étape suivante

Recevoir des événements à l'aide de Pub/Sub (Google Cloud CLI)