Créer un bucket avec des règles de filtrage par adresse IP

Cette page explique comment créer un bucket avec des règles de filtrage par adresse IP. Si vous créez un bucket avec filtrage par adresse IP, vous pouvez contrôler l'accès à ce bucket en mettant en parallèle les requêtes entrantes et les adresses IP spécifiées dans les règles de filtrage par adresse IP du bucket. Pour en savoir plus, consultez Filtrage par adresse IP pour le bucket.

Pour savoir comment créer ou mettre à jour les règles de filtrage par adresse IP sur un bucket existant, consultez Mettre à jour les règles de filtrage par adresse IP d'un bucket.

Rôles requis

Pour obtenir les autorisations requises pour créer un bucket avec des règles de filtrage par adresse IP, demandez à votre administrateur de vous accorder le rôle Administrateur Storage (roles/storage.admin) sur le bucket. Ce rôle contient les autorisations requises pour créer un bucket avec des règles de filtrage par adresse IP.

Pour afficher les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

  • storage.buckets.create
  • storage.buckets.setIpFilter

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés. Vous pouvez aussi obtenir ces autorisations avec d'autres rôles prédéfinis. Pour connaître les rôles et les autorisations associées, consultez Rôles IAM pour Cloud Storage.

Pour savoir comment attribuer des rôles sur des buckets, consultez Définir et gérer des stratégies IAM sur des buckets.

Créer un bucket avec des règles de filtrage par adresse IP

gcloud

  1. Vérifiez que la version 526.0.0 (ou ultérieure) de la Google Cloud CLI est installée :

    gcloud version | head -n1
    
  2. Si vous avez installé une version antérieure de la gcloud CLI, mettez-la à jour :

    gcloud components update --version=526.0.0
    
  3. Créez un fichier JSON qui définit les règles pour les requêtes entrantes. Pour obtenir des exemples et des informations sur la façon de structurer les règles de filtrage par adresse IP d'un bucket, consultez Configurations de filtrage par adresses IP pour les buckets.

    {
      "mode":"MODE",
      "publicNetworkSource":{
          "allowedIpCidrRanges":[
            "RANGE_CIDR",
            "..."
          ]
      },
      "vpcNetworkSources":[
          {
            "network":"projects/PROJECT_ID/global/networks/NETWORK_NAME",
            "allowedIpCidrRanges":[
                "RANGE_CIDR",
                "..."
            ]
          },
          "..."
      ],
      "allowCrossOrgVpcs":ALLOW_CROSS_ORG_VPCS,
      "allowAllServiceAgentAccess": ALLOW_ALL_SERVICE_AGENT_ACCESS
    }

    Où :

    • MODE correspond au mode de configuration du filtrage par adresse IP du bucket. Les valeurs valides sont Enabled et Disabled. Lorsque la valeur est définie sur Enabled, les règles de filtrage par adresse IP sont appliquées à un bucket. Toute requête entrante vers le bucket est évaluée vis-à-vis de ces règles. Lorsque la valeur est définie sur Disabled, toutes les requêtes entrantes sont autorisées à accéder au bucket.

    • RANGE_CIDR est une plage d'adresses IPv4 ou IPv6 de réseau public autorisée à accéder au bucket. Vous pouvez indiquer une ou plusieurs plages d'adresses sous forme de liste.

    • PROJECT_ID est l'ID du projet dans lequel se trouve le réseau de cloud privé virtuel (VPC). Pour configurer plusieurs réseaux VPC, vous devez spécifier le projet dans lequel se trouve chaque réseau.

    • NETWORK_NAME correspond au nom du réseau VPC autorisé à accéder au bucket. Pour configurer plusieurs réseaux VPC, vous devez spécifier un nom pour chacun d'eux.

    • ALLOW_CROSS_ORG_VPCS est une valeur booléenne qui indique s'il faut autoriser les réseaux VPC définis dans vpcNetworkSources à provenir d'une autre organisation. Ce champ est facultatif. Si la valeur est définie sur true, la requête autorise les réseaux VPC interorganisationnels. Si la valeur est définie sur false, la requête limite les réseaux VPC à la même organisation que le bucket. Si aucune valeur n'est spécifiée, la valeur par défaut est false. Ce champ ne s'applique que si vpcNetworkSources n'est pas vide.

    • ALLOW_ALL_SERVICE_AGENT_ACCESS est une valeur booléenne qui indique s'il faut autoriser les agents de service à accéder au bucket, quelle que soit la configuration du filtrage par adresse IP. Si la valeur est true, d'autres services Google Cloud peuvent utiliser des agents de service pour accéder au bucket sans validation basée sur l'adresse IP.

  4. Pour créer un bucket avec des règles de filtrage par adresse IP, exécutez la commande gcloud storage buckets create dans votre environnement de développement :

    gcloud storage buckets create gs://BUCKET_NAME --ip-filter-file=IP_FILTER_CONFIG_FILE

    Où :

    • BUCKET_NAME correspond au nom que vous souhaitez attribuer au bucket. Ce nom est soumis à des exigences de dénomination. Exemple : my-bucket.
    • IP_FILTER_CONFIG_FILE est le fichier JSON qui définit les règles pour les requêtes entrantes.

API REST

API JSON

  1. Vous devez installer et initialiser la gcloud CLI afin de générer un jeton d'accès pour l'en-tête Authorization.

  2. Créez un fichier JSON contenant les paramètres du bucket, en incluant les champs de configuration name et ipFilter pour le bucket. Pour obtenir des exemples et des informations sur la façon de structurer les règles de filtrage par adresse IP d'un bucket, consultez Configurations de filtrage par adresses IP pour les buckets.

    {
      "name": "BUCKET_NAME",
      "ipFilter": {
        "mode": "MODE",
        "publicNetworkSource":
          {
            "allowedIpCidrRanges":
              [RANGE_CIDR,
                ...
              ]
          },
        "vpcNetworkSources":
          [
            {"network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
            "allowedIpCidrRanges":
              [RANGE_CIDR,
              ...
              ]
            },
          ...
          ],
        "allowCrossOrgVpcs": ALLOW_CROSS_ORG_VPCS,
        "allowAllServiceAgentAccess": ALLOW_ALL_SERVICE_AGENT_ACCESS
        },
    }

    Où :

    • MODE correspond à l'état de la configuration du filtrage par adresse IP. Les valeurs valides sont Enabled et Disabled. Lorsque ce paramètre est défini sur Enabled, les règles de filtrage par adresse IP sont appliquées à un bucket, et toutes les requêtes entrantes adressées à ce bucket sont évaluées vis-à-vis de ces règles. Lorsque la valeur est définie sur Disabled, toutes les requêtes entrantes peuvent accéder au bucket et à ses données sans aucune évaluation, à condition que vous disposiez des autorisations IAM requises.

    • RANGE_CIDR est une plage d'adresses IPv4 ou IPv6 de réseau public autorisée à accéder au bucket. Vous pouvez indiquer une ou plusieurs plages d'adresses sous forme de liste.

    • PROJECT_ID est l'ID du projet dans lequel se trouve le réseau VPC. Pour configurer plusieurs réseaux VPC, vous devez spécifier le projet dans lequel se trouve chaque réseau.

    • NETWORK_NAME correspond au nom du réseau VPC autorisé à accéder au bucket. Pour configurer plusieurs réseaux VPC, vous devez spécifier un nom pour chacun d'eux.

    • ALLOW_ALL_SERVICE_AGENT_ACCESS est une valeur booléenne qui indique s'il faut autoriser les agents de service à accéder au bucket, quelle que soit la configuration du filtrage par adresse IP. Si la valeur est true, d'autres services Google Cloud peuvent utiliser des agents de service pour accéder au bucket sans validation basée sur l'adresse IP.

    • ALLOW_CROSS_ORG_VPCS est une valeur booléenne qui indique s'il faut autoriser les réseaux VPC définis dans vpcNetworkSources à provenir d'une autre organisation. Ce champ est facultatif. Si la valeur est définie sur true, la requête autorise les réseaux VPC interorganisationnels. Si la valeur est définie sur false, la requête limite les réseaux VPC à la même organisation que le bucket. Si aucune valeur n'est spécifiée, la valeur par défaut false est utilisée. Ce champ ne s'applique que si vpcNetworkSources n'est pas vide.

  3. Utilisez cURL pour appeler l'API JSON avec une requête POST bucket :

    curl -X POST --data-binary @JSON_FILE_NAME \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     "https://storage.googleapis.com/storage/v1/b?project=PROJECT_IDENTIFIER"

    Où :

    • JSON_FILE_NAME est le nom du fichier JSON qui contient les paramètres du bucket.
    • PROJECT_IDENTIFIER est l'ID ou le numéro du projet auquel le bucket est associé. Exemple : my-project.

Configurations de filtrage par adresses IP pour les buckets

Cette section fournit des exemples pour la configuration de fichiers JSON de filtrage par adresse IP permettant de contrôler l'accès à vos buckets Cloud Storage. Vous pouvez accorder l'accès aux requêtes entrantes en utilisant l'un des exemples suivants :

  • Toute adresse IP publique (IPv4 ou IPv6) :

    La configuration suivante accorde l'accès à n'importe quelle adresse IPv4 ou IPv6 publique, mais bloque le trafic provenant de tout VPC :

    gcloud

      {
        "mode": "Enabled",
        "publicNetworkSource":
        {
          "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"]
        },
        "allowAllServiceAgentAccess": false
      }
      

    API REST

    API JSON

      {
      "ipFilter":
      {
        "mode": "Enabled",
        "publicNetworkSource":
        {
          "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"]
        },
        "allowAllServiceAgentAccess": false
      }
      }
      
  • Plages d'adresses IP publiques spécifiques :

    • L'exemple de configuration suivant accorde l'accès à la plage d'adresses IPv4 publiques 192.0.2.0/24, mais bloque le trafic provenant de tout VPC :

      gcloud

          {
            "mode": "Enabled",
            "publicNetworkSource":
            {
              "allowedIpCidrRanges": ["192.0.2.0/24"]
            },
            "allowAllServiceAgentAccess": false
          }
        

      API REST

      API JSON

        {
        "ipFilter":
          {
            "mode": "Enabled",
            "publicNetworkSource":
            {
              "allowedIpCidrRanges": ["192.0.2.0/24"]
            },
            "allowAllServiceAgentAccess": false
          }
        }
    • L'exemple de configuration suivant accorde l'accès à la plage d'adresses IPv6 publiques 2001:db8::/32, mais bloque le trafic provenant de tout VPC :

      gcloud

          {
            "mode": "Enabled",
            "publicNetworkSource":
            {
              "allowedIpCidrRanges": ["2001:db8::/32"]
            },
            "allowAllServiceAgentAccess": false
          }
        

      API REST

      API JSON

        {
          "ipFilter":
            {
              "mode": "Enabled",
              "publicNetworkSource":
              {
                "allowedIpCidrRanges": ["2001:db8::/32"]
              },
              "allowAllServiceAgentAccess": false
            }
        }
  • Réseaux VPC : vous pouvez accorder l'accès aux ressources de votre réseau VPC à l'aide des configurations suivantes. Vous pouvez accorder l'accès à toutes les adresses IP du VPC ou à des plages d'adresses IP spécifiques. Dans chacun de ces exemples, PROJECT_ID correspond à l'ID du projet dans lequel se trouve le réseau VPC, et NETWORK_NAME correspond au nom du réseau VPC autorisé à accéder au bucket.

    • L'exemple de configuration suivant accorde l'accès à une requête provenant de n'importe quelle adresse IPv4 ou IPv6 d'un VPC spécifique et bloque tout trafic provenant d'une adresse IP publique :

      gcloud

        {
          "mode": "Enabled",
          "vpcNetworkSources":
            [
              {
                "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"]
              },
            ],
          "allowAllServiceAgentAccess": false
        }

      API REST

      API JSON

        {
          "ipFilter":
            {
              "mode": "Enabled",
              "vpcNetworkSources":
                [
                  {
                    "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                    "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"]
                  },
                ],
              "allowAllServiceAgentAccess": false
            }
        }
    • L'exemple de configuration suivant n'accorde l'accès qu'à une requête provenant d'un VPC associé à une VM avec une adresse IPv4 externe 192.0.2.0/24 et bloque le trafic provenant d'une adresse IP publique :

      gcloud

          {
            "mode": "Enabled",
            "vpcNetworkSources":
              [
                {
                  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                  "allowedIpCidrRanges": ["192.0.2.0/24"]
                },
              ],
            "allowAllServiceAgentAccess": false
          }
        

      API REST

      API JSON

        {
          "ipFilter":
          {
            "mode": "Enabled",
            "vpcNetworkSources":
              [
                {
                  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                  "allowedIpCidrRanges": ["192.0.2.0/24"]
                },
              ],
            "allowAllServiceAgentAccess": false
          }
        }
    • L'exemple de configuration suivant n'accorde l'accès qu'à une requête provenant d'un VPC avec une plage de sous-réseau IPv4 interne associée à une VM sans adresse IP externe, et bloque tout trafic provenant d'une adresse IP publique :

      gcloud

          {
            "mode": "Enabled",
            "vpcNetworkSources":
              [
                {
                  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                  "allowedIpCidrRanges": ["IP_ADDRESS"]
                },
              ],
            "allowAllServiceAgentAccess": false
          }
          

      Où :

      IP_ADDRESS est une plage de sous-réseau IPv4 interne.

      API REST

      API JSON

        {
        "ipFilter":
          {
            "mode": "Enabled",
            "vpcNetworkSources":
              [
                {
                "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                "allowedIpCidrRanges": ["IP_ADDRESS"]
                },
              ],
            "allowAllServiceAgentAccess": false
          }
        }
        

      Où :

      IP_ADDRESS est une plage de sous-réseau IPv4 interne.

    • L'exemple de configuration suivant n'accorde l'accès qu'à une requête provenant d'un VPC avec une plage de sous-réseaux à double pile (IPv4 et IPv6) associée à une VM avec une plage d'adresses IPv6 externes 2001:db8::/32 et bloque le trafic provenant d'une adresse IP publique :

      gcloud

        {
          "mode": "Enabled",
          "vpcNetworkSources":
          [
            {
              "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
              "allowedIpCidrRanges": ["2001:db8::/32"]
            },
          ],
          "allowAllServiceAgentAccess": false
          }
        

      API REST

      API JSON

        {
        "ipFilter":
          {
            "mode": "Enabled",
            "vpcNetworkSources":
              [
                {
                  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                  "allowedIpCidrRanges": ["2001:db8::/32"]
                },
              ],
            "allowAllServiceAgentAccess": false
            }
        }

Étapes suivantes

Faites l'essai

Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de Cloud Storage en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits offerts pour exécuter, tester et déployer des charges de travail.

Profiter d'un essai gratuit de Cloud Storage