Autoriser l'accès aux ressources protégées depuis une adresse IP interne

Cette page explique comment autoriser le trafic provenant d'adresses IP internes dans un du réseau VPC aux périmètres de service à l'aide de règles d'entrée et de sortie.

Présentation

Vous pouvez utiliser VPC Service Controls pour spécifier des conditions afin d'autoriser des adresses IP spécifiques des plages d'adresses IP du réseau VPC entre les projets et les réseaux VPC. Cette fonctionnalité vous permet d'effectuer les actions suivantes : tâches:

  • Prendre en charge l'accès de base pour autoriser les plages d'adresses IP internes des réseaux VPC.

  • Autoriser l'utilisation de ces conditions de niveau d'accès pour l'API d'entrée ou de sortie à l'intérieur ou à l'extérieur des limites du périmètre de service.

Cette fonctionnalité offre les avantages suivants:

  • Vous pouvez spécifier des conditions dans les configurations VPC Service Controls pour autoriser à partir d'une adresse IP interne dans un réseau VPC.

  • Workflows nécessitant que des appels d'API passent par plusieurs périmètres de service pouvez limiter l'accès à quelques sous-réseaux seulement au lieu d'autoriser le l'ensemble du réseau VPC ou du projet.

  • Vous pouvez configurer différentes ressources sur site n'accède qu'à des ressources Google Cloud spécifiques. Vous devez utiliser l'adresse IP du sous-réseau plage d'adresses associée à ces ressources sur site et à la zone de destination le réseau VPC dans le cadre du niveau d'accès.

La figure 1 présente un exemple de configuration qui autorise l'accès à une adresse à partir d'une adresse IP interne autorisée.

Limites d'utilisation des adresses IP internes

Lorsque vous utilisez une adresse IP interne dans VPC Service Controls, les éléments suivants Des restrictions s'appliquent:

  • Vous ne pouvez activer une adresse IP interne qu'avec des niveaux d'accès de base, et non avec des niveaux d'accès personnalisés.

  • Nous vous recommandons de ne pas annuler les niveaux d'accès avec une adresse IP interne. car il peut provoquer des comportements inattendus.

  • Les limites concernant l'ajout de réseaux VPC à des périmètres de service s'appliquent également.

  • Lorsque VPC Service Controls consigne un journal d'audit des refus de règle, il masque le nom du réseau VPC en tant que __UNKNOWN__ dans le journal d'audit.

  • Réseaux VPC pour lesquels SUBNET_MODE est défini sur custom mais n'ont pas de sous-réseaux, elles ne sont pas prises en charge. Activer l'adresse IP interne nécessite qu'un réseau VPC contienne au moins un sous-réseau.

  • Vous ne pouvez spécifier que 500 VPC réseaux sociaux sur l'ensemble niveaux d'accès de votre stratégie d'accès.

  • Lorsque vous supprimez un réseau VPC référencé par une règle d'accès ou un périmètre de service, puis recréez un autre VPC réseau portant le même nom, VPC Service Controls n'active pas automatiquement des adresses IP internes sur le réseau VPC recréé. À pour contourner cette limitation, créez un réseau VPC et l'ajouter au périmètre.

  • Vous ne pouvez pas utiliser une adresse IP interne pour autoriser l'accès à partir d'adresses IP services. (Cloud SQL, par exemple).

  • Si vous utilisez un niveau d'accès dont les conditions sont basées sur des adresses IP internes à une règle de sortie, nous vous recommandons de ne pas ajouter d'autres conditions telles que le type d'appareil, l'identité de l'utilisateur ou le niveau d'accès.

  • L'adresse IP interne ne correspond pas aux niveaux d'accès faisant référence à des données géographiques dans différentes régions.

Utiliser une adresse IP interne dans les niveaux d'accès

  1. Spécifiez le nom du réseau VPC et la plage d'adresses IP dans le champ Champ vpcNetworkSources du niveau d'accès de base condition.

    • Nom du réseau VPC. Vous devez définir le VPC nom du réseau au format suivant:

      //compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK_NAME
      

      Par exemple, //compute.googleapis.com/projects/my-project/global/networks/my-vpc.

    • Plage d'adresses IP. Plage d'adresses IP spécifiée dans le fichier VpcSubNetwork champ de VpcNetworkSource doit respecter la spécification du sous-réseau IP du bloc CIDR. Vous pouvez utiliser n'importe quelle adresse IP plage qui est une plage IPv4 valide pour les sous-réseaux.

  2. Utilisez ce niveau d'accès avec des conditions d'autorisation dans le IngressSource ou EgressSource.

À l'aide d'un exemple de scénario, les sections suivantes expliquent comment effectuer ces pour activer une adresse IP interne.

Exemple d'utilisation d'une adresse IP interne pour configurer l'accès à un sous-réseau

Dans l'exemple suivant, vous avez deux projets:

  1. Projet hôte du réseau:Project1 héberge un réseau VPC: default Les deux VM dans Project1, VM1 et VM2, utilisent ce réseau comme via laquelle envoyer le trafic.

  2. Projet Cloud Storage:Project2 contient un bucket Cloud Storage.

Vous pouvez utiliser VPC Service Controls pour n'autoriser que VM1 de Project1 à accéder au Bucket Cloud Storage dans Project2 à l'aide d'une adresse IP interne. Pour réaliser cette configuration, procédez comme suit:

  1. Vous créez un périmètre de service sp1 autour de Project1 et d'un autre service. périmètre sp2 autour de Project2.

  2. Vous pouvez ensuite ajouter des règles d'entrée et de sortie aux périmètres de service n'autoriser que le sous-réseau de VM1 à accéder au bucket Cloud Storage.

Le schéma suivant illustre la configuration décrite dans cet exemple.

Configurer une règle d'accès au niveau de l'organisation

  1. Assurez-vous de disposer d'une stratégie d'accès au niveau de l'organisation. Si vous n'avez pas de stratégie d'accès à ce niveau, exécutez la commande suivante : Commande de gcloud CLI:

    gcloud access-context-manager policies create \
        --organization=ORGANIZATION_ID --title=POLICY_TITLE
    

    Remplacez les éléments suivants :

    • ORGANIZATION_ID: ID numérique de votre organisation.

    • POLICY_TITLE: titre lisible pour votre règle d'accès.

    Pour en savoir plus, consultez la section Créer un accès au niveau de l'organisation règle.

  2. Obtenir le nom de votre accès règle.

  3. Pour définir cette règle comme règle d'accès par défaut, exécutez la commande suivante : Commande de gcloud CLI:

    gcloud config set access_context_manager/policy POLICY_NAME
    

    Remplacez POLICY_NAME par le nom (au format numérique) de votre règle d'accès.

    Pour en savoir plus, consultez la section Définir la règle d'accès par défaut pour l'outil de ligne de commande gcloud.

Créer des périmètres pour protéger le projet hôte réseau et le projet Cloud Storage

  1. Pour créer un périmètre sp1 autour de Project1, exécutez la commande suivante : Commande de gcloud CLI:

    gcloud access-context-manager perimeters create sp1 --title="sp1" --resources=PROJECT_NUMBER \
        --restricted-services=storage.googleapis.com --policy=POLICY_NAME
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER: numéro du projet hôte du réseau. Exemple :projects/111

    • POLICY_NAME: nom (au format numérique) de votre règle d'accès. Exemple : 1234567890.

  2. Pour créer un périmètre sp2 autour de Project2 qui limite service Cloud Storage, exécutez la commande gcloud CLI suivante:

    gcloud access-context-manager perimeters create sp2 --title="sp2" --resources=PROJECT_NUMBER \
        --restricted-services=storage.googleapis.com --policy=POLICY_NAME
    

    Remplacez les éléments suivants :

    • PROJECT_NUMBER: numéro du projet Cloud Storage projet. Exemple :projects/222

    • POLICY_NAME: nom (au format numérique) de votre règle d'accès. Exemple : 1234567890.

Pour plus d'informations sur la création d'un périmètre de service, consultez la section Créer un service périmètre.

Une fois ces deux périmètres créés, le bucket Cloud Storage n'est plus utilisé accessible depuis les deux VM.

Créer un niveau d'accès avec une condition d'accès basée sur une adresse IP interne

Créez un niveau d'accès n'autorisant que le trafic provenant du sous-réseau de VM1.

  1. Créez un fichier YAML qui définit vos conditions d'accès. L'exemple suivant n'affiche que les attributs dont vous avez besoin pour activer une adresse IP interne:

    echo """
    - vpcNetworkSources:
      - vpcSubnetwork:
          network: VPC_NETWORK_NAME
          vpcIpSubnetworks:
          - IP_RANGE
    
    """ > level.yaml
    

    Remplacez les éléments suivants :

    • VPC_NETWORK_NAME: nom du réseau VPC où se trouve le VM1. Exemple : //compute.googleapis.com/projects/Project1/global/networks/default.

    • IP_RANGE: plage d'adresses IP du sous-réseau. Exemple : 10.10.0.0/24.

    Utiliser le nom du réseau VPC et les formats de plages d'adresses IP expliqué précédemment.

    Pour en savoir plus sur le fichier YAML, consultez basic-level-spec YAML fichier.

  2. Pour créer un niveau d'accès à l'aide du fichier YAML, exécutez la commande suivante : Commande de gcloud CLI:

    gcloud access-context-manager levels create LEVEL_NAME \
        --title="TITLE" --basic-level-spec=FILE_NAME
    

    Remplacez les éléments suivants :

    • LEVEL_NAME: nom unique du niveau d'accès. Exemple : allowvm1.

    • TITLE: titre court et lisible pour le niveau d'accès. Exemple :allowvm1

    • FILE_NAME: fichier YAML qui définit vos conditions d'accès pour le niveau d'accès. Exemple :level.yaml

    Pour en savoir plus, consultez la section Créer un accès de base niveau supérieur.

Configurer une règle d'entrée pour autoriser le trafic d'API entrant vers le bucket Cloud Storage

Pour n'autoriser l'accès qu'à partir de VM1, configurez une règle d'entrée dans le sp2 périmètre pour permettre au trafic de l'API Cloud Storage d'y entrer.

  1. Créez un fichier YAML qui définit votre règle d'entrée.

    echo """
    - ingressFrom:
        identityType: ANY_IDENTITY
        sources:
        - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
      ingressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - '*'
    
    """ > ingress.yaml
    

    Remplacez les éléments suivants :

    • POLICY_NAME: nom (au format numérique) de votre règle d'accès. Exemple : 1234567890.

    • ACCESS_LEVEL_NAME: nom de votre niveau d'accès. Exemple : allowvm1.

    Pour plus d'informations sur le fichier YAML, consultez la section Règles d'entrée référence.

  2. Pour mettre à jour la règle d'entrée d'un périmètre de service, exécutez la commande suivante : Commande de gcloud CLI:

    gcloud access-context-manager perimeters update PERIMETER --set-ingress-policies=FILE_NAME
    

    Remplacez les éléments suivants :

    • PERIMETER: nom du périmètre de service qui protège le projet Cloud Storage. Exemple :sp2

    • FILE_NAME: fichier YAML qui définit votre règle d'entrée. Exemple : ingress.yaml.

    Pour en savoir plus, consultez la section Mettre à jour les règles d'entrée et de sortie pour une périmètre de service.

Configurer une règle de sortie pour autoriser le trafic API sortant vers le bucket Cloud Storage

Configurez également une règle de sortie dans le périmètre sp1 pour autoriser le trafic de l'API Cloud Storage à la sortie du périmètre.

  1. Créez un fichier YAML qui définit votre règle de sortie. Assurez-vous d'avoir défini le champ sourceRestriction comme SOURCE_RESTRICTION_ENABLED dans le fichier YAML .

    echo """
    - egressFrom:
        identityType: ANY_IDENTITY
        sourceRestriction: SOURCE_RESTRICTION_ENABLED
        sources:
        - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
      egressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - '*'
    
    """ > egress.yaml
    

    Remplacez les éléments suivants :

    • POLICY_NAME: nom (au format numérique) de votre règle d'accès. Exemple : 1234567890.

    • ACCESS_LEVEL_NAME: nom de votre niveau d'accès. Exemple : allowvm1.

    Pour en savoir plus sur le fichier YAML, consultez la section Règles de sortie référence.

  2. Pour mettre à jour la règle de sortie d'un périmètre de service, exécutez la commande suivante : :

    gcloud access-context-manager perimeters update PERIMETER --set-egress-policies=FILE_NAME
    

    Remplacez les éléments suivants :

    • PERIMETER: nom du périmètre de service qui protège le de votre projet hôte réseau. Exemple :sp1

    • FILE_NAME: fichier YAML qui définit votre règle de sortie. Exemple : egress.yaml.

    Pour en savoir plus, consultez la section Mettre à jour les règles d'entrée et de sortie pour une périmètre de service.

Une fois les règles d'entrée et de sortie configurées, le bucket Cloud Storage est accessible depuis VM1, alors que le bucket Cloud Storage n'est pas accessible depuis VM2.

Recommandations

  • Lorsque vous activez une adresse IP interne, nous vous recommandons de désactiver les adresses IP pour vos VM. Transfert IP permet à une VM du même réseau VPC d'envoyer des requêtes en utilisant une adresse IP différente, ce qui présente un risque de spoofing.

  • Si vous souhaitez activer le transfert IP, nous vous recommandons d'utiliser la classe afin de réduire le risque d'usurpation d'adresse IP:

    • Utiliser la règle d'administration Restrict VM IP Forwarding contrainte (constraints/compute.vmCanIpForward) pour garantir que seules les VM autorisées peuvent activer le transfert IP.

    • Utiliser des sources pour les règles de pare-feu pour limiter les adresses IP qui peuvent communiquer avec les VM disposant d'adresses IP le transfert est activé. Effectuez les tâches suivantes :

      • Configurez des règles de pare-feu d'entrée pour autoriser le trafic entrant uniquement à partir d'une plage d'adresses IP vers les VM sur lesquelles le transfert IP est activé.

      • Configurez des règles de pare-feu de sortie pour autoriser le trafic sortant uniquement vers Plage d'adresses IP des VM sur lesquelles le transfert IP est activé.