Autoriser l'agent Logging

Ce guide explique comment vous assurer que l'agent Logging, que vous installez sur votre instance de machine virtuelle (VM), est autorisé à envoyer des données de télémétrie à Google Cloud Observability.

Présentation des autorisations

L'autorisation fait référence au processus permettant de déterminer les autorisations dont dispose un client authentifié pour un ensemble de ressources. Google Cloud autorise l'agent Logging sur une instance de VM Compute Engine à l'aide des identifiants par défaut de l'application (ADC, Application Default Credentials).

L'agent Logging accepte les identifiants par défaut de l'application qui authentifient le compte de service associé d'une VM ou une clé de compte de service.

  • Un compte de service associé fait référence à un compte de service spécifique à une ressource donnée, telle qu'une VM. Le compte de service possède ses propres identifiants uniques. Les ADC utilisent le serveur de métadonnées de la VM pour obtenir des identifiants pour un service.
  • Une clé de compte de service fait référence à une clé privée utilisée pour autoriser la paire de clés sur un compte de service d'un projet, ce qui vous permet de créer un jeton d'accès. Ce jeton vous permet de fournir une identité afin de pouvoir interagir avec les API Google Cloud au nom du compte de service.

Nous vous recommandons de configurer les ADC pour authentifier un compte de service associé autant que possible, car la clé privée nécessite un stockage local, et ce stockage peut être compromis. Pour en savoir plus sur les clés de compte de service, consultez la page Bonnes pratiques de gestion des clés de compte de service.

Pour les instances de VM AWS EC2, l'agent Logging n'accepte l'authentification qu'à l'aide de la méthode de clé de compte de service.

Avant de commencer

Lisez ce guide si l'un des cas suivants s'applique à vous :

  • Si vous exécutez des instances Compute Engine très anciennes ou si vous avez modifié les niveaux d'accès ou les paramètres de compte de service de vos instances Compute Engine, vous devez suivre la procédure décrite dans ce guide avant d'installer l'agent. Ces VM peuvent ne pas posséder le fichier de clé de compte de service requis. Pour plus d'informations sur la vérification des niveaux d'accès et des paramètres de compte de service de vos instances, consultez la section Vérifier les identifiants Compute Engine.

    Sur les nouvelles instances de VM Compute Engine, les niveaux d'accès et les paramètres de compte de service sont suffisants pour exécuter les agents.

  • Si vous exécutez des instances de VM Amazon EC2 (AWS VC2), procédez comme suit avant d'installer l'agent :

    1. Identifiez le projet hôte AWS du compte AWS à l'aide de vos instances EC2. Le projet d'hébergement est un projet Google Cloud dont le seul but est de stocker les métriques et les journaux des instances EC2 dans un compte AWS.

      Si vous ne trouvez pas de projet hôte AWS pour le compte, nous vous recommandons de créer un projet Google Cloud qui servira de projet hôte. Si vous disposez d'instances EC2 dans plusieurs comptes AWS, créez un projet Google Cloud pour chaque compte. Nous vous recommandons également d'utiliser une convention d'attribution de noms pour ces projets ou d'utiliser des libellés de projet, afin de pouvoir identifier vos projets hôtes. Nous vous déconseillons de réutiliser un projet Google Cloud existant, en particulier s'il contient des ressources Google Cloud.

    2. Suivez la procédure pour autoriser l'agent à l'aide d'un fichier de clé de compte de service.

Pour vérifier les niveaux d'accès, procédez comme suit :

  1. Interrogez les niveaux d'accès en exécutant la commande suivante sur votre instance Compute Engine :
    curl --silent --connect-timeout 1 -f -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/scopes
  2. Dans le résultat de la commande, si le niveau d'accès https://www.googleapis.com/auth/cloud-platform est répertorié, vous disposez d'une autorisation suffisante.

    Si https://www.googleapis.com/auth/cloud-platform n'est pas répertorié, vous avez besoin de deux niveaux d'accès, l'un de chacune des paires "journalisation" et "surveillance" suivants :

    • https://www.googleapis.com/auth/logging.write ou
      https://www.googleapis.com/auth/logging.admin
    • https://www.googleapis.com/auth/monitoring.write ou
      https://www.googleapis.com/auth/monitoring.admin

Pour modifier les niveaux d'accès, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Instances de VM :

    Accéder à la page Instances de VM

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Compute Engine.

  2. Si nécessaire, cliquez sur la liste déroulante des projets Google Cloud et sélectionnez le nom de votre projet.
  3. Dans le menu de navigation, sélectionnez Instances de VM, puis cliquez sur l'onglet Instances et sur le nom de votre VM.
  4. Arrêtez la VM en cliquant sur  Arrêter.
  5. Une fois la VM arrêtée, cliquez sur  Modifier.
  6. Recherchez les niveaux d'accès dans la section Identité et accès à l'API de la page, puis sélectionnez Définir l'accès pour chaque API.
  7. Pour les entrées API Stackdriver Logging et API Stackdriver Monitoring, sélectionnez Écriture seule.
  8. Cliquez sur Enregistrer, puis redémarrez la VM en cliquant sur  Démarrer/Reprendre.

Utiliser un compte de service

L'authentification fait référence au processus permettant de déterminer l'identité d'un client. Pour l'authentification, nous vous recommandons d'utiliser un compte de service, un type de compte spécial généralement utilisé par une application ou une charge de travail, plutôt que par une personne. Pour en savoir plus, consultez la section Présentation des comptes de service.

Vous pouvez utiliser des comptes de service pour l'authentification, peu importe où le code s'exécute (sur Compute Engine, sur App Engine ou sur site). Pour en savoir plus, consultez la page Authentification chez Google.

Cette section explique comment créer un compte de service et lui attribuer les rôles nécessaires, et comment mettre à jour un compte de service existant s'il ne dispose pas des rôles nécessaires.

Créer un compte de service

Pour créer un compte de service, exécutez les procédures décrites à la section Créer un compte de service avec les informations suivantes :

  • Sélectionnez le projet Google Cloud dans lequel vous souhaitez créer le compte de service.

    • Pour les instances Compute Engine, sélectionnez le projet dans lequel vous avez créé l'instance.

    • Pour les instances Amazon EC2, sélectionnez le projet hôte AWS.

  • Dans le menu déroulant Rôle, sélectionnez les rôles suivants :

    • Logging > Logs Writer (Logging > Rédacteur de journaux). Cela permet à l'agent Logging d'ingérer des journaux.
    • Monitoring > Monitoring Metric Writer (Monitoring > Rédacteur de métriques de surveillance). Cela permet à l'agent Logging d'ingérer ses propres métriques d'état.
  • Si vous envisagez de vous authentifier à l'aide d'une clé de compte de service, sélectionnez JSON comme type de clé et cliquez sur Créer.

    Lorsque vous cliquez sur Créer, un fichier contenant une clé de compte de service est téléchargé sur votre système local. Pour plus d'informations, consultez la page Créer et supprimer des clés de compte de service.

Ensuite, configurez votre compte de service et vos paramètres selon que vous autorisez avec des comptes de service associés ou avec des clés privées.

Vérifier et modifier les rôles d'un compte de service existant

Vous pouvez utiliser la console Google Cloud pour déterminer les rôles dont dispose un compte de service existant et ajouter les rôles nécessaires manquants :

  1. Dans la console Google Cloud, accédez à la page IAM :

    Accéder à IAM

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est IAM et administration.

  2. Si nécessaire, cliquez sur la liste déroulante des projets Google Cloud et sélectionnez le nom de votre projet.

  3. Si vous ne voyez pas la liste des comptes principaux IAM (utilisateurs et comptes de service), sélectionnez l'onglet Autorisations.

  4. Dans la liste Afficher par Comptes principaux, localisez l'entrée du compte de service. La colonne Rôle répertorie les rôles attribués au compte de service.

  5. Si votre compte de service ne dispose pas des rôles nécessaires pour l'agent Logging, procédez comme suit pour ajouter les rôles décrits dans la section Créer un compte de service :

    1. Cliquez sur  Modifier dans l'entrée du compte de service.
    2. Cliquez sur Ajouter un autre rôle pour ajouter les rôles manquants.
    3. Cliquez sur Enregistrer.

Autoriser avec un compte de service associé

Pour autoriser l'agent Logging installé sur une instance de VM Compute Engine associée à un compte de service, procédez comme suit :

  1. Assurez-vous d'avoir validé les niveaux d'accès de votre VM.

  2. Attribuez à votre compte de service les rôles IAM offrant le niveau d'accès le plus faible possible. Pour connaître les rôles requis, consultez la section Créer un compte de service sur cette page.

  3. Associez le compte de service à la VM sur laquelle l'agent s'exécute.

  4. Si vous n'avez pas encore installé l'agent, installez-le. Pour en savoir plus sur l'installation de l'agent, consultez la page Installer l'agent.

Autoriser avec une clé de compte de service

Pour autoriser l'agent Logging installé sur une instance de VM à l'aide de clés privées de compte de service, procédez comme suit :

  1. Transférez le fichier de clé de compte de service de votre système local vers votre instance de VM :

    1. Créez une variable d'environnement pour qu'elle pointe vers le fichier de clé du compte de service sur votre système local. L'exemple suivant crée une variable appelée CREDS :

      CREDS=~/Downloads/PROJECT-NAME-KEY-ID.json
      
    2. Suivez les étapes indiquées dans le tableau suivant :

      Compute Engine

      1. Dans la console Google Cloud, accédez à la page Instances de VM :

        Accéder à la page Instances de VM

        Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Compute Engine.

        Identifiez les valeurs INSTANCE_NAME et INSTANCE_ZONE de votre VM.

      2. Sur votre système local, exécutez une commande Google Cloud CLI pour copier le fichier de clé de votre système local sur votre instance de VM :

        REMOTE_USER="$USER"
        INSTANCE="INSTANCE_NAME"
        ZONE="INSTANCE_ZONE"
        gcloud compute scp "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json" --zone "$ZONE"
        
      3. Sur votre instance Compute Engine, déplacez le fichier de clé du compte de service de l'emplacement temporaire vers un emplacement permanent. Pour Linux, assurez-vous que le fichier de clé du compte de service n'est lisible que par root.

        Voici les emplacements où l'agent attend votre fichier de clé :

        • VM Linux : /etc/google/auth/application_default_credentials.json
        • VM Windows : C:\ProgramData\Google\Auth\application_default_credentials.json
        • VM Linux et Windows : n'importe quel emplacement stocké dans la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS, qui doit être visible par le processus de l'agent. Pour obtenir des informations sur la configuration, consultez la page Définir GOOGLE_APPLICATION_CREDENTIALS.

        Par exemple, sous Linux, vous pouvez exécuter le script suivant pour déplacer le fichier de clé du compte de service vers l'emplacement par défaut, puis définir les autorisations appropriées :

        CREDENTIALS_FILE_LOCATION="/etc/google/auth/application_default_credentials.json"
        sudo mkdir -p /etc/google/auth
        sudo mv "$HOME/temp.json" "$CREDENTIALS_FILE_LOCATION"
        sudo chown root:root "$CREDENTIALS_FILE_LOCATION"
        sudo chmod 0400 "$CREDENTIALS_FILE_LOCATION"
        

      Amazon EC2

      1. Pour votre VM, identifiez YOUR-INSTANCE'S-ID et YOUR-INSTANCE'S-AWS-REGION.

      2. Sur votre système local, utilisez scp pour copier le fichier de clé du compte de service de votre système local vers votre instance de VM :

        KEY="YOUR-SSH-KEY-PAIR-FILE"
        INSTANCE="ec2-YOUR-INSTANCE'S-ID.YOUR-INSTANCE'S-AWS-REGION.compute.amazonaws.com"
        # The remote user depends on the installed OS: ec2-user, ubuntu, root, etc.
        REMOTE_USER="EC2-USER"
        scp -i "$KEY" "$CREDS" "$REMOTE_USER@$INSTANCE:~/temp.json"
        

        La valeur de la variable d'environnement INSTANCE suppose que votre instance EC2 ne se trouve pas dans la région us-east-1. Pour savoir comment définir la variable INSTANCE lorsque votre instance se trouve dans la région us-east-1, consultez la convention d'attribution de noms définie par Amazon.

      3. Sur votre instance EC2, déplacez le fichier de clé de compte de service de l'emplacement temporaire vers l'un des emplacements suivants. Pour Linux, assurez-vous que le fichier de clé de compte de service n'est lisible que par root.

        Voici les emplacements où l'agent attend votre fichier de clé :

        • VM Linux : /etc/google/auth/application_default_credentials.json

        • VM Windows : C:\ProgramData\Google\Auth\application_default_credentials.json

        • VM Linux et Windows : n'importe quel emplacement stocké dans la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS, qui doit être visible par le processus de l'agent. Pour obtenir des informations sur la configuration, consultez la page Définir GOOGLE_APPLICATION_CREDENTIALS.

        Par exemple, sous Linux, vous pouvez exécuter le script suivant pour déplacer le fichier de clé du compte de service vers l'emplacement par défaut, puis définir les autorisations appropriées :

        CREDENTIALS_FILE_LOCATION="/etc/google/auth/application_default_credentials.json"
        sudo mkdir -p /etc/google/auth
        sudo mv "$HOME/temp.json" "$CREDENTIALS_FILE_LOCATION"
        sudo chown root:root "$CREDENTIALS_FILE_LOCATION"
        sudo chmod 0400 "$CREDENTIALS_FILE_LOCATION"
        

  2. L'instance de VM contient désormais le fichier de clé de compte de service dont l'agent a besoin. Ensuite, installez ou redémarrez l'agent :

Définir GOOGLE_APPLICATION_CREDENTIALS

Cette section explique comment définir la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS afin qu'elle soit visible par le processus de l'agent.

Linux

  1. Modifiez le fichier de configuration suivant ou créez-le s'il n'existe pas :

    /etc/default/google-fluentd
    
  2. Ajoutez ce qui suit au fichier de configuration :

    GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIAL_FILE
    
  3. Redémarrez l'agent en exécutant la commande suivante sur votre instance de VM.

    sudo service google-fluentd restart
    

Windows

  1. Dans PowerShell, exécutez les commandes suivantes en tant qu'administrateur pour définir la variable d'environnement système GOOGLE_APPLICATION_CREDENTIALS que l'agent Ops doit utiliser :

    [Environment]::SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "PATH_TO_CREDENTIAL_FILE", "Machine")
    
  2. Redémarrez l'agent en exécutant la commande suivante sur votre instance de VM.

    Restart-Service -Name StackdriverLogging