Ce tutoriel explique comment déployer un service Cloud Run authentifié qui reçoit des événements de Cloud Storage à l'aide de Cloud Audit Logs. Utilisez ce tutoriel pour déployer des charges de travail de production. Le déclencheur Eventarc filtre les événements en fonction des entrées Cloud Audit Logs. Pour plus d'informations, consultez la section Déterminer des filtres d'événements pour Cloud Audit Logs.
Vous pouvez suivre ce tutoriel à l'aide de Google Cloud Console ou de Google Cloud CLI.
Objectifs
Au cours de ce tutoriel, vous allez :
Créer un bucket Cloud Storage qui servira de source d'événements.
Déployer un service récepteur d'événements sur Cloud Run.
Créer un déclencheur Eventarc.
Générer un événement en important un fichier dans le bucket Cloud Storage et l'afficher dans les journaux Cloud Run.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.
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.
Notez que par défaut, les autorisations Cloud Build incluent des autorisations permettant d'importer et de télécharger des artefacts Artifact Registry.
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 :
-
Éditeur Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrateur Cloud Run (
roles/run.admin
) - Administrateur Eventarc (
roles/eventarc.admin
) -
Accesseur de vues de journaux (
roles/logging.viewAccessor
) -
Administrateur de projet IAM (
roles/resourcemanager.projectIamAdmin
) -
Administrateur de compte de service (
roles/iam.serviceAccountAdmin
) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) - Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin
) -
Administrateur de l'espace de stockage (
roles/storage.admin
)
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.
Effectuez les étapes suivantes à l'aide de la console Google Cloud ou de la gcloud CLI :
Console
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage et Eventarc APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage et Eventarc APIs.
- Pour configurer l'accès aux données enregistrées dans vos journaux d'audit, activez les types de journaux Lecture de l'administrateur, Lecture des données et Écriture de données pour Google Cloud Storage :
-
Dans Google Cloud Console, accédez à la page Comptes de service.
- Cliquez sur Créer un compte de service.
-
Saisissez le nom du compte de service à afficher dans la console Google Cloud.
La console Google Cloud génère un ID de compte de service basé sur ce nom. Modifiez l'ID si nécessaire. Vous ne pourrez pas le modifier par la suite.
- Facultatif : saisissez la description du compte de service.
-
Si vous ne souhaitez pas définir de contrôles des accès à ce stade, cliquez sur OK pour terminer la création du compte de service.
Pour définir les contrôles des accès dès maintenant, cliquez sur Créer et continuer, puis passez à l'étape suivante.
- Sélectionnez les rôles Demandeur Cloud Run et Destinataire des événements Eventarc à attribuer au projet du compte de service associé à votre déclencheur Eventarc.
À des fins de test, ce rôle accorde le rôle Demandeur Cloud Run sur tous les services et jobs Cloud Run du projet. Vous pouvez toutefois l'accorder sur le service. Pour en savoir plus, consultez la section Accorder des autorisations de service Cloud Run.
Notez que si vous créez un déclencheur pour un service Cloud Run authentifié sans attribuer le rôle Demandeur Cloud Run, le déclencheur est bien créé et actif. Cependant, le déclencheur ne fonctionnera pas comme prévu et un message semblable au suivant s'affichera dans les journaux :
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
- Lorsque vous avez terminé d'ajouter des rôles, cliquez sur Continuer, puis sur OK pour terminer la création du compte de service.
gcloud
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage et Eventarc APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com storage.googleapis.com and eventarc.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage et Eventarc APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com logging.googleapis.com pubsub.googleapis.com run.googleapis.com storage.googleapis.com and eventarc.googleapis.com - Mettez à jour les composants
gcloud
:gcloud components update
- Connectez-vous à votre compte :
gcloud auth login
- Définissez les variables de configuration utilisées dans ce tutoriel :
export REGION=us-central1 gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION} export SERVICE_NAME=helloworld-events
- Pour configurer l'accès aux données enregistrées dans vos journaux d'audit, activez les types de journaux
ADMIN_READ
,DATA_READ
etDATA_WRITE
pour le servicestorage.googleapis.com
:- Consultez la stratégie IAM de votre projet et stockez-la dans un fichier :
gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
- Modifiez votre stratégie dans
/tmp/policy.yaml
. Vous pouvez ajouter ou modifier uniquement la configuration des journaux d'audit pour l'accès aux données.auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_WRITE - logType: DATA_READ service: storage.googleapis.com
- Rédigez votre nouvelle stratégie IAM :
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.gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
- Consultez la stratégie IAM de votre projet et stockez-la dans un fichier :
- Créez un compte de service pour le projet :
Une fois que vous avez créé un compte de service, un délai de sept minutes peut être nécessaire avant de pouvoir l'utiliser. Si vous tentez de l'utiliser immédiatement après sa création et que vous recevez une erreur, attendez au moins 60 secondes, puis réessayez.gcloud iam service-accounts create sample-service-account \ --description="A sample service account" \ --display-name="Sample service account"
- Pour vérifier que
sample-service-account
a bien été créé, exécutez la commande suivante : La sortie devrait ressembler à ce qui suit :gcloud iam service-accounts list
DISPLAY NAME EMAIL DISABLED Default compute service account PROJECT_NUMBER-compute@developer.gserviceaccount.com False Sample service account sample-service-account@PROJECT_ID.iam.gserviceaccount.com False
- Accordez les rôles Demandeur Cloud Run (
run.invoker
) et Récepteur d'événements Eventarc (roles/eventarc.eventReceiver
) du projet au compte de service associé à votre déclencheur Eventarc :gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/run.invoker"
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/eventarc.eventReceiver"
Remplacez
PROJECT_ID
par l'ID de votre projet Google Cloud.À des fins de test, ce rôle accorde le rôle Demandeur Cloud Run sur tous les services et jobs Cloud Run du projet. Vous pouvez toutefois l'accorder sur le service. Pour en savoir plus, consultez la section Accorder des autorisations de service Cloud Run.
Notez que si vous créez un déclencheur pour un service Cloud Run authentifié sans attribuer le rôle Demandeur Cloud Run, le déclencheur est bien créé et actif. Cependant, le déclencheur ne fonctionnera pas comme prévu et un message semblable au suivant s'affichera dans les journaux :
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
Créer un dépôt standard Artifact Registry
Créez un dépôt standard Artifact Registry pour stocker votre image de conteneur :Console
- Dans la console Google Cloud, accédez à la page Dépôts.
- Cliquez sur Créer un dépôt.
- Configurez votre dépôt :
- Saisissez un nom unique.
- Pour Format, choisissez Docker.
- Dans le champ Mode, choisissez Standard.
- Dans le champ Type d'emplacement, sélectionnez Région.
- Dans la liste Région, sélectionnez us-central1 (Iowa).
- Acceptez les autres paramètres par défaut et cliquez sur Créer.
gcloud
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=$REGION
Remplacez REPOSITORY
par un nom unique pour le dépôt Artifact Registry.
Créer un bucket Cloud Storage
Ce guide de démarrage rapide utilise Cloud Storage comme source d'événements. Pour créer un bucket de stockage, procédez comme suit :
Console
- Dans la console Google Cloud, accédez à la page Buckets.
- Cliquez sur Créer un bucket.
- Saisissez les informations relatives à votre bucket et cliquez sur Continuer à chaque étape :
- Saisissez un nom unique. Exemple :
eventarcbucket
- Sélectionnez Région comme Type d'emplacement.
- Sélectionnez us-central1 (Iowa) comme Emplacement.
- Sélectionnez Standard comme classe de stockage par défaut.
- Sélectionnez Uniforme comme type de Contrôle des accès.
- Saisissez un nom unique. Exemple :
- Cliquez sur Create (Créer).
gcloud
gsutil mb -l $REGION gs://events-tutorial-PROJECT_ID/
Une fois la source d'événements créée, vous pouvez déployer le service récepteur d'événements sur Cloud Run.
Déployer le service récepteur d'événements sur Cloud Run
Déployez un service Cloud Run qui reçoit et consigne les événements. Pour déployer l'exemple de service récepteur d'événements, procédez comme suit :
Console
- Clonez l'exemple de dépôt dans votre compte GitHub :
- Sur GitHub, accédez à GoogleCloudPlatform/golang-samples.
- Cliquez sur Fork (Dupliquer).
- Si vous y êtes invité, sélectionnez l'emplacement où vous souhaitez dupliquer le dépôt.
- Sur GitHub, accédez à GoogleCloudPlatform/java-docs-samples.
- Cliquez sur Fork (Dupliquer).
- Si vous y êtes invité, sélectionnez l'emplacement où vous souhaitez dupliquer le dépôt.
- Sur GitHub, accédez à GoogleCloudPlatform/dotnet-docs-samples.
- Cliquez sur Fork (Dupliquer).
- Si vous y êtes invité, sélectionnez l'emplacement où vous souhaitez dupliquer le dépôt.
- Sur GitHub, accédez à GoogleCloudPlatform/nodejs-docs-samples.
- Cliquez sur Fork (Dupliquer).
- Si vous y êtes invité, sélectionnez l'emplacement où vous souhaitez dupliquer le dépôt.
- Sur GitHub, accédez à GoogleCloudPlatform/python-docs-samples.
- Cliquez sur Fork (Dupliquer).
- Si vous y êtes invité, sélectionnez l'emplacement où vous souhaitez dupliquer le dépôt.
- Dans Google Cloud Console, accédez à la page Services.
- Cliquez sur Create service (Créer un service) pour afficher le formulaire Create service.
- Sélectionnez Déployer en continu depuis un dépôt.
Les modifications apportées à votre dépôt GitHub sont automatiquement intégrées aux images de conteneurs dans Artifact Registry et déployées vers Cloud Run.
- Cliquez sur Configurer avec Cloud Build pour ouvrir le formulaire Configurer avec Cloud Build.
- Si vous y êtes invité, activez l'API Cloud Build et l'API Artifact Analysis.
- Sélectionnez GitHub comme fournisseur de dépôt.
- Si vous y êtes invité, cliquez sur Installer Google Cloud Build.
- Sélectionnez le dépôt GitHub que vous avez dupliqué en guise de Dépôt.
- Cliquez sur Next (Suivant).
- Dans le champ Branche, saisissez
^main$
. - Sélectionnez Dockerfile dans le champ Type de compilation, puis indiquez l'emplacement source du Dockerfile :
eventarc/audit-storage/Dockerfile
ou
eventarc/audit_storage/Dockerfile
(Go)
- Cliquez sur Enregistrer.
- Dans le formulaire Créer un service, saisissez un nom de service.
Par exemple,
helloworld-events
. - Sélectionnez us-central1(Iowa) comme région dans laquelle vous souhaitez placer votre service.
- Sélectionnez l'une des options Entrée en fonction du trafic entrant que vous souhaitez autoriser dans le service Cloud Run.
- Sélectionnez Exiger l'authentification.
- Cliquez sur Créer.
Go
Java
.NET
Node.js
Python
gcloud
- Clonez le dépôt GitHub :
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git cd golang-samples/eventarc/audit_storage
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git cd java-docs-samples/eventarc/audit-storage
.NET
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git cd dotnet-docs-samples/eventarc/audit-storage
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git cd nodejs-docs-samples/eventarc/audit-storage
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git cd python-docs-samples/eventarc/audit-storage
- Créez le conteneur et importez-le dans Cloud Build :
gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
- Déployez l'image de conteneur dans Cloud Run :
gcloud run deploy $SERVICE_NAME \ --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
Lorsque vous êtes invité à autoriser les appels non authentifiés, saisissez
n
.Une fois le déploiement effectué, la ligne de commande affiche l'URL du service.
Maintenant que vous avez déployé votre service récepteur d'événements appelé helloworld-events
sur Cloud Run, vous pouvez configurer votre déclencheur.
Créer un déclencheur Eventarc
Le déclencheur Eventarc envoie des événements à partir du bucket Cloud Storage vers le service Cloud Run helloworld-events
.
Console
- Dans la console Google Cloud, accédez à la page Déclencheurs.
- Cliquez sur Créer un déclencheur.
- Saisissez un nom de déclencheur.
Il s'agit de l'ID du déclencheur, qui doit commencer par une lettre. Il peut contenir jusqu'à 63 lettres minuscules, chiffres ou traits d'union.
- Sélectionnez un type de déclencheur :
- Propriétaire : filtre les événements envoyés depuis des fournisseurs Google Cloud (directement ou via des entrées Cloud Audit Logs) ou des fournisseurs utilisant des messages Pub/Sub.
- Tiers : filtre les événements envoyés depuis des fournisseurs tiers.
- Dans la liste Fournisseur d'événements, sélectionnez Cloud Storage comme source des événements.
- Dans la liste Type d'événement, sélectionnez storage.objects.create.
- Dans la liste Région, sélectionnez us-central1 comme région à partir de laquelle recevoir les événements.
- Sélectionnez le compte de service que vous avez créé. Par exemple,
SERVICE_ACCOUNT_ID@PROJECT_ID
.iam.gserviceaccount.com. - Dans la liste Destination de l'événement, sélectionnez Cloud Run.
- Dans la liste Sélectionner un service Cloud Run, sélectionnez helloworld-events.
- Cliquez sur Créer. Notez que vous pouvez également créer un déclencheur Eventarc à l'aide de la page de la console Cloud Run.
gcloud
- Créez un déclencheur filtrant les événements Cloud Storage et utilisant le compte de service que vous avez créé :
Remplacezgcloud eventarc triggers create events-tutorial-trigger \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=sample-service-account@PROJECT_ID.iam.gserviceaccount.com
PROJECT_ID
par l'ID du projet Google Cloud.Où :
type
: indique que les journaux d'audit sont créés lorsque les critères de filtre du déclencheur sont remplis.serviceName
: service qui écrit le journal d'audit, à savoir Cloud Storage.methodName
: opération en cours d'audit, à savoirstorage.objects.create
.
events-tutorial-trigger
. - Pour vérifier que
events-tutorial-trigger
a bien été créé, exécutez la commande suivante :gcloud eventarc triggers list --location=$REGION
Le déclencheur,
events-tutorial-trigger
, est répertorié avec une cible helloworld-events
.
Générer et afficher un événement
- Pour générer un événement, procédez comme suit :
Console
- Créez un fichier texte portant le nom
random.txt
et contenant le texte "Hello World". - Dans la console Google Cloud, accédez à la page Buckets.
- Sélectionnez le bucket de stockage que vous avez créé.
- Dans l'onglet Objets, cliquez sur Importer des fichiers, puis importez le fichier
random.txt
.
gcloud
Importez un fichier texte dans Cloud Storage :
echo "Hello World" > random.txt gsutil cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
- Créez un fichier texte portant le nom
- Pour afficher l'entrée de journal, procédez comme suit :
- Dans la console Google Cloud, accédez à la page Services.
- Dans la liste des services, cliquez sur le nom du service que vous avez créé pour accéder à la page Informations sur le service.
- Cliquez sur l'onglet Journaux pour obtenir les journaux de requête et de conteneur pour toutes les révisions de ce service. Vous pouvez filtrer les journaux par niveau de gravité.
- Recherchez une entrée de journal semblable à ceci :
oùDetected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
BUCKET_NAME
est le nom du bucket Cloud Storage. -
gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
- Recherchez une entrée de journal semblable à ceci :
oùDetected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
BUCKET_NAME
est le nom du bucket Cloud Storage.
Console
gcloud
Vous venez de déployer un service récepteur d'événements sur Cloud Run, de créer un déclencheur Eventarc, de générer un événement à partir de Cloud Storage et de l'afficher dans les journaux Cloud Run.
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 Artifact Registry, le stockage des fichiers dans votre bucket Cloud Storage, et lesRessources Eventarc.Vous pouvez :
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.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID