Configurez VPC Service Controls

VPC Service Controls est une fonctionnalité de Google Cloud qui vous permet de configurer un périmètre sécurisé pour vous protéger contre l'exfiltration de données. Ce guide vous explique comment utiliser VPC Service Controls avec Cloud Functions pour renforcer la sécurité de vos fonctions.

Pour en savoir plus sur les limites de cette intégration, consultez la documentation de VPC Service Controls.

Configuration au niveau de l'organisation

Pour utiliser VPC Service Controls avec Cloud Functions, vous pouvez configurer un périmètre de service au niveau de l'organisation. En configurant des règles d'administration appropriées, vous pouvez vous assurer que les vérifications VPC Service Controls s'appliquent lors de l'utilisation de Cloud Functions et que les développeurs peuvent uniquement déployer des services conformes aux règles de VPC Service Controls. En savoir plus sur l'héritage et les cas de non-respect lors de la définition d'une règle d'administration.

Configurer un périmètre VPC Service Controls

Pour configurer un périmètre de service, vous avez besoin des rôles Lecteur d'organisation (roles/resourcemanager.organizationViewer) et Éditeur Access Context Manager (roles/accesscontextmanager.policyEditor).

Suivez le Guide de démarrage rapide de VPC Service Controls pour effectuer les actions suivantes :

  1. Créer un périmètre de service

  2. Ajouter un ou plusieurs projets au périmètre

  3. Restreignez l'API Cloud Functions (1re génération) ou l'API Cloud Functions et l'API Cloud Run Admin (2e génération).

Une fois le périmètre de service configuré, tous les appels à l'API restreinte sont vérifiés pour s'assurer qu'ils proviennent du même périmètre.

Facultatif : Activer l'accès au périmètre pour les ordinateurs de développement

Comme les vérifications de VPC Service Controls s'appliquent pour l'API, les appels Cloud Functions vers celle-ci échouent, sauf s'ils proviennent du périmètre de service. Ainsi, pour gérer les fonctions avec l'API Cloud Functions, l'interface utilisateur de Cloud Functions dans la console Google Cloud ou Google Cloud CLI, choisissez l'une des options suivantes :

  • Utilisez une machine dans le périmètre de VPC Service Controls. Par exemple, vous pouvez utiliser une VM Compute Engine ou une machine sur site connectée à votre réseau VPC à l'aide d'un VPN.

  • Autorisez les développeurs de la fonction à accéder au périmètre. Par exemple, vous pouvez créer des niveaux d'accès qui permettent d'accéder au périmètre en fonction de l'adresse IP ou de l'identité de l'utilisateur. Pour plus d'informations, consultez la page Autoriser l'accès aux ressources protégées depuis l'extérieur d'un périmètre.

Configurer des règles d'administration

Pour gérer les règles d'administration, vous avez besoin du rôle Administrateur des règles d'administration (roles/orgpolicy.policyAdmin).

Pour respecter les règles de VPC Service Controls et vous protéger contre l'exfiltration des données, définissez les règles d'administration ci-dessous. Elles contrôlent les paramètres réseau autorisables pour Cloud Functions dans le périmètre de service.

Limiter les paramètres d'entrée autorisés

La règle d'administration cloudfunctions.allowedIngressSettings contrôle les paramètres d'entrée que les développeurs sont autorisés à utiliser pour Cloud Functions. Définissez cette règle d'administration pour que les développeurs n'utilisent que la valeur ALLOW_INTERNAL_ONLY :

Console

  1. Accédez à la page des règles Paramètres d'entrée autorisés dans la console Google Cloud :

    Accéder à la règle d'administration

  2. Cliquez sur Gérer la règle.

  3. Sur la page Modifier la règle, sélectionnez Personnaliser.

  4. Sous Application des règles, sélectionnez Remplacer.

  5. Sous Valeurs de règles, sélectionnez Personnalisé.

  6. Sous Type de règle, sélectionnez Autoriser.

  7. Sous Valeurs personnalisées, saisissez ALLOW_INTERNAL_ONLY.

  8. Cliquez sur Définir la règle.

gcloud

Exécutez la commande gcloud resource-manager org-policies allow :

gcloud resource-manager org-policies allow \
  cloudfunctions.allowedIngressSettings ALLOW_INTERNAL_ONLY \
  --organization ORGANIZATION_ID

ORGANIZATION_ID est l'ID de votre organisation.

Une fois cette règle d'administration en place, toutes les fonctions doivent utiliser la valeur ALLOW_INTERNAL_ONLY pour leurs paramètres d'entrée. Ainsi, les fonctions HTTP ne peuvent accepter que le trafic provenant d'un réseau VPC situé dans le périmètre du service. Les déploiements de fonctions qui spécifient une valeur différente échoueront.

Exiger un connecteur VPC

La règle d'administration cloudfunctions.requireVPCConnector détermine si un connecteur d'accès au VPC sans serveur est requis pour les fonctions. Définissez cette règle d'administration pour appliquer cette contrainte :

Console

  1. Accédez à la page de la règle Exiger un connecteur VPC dans la console Google Cloud :

    Accéder à la règle d'administration

  2. Cliquez sur Gérer la règle.

  3. Sur la page Modifier la règle, sélectionnez Personnaliser.

  4. Sous Application, sélectionnez Activé.

  5. Cliquez sur Définir la règle.

gcloud

Exécutez la commande gcloud resource-manager org-policies enable-enforce :

gcloud resource-manager org-policies enable-enforce \
  cloudfunctions.requireVPCConnector \
  --organization ORGANIZATION_ID

ORGANIZATION_ID est l'ID de votre organisation.

Une fois cette règle d'administration en place, toutes les fonctions doivent utiliser un connecteur d'accès au VPC sans serveur. Les déploiements de fonctions qui ne spécifient pas de connecteur échouent.

Limiter les paramètres de sortie autorisés du connecteur VPC

La règle d'administration cloudfunctions.allowedVpcConnectorEgressSettings contrôle les paramètres de sortie que les développeurs sont autorisés à utiliser pour Cloud Functions. Définissez cette règle d'administration pour n'autoriser que la valeur ALL_TRAFFIC :

Console

  1. Accédez à la page de la règle Paramètres de sortie autorisés du connecteur VPC dans la console Google Cloud :

    Accéder à la règle d'administration

  2. Cliquez sur Gérer la règle.

  3. Sur la page Modifier la règle, sélectionnez Personnaliser.

  4. Sous Application des règles, sélectionnez Remplacer.

  5. Sous Valeurs de règles, sélectionnez Personnalisé.

  6. Sous Type de règle, sélectionnez Autoriser.

  7. Sous Valeurs personnalisées, saisissez ALL_TRAFFIC.

  8. Cliquez sur Définir la règle.

gcloud

Exécutez la commande gcloud resource-manager org-policies allow :

gcloud resource-manager org-policies allow \
  cloudfunctions.allowedVpcConnectorEgressSettings ALL_TRAFFIC \
  --organization ORGANIZATION_ID

ORGANIZATION_ID est l'ID de votre organisation.

Une fois cette règle d'organisation en place, toutes les fonctions doivent utiliser la valeur ALL_TRAFFIC pour leurs paramètres de sortie. Cela signifie que les fonctions doivent acheminer l'ensemble du trafic sortant via votre réseau VPC. Les déploiements de fonctions qui spécifient une valeur différente échoueront.

Combiné à la règle d'administration cloudfunctions.requireVPCConnector, il force tout le trafic de sortie à traverser le réseau VPC où il est soumis aux règles de routage et de pare-feu configurées.

Configuration au niveau du projet

Pour les projets individuels au sein du périmètre de service, vous devez effectuer une configuration supplémentaire pour pouvoir utiliser VPC Service Controls.

Configurer les réseaux VPC

Pour accéder aux API et aux services de Google tout en limitant les risques d'exfiltration de données, les requêtes doivent être envoyées à la plage d'adresses IP virtuelles (VIP) restreintes, 199.36.153.4/30 (restricted.googleapis.com).

Pour chaque réseau VPC d'un projet, procédez comme suit pour bloquer le trafic sortant, à l'exception du trafic à destination de la plage VIP restreinte :

  1. Configurez des règles de pare-feu pour empêcher les données de quitter le réseau VPC :

    • Créez une règle de refus de sortie, qui bloque tout le trafic sortant.

    • Créez une règle de sortie autorisée qui permet l'acheminement du trafic vers 199.36.153.4/30 sur le port TCP 443. Vérifiez qu'elle est prioritaire sur la règle de refus de sortie que vous venez de créer. De cette façon, les sorties vers la plage VIP restreinte sont les seules autorisées.

  2. Configurez les paramètres DNS pour que l'adresse *.googleapis.com soit résolue en restricted.googleapis.com.

  3. Configurez les paramètres DNS avec un mappage d'enregistrement A *.cloudfunctions.net vers la plage d'adresses IP 199.36.153.4/30. Pour ce faire, utilisez Cloud DNS :

    gcloud dns managed-zones create ZONE_NAME \
    --visibility=private \
    --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_NAME/global/networks/VPC_NAME \
    --description=none \
    --dns-name=cloudfunctions.net
    
    gcloud dns record-sets transaction start --zone=ZONE_NAME
    
    gcloud dns record-sets transaction add --name=*.cloudfunctions.net. \
    --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
    --zone=ZONE_NAME \
    --ttl=300
    
    gcloud dns record-sets transaction execute --zone=ZONE_NAME
    
  4. Activez l'accès privé à Google pour le sous-réseau de votre connecteur VPC.

À ce stade, les requêtes provenant du réseau VPC :

  • ne peuvent pas quitter le réseau VPC, ce qui empêche la sortie en dehors du périmètre de service ;
  • ne peuvent atteindre que les API et les services de Google qui contrôlent VPC Service Controls, empêchant ainsi les risques d'exfiltration via les API Google.

Accorder au compte de service Cloud Build l'accès au périmètre de VPC Service Controls

Cloud Functions crée votre code source dans un conteneur exécutable à l'aide de Cloud Build. Pour utiliser Cloud Functions avec VPC Service Controls, vous devez configurer votre compte de service Cloud Build (par défaut ou personnalisé) pour accéder à votre périmètre de service.

Rechercher le nom du compte de service

Si vous utilisez le compte de service Cloud Build par défaut, vous pouvez trouver son nom comme suit :

  1. Utilisez la page IAM de la console Google Cloud pour identifier le compte de service Cloud Build.

    Ouvrir la page AM

  2. Assurez-vous que le projet approprié figure dans la liste déroulante des projets.

  3. Recherchez cloudbuild.gserviceaccount.com. Le nom du compte de service correspond à une adresse e-mail au format PROJECT_NUMBER@cloudbuild.gserviceaccount.com.

Si vous disposez d'un compte de service Cloud Build personnalisé, utilisez plutôt ce nom.

Accorder au compte de service l'accès au périmètre de service

Une fois que vous disposez du nom du compte de service, suivez les instructions de la section Limiter l'accès par utilisateur ou compte de service pour créer un niveau d'accès pour le compte de service. Suivez ensuite les instructions de la section Ajouter un niveau d'accès à un périmètre existant pour ajouter le niveau d'accès à votre périmètre de service.

Déployer des fonctions conformes aux règles de VPC Service Controls

Une fois VPC Service Controls configuré pour Cloud Functions, vous devez vérifier que toutes les fonctions déployées dans le périmètre de service respectent les règles d'administration spécifiées. Cela signifie que :

  • Toutes les fonctions doivent utiliser un connecteur d'accès au VPC sans serveur. Pour plus d'informations, consultez la page Se connecter à un réseau VPC.
  • Toutes les fonctions doivent autoriser uniquement le trafic provenant de sources internes. Pour plus d'informations, consultez la section Paramètres d'entrée.
  • Toutes les fonctions doivent acheminer l'intégralité du trafic sortant vers le réseau VPC. Pour plus d'informations, consultez la section Paramètres de sortie.

Les déploiements de fonctions qui ne respectent pas ces critères échouent.

Effectuer l'audit des fonctions existantes pour assurer la conformité avec les règles de VPC Service Controls

Une fois VPC Service Controls configuré, la conformité des nouvelles fonctions créées dans les projets au sein du périmètre de service est automatiquement vérifiée. Toutefois, pour éviter toute interruption des charges de travail en cours, les fonctions existantes continuent d'être opérationnelles et peuvent ne pas être conformes aux règles d'administration.

Nous vous recommandons d'effectuer l'audit des fonctions existantes et de modifier ou de redéployer des fonctions, si nécessaire. Pour faciliter ce processus, vous pouvez créer un script qui répertorie vos fonctions et met en évidence celles qui ne spécifient pas les paramètres réseau appropriés à l'aide de l'API Cloud Functions.

Utiliser VPC Service Controls avec des fonctions situées en dehors d'un périmètre

Les sections ci-dessus s'appliquent au scénario dans lequel vous déployez Cloud Functions dans un périmètre de service VPC Service Controls.

Si vous devez déployer une fonction en dehors d'un périmètre de service, mais que la fonction nécessite l'accès à des ressources situées à l'intérieur du périmètre, utilisez la configuration suivante :

  1. Accorder au compte de service Cloud Build l'accès au périmètre de VPC Service Controls
  2. Accordez au compte de service d'exécution de la fonction l'accès au périmètre. Pour ce faire, vous pouvez utiliser au choix l'une des méthodes suivantes : créer un niveau d'accès et ajouter le niveau d'accès au périmètre de service, ou créer une règle d'entrée sur le périmètre.
  3. Connectez la fonction à un réseau VPC.
  4. Acheminez tout le trafic sortant de la fonction vers le réseau VPC. Pour plus d'informations, consultez la section Paramètres de sortie.

Une fois cette configuration terminée, la fonction peut atteindre les ressources protégées par le périmètre.