Identité des fonctions

Compte de service d'exécution

Lors de l'exécution d'une fonction, Cloud Functions utilise le compte de service PROJECT_ID@appspot.gserviceaccount.com comme identité. Par exemple, lors de l'envoi de requêtes aux services Google Cloud Platform à l'aide des bibliothèques clientes Google Cloud, Cloud Functions peut automatiquement obtenir et appliquer des jetons d'accès aux services que cette identité est autorisée à utiliser.

Modifier les autorisations par défaut

Par défaut, le compte de service d'exécution possède le rôle d'éditeur, qui lui permet d'accéder à de nombreux services GCP. Bien qu'il s'agisse du moyen le plus rapide de développer des fonctions, ce rôle est probablement trop permissif pour les besoins de votre fonction en production. Il est donc préférable de configurer l'accès selon le principe du moindre privilège.

Console

  1. Accédez à Google Cloud Console :

    Accéder à Google Cloud Console

  2. Sélectionnez le compte de service App Engine par défaut (PROJECT_ID@appspot.gserviceaccount.com) dans la table.

  3. Cliquez sur le crayon à droite de la ligne pour afficher l'onglet Modifier les autorisations.

  4. Ajoutez ou supprimez des rôles dans la liste déroulante disponible pour définir l'accès selon le principe du moindre privilège.

  5. Cliquez sur Enregistrer.

gcloud

Supprimez le rôle d'éditeur, puis exécutez la commande gcloud projects add-iam-policy-binding pour ajouter un rôle :

# Remove the Editor role
gcloud projects remove-iam-policy-binding PROJECT_ID \
  --member="PROJECT_ID@appspot.gserviceaccount.com"
  --role="roles/editor"

# Add the desired role
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="PROJECT_ID@appspot.gserviceaccount.com"
  --role="ROLE"

PROJECT_ID est l'ID du projet que vous utilisez et ROLE est le nouveau rôle à attribuer au compte de service d'exécution.

Identité par fonction

Si vous disposez de plusieurs fonctions accédant à différentes ressources, il convient de donner sa propre identité à chaque fonction. Pour ce faire, déployez la fonction avec un compte de service nommé qui détient le rôle approprié. Le compte de service déployé doit avoir été créé dans le même projet que la fonction à laquelle il est rattaché.

Autorisations requises pour utiliser des identités autres que celles par défaut

Pour déployer une fonction avec un compte de service non défini par défaut, le déployeur doit disposer de l'autorisation iam.serviceAccounts.actAs sur le compte de service déployé.

Si un utilisateur crée un compte de service, cette autorisation lui est automatiquement accordée. Dans le cas contraire, un utilisateur disposant des autorisations appropriées doit accorder cette autorisation au déployeur sur le compte de service pour que celui-ci puisse le déployer.

Déployer une fonction avec une identité autre que celle par défaut

Avant de déployer une fonction avec une nouvelle identité, vérifiez que le compte de service que vous souhaitez utiliser est déjà créé. S'il ne l'est pas, apprenez comment créer et gérer des comptes de service.

Console

  1. Accédez à Google Cloud Console :

    Accéder à Google Cloud Console

  2. Configurez la fonction selon vos besoins.

  3. Cliquez sur Variables d'environnement, mise en réseau, délais avant expiration, etc. pour afficher d'autres paramètres.

  4. Cliquez sur le menu déroulant Compte de service, puis sélectionnez le compte de service souhaité.

  5. Cliquez sur Créer.

gcloud

Lorsque vous déployez une fonction à l'aide de gcloud functions deploy, ajoutez l'option --service-account. Exemple :

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

FUNCTION_NAME correspond au nom de votre fonction et SERVICE_ACCOUNT_EMAIL au compte de service associé à la nouvelle identité.

Mettre à jour l'identité d'une fonction existante

Vous pouvez également mettre à jour les fonctions existantes pour disposer d'un nouveau compte de service d'exécution.

Console

  1. Accédez à Google Cloud Console :

    Accéder à Google Cloud Console

  2. Cliquez sur le nom de la fonction souhaitée pour accéder à sa page d'informations.

  3. Cliquez sur le crayon MODIFIER situé en haut de la page d'informations pour modifier la fonction.

  4. Cliquez sur Variables d'environnement, mise en réseau, délais avant expiration, etc. pour afficher d'autres paramètres.

  5. Cliquez sur le menu déroulant Compte de service, puis sélectionnez le compte de service souhaité.

  6. Cliquez sur Déployer.

gcloud

Lorsque vous déployez une fonction à l'aide de gcloud functions deploy, ajoutez l'option --service-account :

gcloud functions deploy FUNCTION_NAME --service-account SERVICE_ACCOUNT_EMAIL

FUNCTION_NAME correspond au nom de votre fonction et SERVICE_ACCOUNT_EMAIL au compte de service associé à la nouvelle identité.

Extraire des jetons d'identité et d'accès

Vous pouvez utiliser le serveur Compute Metadata pour récupérer des jetons d'identité et des jetons d'accès. Vous ne pouvez pas interroger le serveur de métadonnées directement à partir de votre ordinateur local.

Jetons d'identité

Vous utilisez des jetons d'identité lorsque vous appelez d'autres fonctions Cloud ou tout autre service pouvant valider un jeton d'identité.

Le serveur Compute Metadata permet de récupérer des jetons d’identité pour une audience spécifique de la façon suivante :

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE" \
  -H "Metadata-Flavor: Google"

AUDIENCE correspond à l'audience JWT demandée, par exemple, l'URL d'un service que vous appelez, telle que https://service.domain.com, ou à l'ID client OAuth d'une ressource IAP protégée, comme 1234567890.apps.googleusercontent.com.

Jetons d'accès

Vous utilisez des jetons d'accès lorsque vous appelez les API Google.

Le champ d'application des jetons d'accès est cloud-platform par défaut, ce qui permet d'accéder à toutes les API Google Cloud Platform, sous réserve de disposer également des autorisations d'accès IAM. Pour accéder à d'autres API Google ou Google Cloud, vous devez récupérer un jeton d'accès avec un champ d'application approprié.

Vous pouvez utiliser le serveur Compute Metadata pour récupérer des jetons d'accès.

Si vous avez besoin d'un jeton d'accès avec un champ d'application spécifique, vous pouvez le générer de la façon suivante :

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token?scopes=SCOPES" \
  -H "Metadata-Flavor: Google"

SCOPES correspond à une liste de champs d'application OAuth séparés par une virgule, par exemple, https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/spreadsheets.

Consultez la liste complète des champs d'application Google OAuth pour trouver ceux dont vous avez besoin.

Étapes suivantes

Apprenez à gérer l'accès à vos fonctions ou à authentifier en toute sécurité les développeurs, les fonctions et les utilisateurs finaux auprès de vos fonctions.