Ce guide explique comment configurer l'authentification et l'autorisation pour des applications de production serveur à serveur. L'authentification fait référence au processus permettant de déterminer l'identité d'un client. L'autorisation fait référence au processus permettant de déterminer les autorisations dont dispose un client authentifié sur une ressource spécifique. Autrement dit, l'authentification identifie votre identité et l'autorisation détermine ce que vous pouvez faire. Pour plus d'informations sur les méthodes d'authentification compatibles et comment les sélectionner, consultez la page Présentation de l'authentification.
Google utilise des identifiants pour identifier votre application en ce qui concerne les quotas et la facturation. Vos identifiants sont également utilisés pour autoriser l'accès aux API, aux ressources et aux fonctionnalités de GCP.
Fournir des identifiants à votre application
Rechercher automatiquement des identifiants
Pour trouver les identifiants de votre application, les bibliothèques clientes GCP utilisent la stratégie des identifiants par défaut de l'application (ADC). Lorsque votre code utilise une bibliothèque cliente, la stratégie vérifie vos identifiants dans l'ordre suivant :
D'abord, l'ADC vérifie si la variable d'environnement
GOOGLE_APPLICATION_CREDENTIALS
est définie. Si elle est définie, l'ADC utilise le fichier de compte de service vers lequel la variable renvoie. La section suivante explique comment définir la variable d'environnement.Si la variable d'environnement n'est pas définie, l'ADC utilise le compte de service par défaut fourni par Compute Engine, Kubernetes Engine, App Engine et Cloud Functions pour les applications qui s'exécutent sur ces services.
Si l'ADC ne peut utiliser aucune des informations d'identification ci-dessus, une erreur se produit.
L'exemple de code suivant illustre cette stratégie. Il n'indique pas explicitement les identifiants de l'application. Cependant, l'ADC est capable de trouver implicitement les identifiants tant que la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS
est définie, ou tant que l'application s'exécute sur Compute Engine, Kubernetes Engine, App Engine ou Cloud Functions.
Vous devez installer la bibliothèque cliente Cloud Storage pour exécuter l'exemple suivant.
C#
Go
Java
Node.js
PHP
Python
Ruby
Cette stratégie est utile lors des tests et des expérimentations, mais peut vous empêcher de déterminer les identifiants utilisés par votre application. Nous vous recommandons de spécifier explicitement les identifiants que l'application doit utiliser, comme décrit dans la section suivante.
Obtenir et fournir les identifiants du compte de service manuellement
Si vous développez du code localement et que vous déployez votre application sur site ou dans un autre cloud public, vous pouvez créer et obtenir manuellement les identifiants du compte de service.
Créer un compte de service
Les étapes ci-dessous indiquent comment créer un compte de service. Toutefois, au lieu de définir des autorisations au niveau du propriétaire, vous devez restreindre l'accès aux autorisations, comme indiqué dans la section Restreindre l'accès ci-dessous.
Console GCP
-
Dans la console GCP, accédez à la page Créer une clé de compte de service.
Accéder à la page "Créer une clé de compte de service" - Dans la liste Compte de service, sélectionnez Nouveau compte de service.
- Dans le champ Nom du compte de service, saisissez un nom.
Dans la liste Rôle, sélectionnez Projet > Propriétaire.
Remarque : Le champ Rôle autorise votre compte de service à accéder aux ressources. Vous pouvez afficher et modifier ce champ ultérieurement à l'aide de la console GCP. Si vous développez une application de production, spécifiez des autorisations plus précises que Projet > Propriétaire. Pour plus d'informations, consultez la page Attribuer des rôles aux comptes de service.- Cliquez sur Créer. Un fichier JSON contenant votre clé est téléchargé sur votre ordinateur.
Ligne de commande
Vous pouvez exécuter les commandes suivantes à l'aide du SDK Cloud sur votre ordinateur local, ou dans Cloud Shell.
-
Créez le compte de service. Remplacez [NAME] par le nom que vous souhaitez donner au compte de service.
gcloud iam service-accounts create [NAME]
-
Accordez des autorisations au compte de service. Remplacez [PROJECT_ID] par votre ID de projet.
gcloud projects add-iam-policy-binding [PROJECT_ID] --member "serviceAccount:[NAME]@[PROJECT_ID].iam.gserviceaccount.com" --role "roles/owner"
Remarque : Le champ Rôle autorise votre compte de service à accéder aux ressources. Vous pouvez afficher et modifier le champ ultérieurement à l'aide de la console GCP. Si vous développez une application de production, spécifiez des autorisations plus précises que Projet > Propriétaire. Pour plus d'informations, consultez la page Attribuer des rôles aux comptes de service. -
Générez le fichier de clé. Remplacez [FILE_NAME] par le nom du fichier de clé.
gcloud iam service-accounts keys create [FILE_NAME].json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
Fournir les identifiants du compte de service
Après avoir créé un compte de service, vous avez deux choix pour fournir les identifiants à votre application. Vous pouvez soit définir la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS de manière explicite, soit indiquer le chemin d'accès à la clé du compte de service dans le code.
Définir la variable d'environnement
Fournissez des identifiants d'authentification au code de votre application en définissant la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS. Remplacez [PATH] par le chemin du fichier JSON contenant la clé de votre compte de service et [FILE_NAME] par le nom du fichier. Cette variable ne s'applique qu'à la session de shell actuelle. Par conséquent, si vous ouvrez une nouvelle session, vous devez de nouveau la définir.
Linux ou macOS
export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
Exemple :
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/[FILE_NAME].json"
Windows
Avec PowerShell :
$env:GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
Exemple :
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\[FILE_NAME].json"
Avec l'invite de commande :
set GOOGLE_APPLICATION_CREDENTIALS=[PATH]
Une fois que vous avez terminé les étapes ci-dessus, l'ADC est en mesure de déterminer implicitement vos identifiants, comme décrit dans la section Fournir des identifiants à votre application ci-dessus. Nous recommandons cette approche, car elle nécessite moins de code. En outre, l'utilisation de la variable d'environnement augmente la portabilité de votre code, car vous pouvez exécuter le même code dans plusieurs environnements avec des comptes de service différents.
Indiquer le chemin d'accès à la clé du compte de service dans le code
Vous pouvez choisir de renvoyer explicitement vers votre fichier de compte de service dans le code, comme illustré dans l'exemple de code suivant.
Vous devez installer la bibliothèque cliente Cloud Storage pour exécuter l'exemple suivant.
C#
Go
Java
Node.js
PHP
Python
Ruby
Obtenir les identifiants dans Compute Engine, Kubernetes Engine, l'environnement flexible App Engine et Cloud Functions
Si votre application s'exécute dans Compute Engine, Kubernetes Engine, l'environnement flexible App Engine ou Cloud Functions, vous n'avez pas besoin de créer votre propre compte de service. Compute Engine inclut un compte de service par défaut créé automatiquement pour vous. Vous pouvez également attribuer un compte de service différent, par instance, si nécessaire. Lorsque vous créez une instance, celle-ci est automatiquement activée pour s'exécuter en tant que compte de service par défaut et dispose d'un ensemble d'autorisations par défaut. Pour plus d'informations, consultez la section Compte de service Compute Engine par défaut.
Une fois que vous avez configuré un compte de service, l'ADC peut trouver implicitement vos identifiants sans qu'il soit nécessaire de modifier votre code, comme décrit dans la section ci-dessus. Si vous souhaitez utiliser spécifiquement les identifiants Compute Engine, vous pouvez le faire explicitement, comme illustré dans l'exemple de code suivant.
Vous devez installer la bibliothèque cliente Cloud Storage pour exécuter l'exemple suivant.
C#
Go
Java
Node.js
PHP
Python
Ruby
Obtenir des identifiants sur l'environnement standard App Engine
Si votre application s'exécute dans l'environnement standard App Engine, vous pouvez utiliser l'API App Engine App Identity pour obtenir des identifiants.
Une fois que vous avez configuré un compte de service, l'ADC peut trouver implicitement vos identifiants sans qu'il soit nécessaire de modifier votre code, comme décrit dans la section ci-dessus. Si vous souhaitez utiliser spécifiquement les identifiants de App Engine, vous pouvez le faire de manière explicite, comme illustré dans l'exemple de code suivant.
Vous devez installer la bibliothèque cliente Cloud Storage pour exécuter l'exemple suivant.
PHP
Go
Java
Python
Restreindre l'accès
Accordez uniquement à votre application les autorisations dont elle a besoin pour interagir avec les API, fonctionnalités ou ressources GCP applicables. GCP utilise Cloud IAM (Cloud Identity & Access Management) pour le contrôle d'accès. Lorsque vous créez un compte de service, vous pouvez choisir un rôle Cloud IAM pour restreindre l'accès. La procédure détaillée sur la page Premiers pas avec l'authentification vous indique de choisir le rôle Owner
lorsque vous créez un compte de service, mais vous pouvez modifier ce paramètre à tout moment. Pour plus d'informations, consultez la section Attribuer des rôles aux comptes de service.
Bonnes pratiques de gestion des identifiants
Les identifiants permettent d'accéder aux données sensibles. Les pratiques suivantes aident à protéger l'accès à ces ressources.
N'intégrez pas les informations secrètes liées à l'authentification dans le code source, tels que les clés API, les jetons OAuth et les identifiants du compte de service. Vous pouvez utiliser une variable d'environnement renvoyant vers des identifiants en dehors du code source de l'application, comme Cloud Key Management Service.
Utilisez différents identifiants dans différents contextes, tels que les environnements de test et de production.
Ne transférez vos identifiants que via HTTPS pour empêcher un tiers de les intercepter. Ne les transférez jamais en texte clair ou dans l'URL.
N'intégrez jamais d'identifiants longue durée dans votre application côté client. Par exemple, n'intégrez pas les identifiants du compte de service dans une application mobile. Les applications côté client peuvent être analysées et les identifiants pourraient facilement être découverts et utilisés par un tiers.
Révoquez un jeton si vous n'en avez plus besoin.
Dépanner les erreurs d'API
Pour en savoir plus sur le dépannage des requêtes d'API ayant échoué, consultez la section Erreurs.
Étapes suivantes
Apprenez-en davantage dans la section Premiers pas avec l'authentification.
Découvrez-en plus sur la configuration de l'authentification en tant qu'utilisateur final.
Découvrez comment utiliser les clés API.