Crie um contentor com regras de filtragem de IP

Esta página descreve como criar um contentor com regras de filtragem de IP. Ao criar um contentor com filtragem de IP, pode controlar o acesso aos seus contentores examinando os pedidos recebidos em função dos endereços IP especificados nas regras de filtragem de IP do contentor. Para ver detalhes, consulte a secção Filtragem de IP do contentor.

Para ver informações sobre como criar ou atualizar as regras de filtragem de IP num contentor existente, consulte o artigo Atualize as regras de filtragem de IP do contentor.

Funções necessárias

Para receber as autorizações necessárias para criar um contentor com regras de filtragem de IP, peça ao seu administrador para lhe conceder a função de administrador do armazenamento (roles/storage.admin) no contentor. Esta função contém as autorizações necessárias para criar um contentor com regras de filtragem de IP.

Para ver as autorizações exatas necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

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

Também pode obter estas autorizações com funções personalizadas. Também pode conseguir estas autorizações com outras funções predefinidas. Para ver as funções associadas a autorizações específicas, consulte o artigo Funções de IAM para o Cloud Storage.

Para obter instruções sobre como conceder funções em contentores, consulte o artigo Use o IAM com contentores.

Crie um contentor com regras de filtragem de IP

gcloud

  1. Verifique se tem a versão 526.0.0 ou posterior da CLI Google Cloud instalada:

    gcloud version | head -n1
    
  2. Se tiver uma versão anterior da CLI gcloud instalada, atualize a versão:

    gcloud components update --version=526.0.0
    
  3. Crie um ficheiro JSON que defina as regras para pedidos recebidos. Para ver exemplos e informações sobre como estruturar as regras de filtragem de IP do contentor, consulte o artigo Configurações de filtragem de IP do contentor.

    {
      "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
    }

    Onde:

    • MODE é o modo da configuração de filtragem de IP do contentor. Os valores válidos são Enabled e Disabled. Quando está definido como Enabled, as regras de filtragem de IP são aplicadas a um contentor. Qualquer pedido recebido para o contentor é avaliado em função destas regras. Quando definido como Disabled, todos os pedidos recebidos têm permissão para aceder ao contentor.

    • RANGE_CIDR é um intervalo de endereços IPv4 ou IPv6 de rede pública que tem autorização para aceder ao contentor. Pode introduzir um ou vários intervalos de endereços como uma lista.

    • PROJECT_ID é o ID do projeto onde existe a rede da nuvem virtual privada (VPC). Para configurar várias redes VPC, tem de especificar o projeto onde cada rede está localizada.

    • NETWORK_NAME é o nome da rede VPC que tem autorização para aceder ao contentor. Para configurar várias redes VPC, tem de especificar um nome para cada rede.

    • ALLOW_CROSS_ORG_VPCS é um valor booleano que indica se deve permitir que as redes VPC definidas em vpcNetworkSources tenham origem numa organização diferente. Este campo é opcional. Se estiver definido como true, o pedido permite redes VPC entre organizações. Se estiver definido como false, o pedido restringe as redes VPC à mesma organização que o contentor. Se não for especificado, o valor predefinido é false. Este campo só se aplica se vpcNetworkSources não estiver vazio.

    • ALLOW_ALL_SERVICE_AGENT_ACCESS é um valor booleano que indica se deve permitir que os agentes de serviço acedam ao contentor, independentemente da configuração do filtro de IP. Se o valor for true, outros Trusted Cloud serviços podem usar agentes de serviço para aceder ao contentor sem validação baseada em IP.

  4. Para criar um contentor com regras de filtragem de IP, execute o comando gcloud alpha storage buckets create no seu ambiente de desenvolvimento:

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

    Onde:

    • BUCKET_NAME é o nome que quer dar ao seu contentor, sujeito aos requisitos de nomenclatura. Por exemplo, my-bucket.
    • IP_FILTER_CONFIG_FILE é o ficheiro JSON que define as regras para pedidos recebidos.

APIs REST

API JSON

  1. Ter a CLI gcloud instalada e inicializada, o que lhe permite gerar um token de acesso para o cabeçalho Authorization.

  2. Crie um ficheiro JSON que contenha as definições do contentor, que têm de incluir os campos de configuração name e ipFilter para o contentor. Para ver exemplos e informações sobre como estruturar as regras de filtragem de IP do contentor, consulte o artigo Configurações de filtragem de IP do contentor.

    {
      "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
        },
    }

    Onde:

    • MODE é o estado da configuração do filtro de IP. Os valores válidos são Enabled e Disabled. Quando definido como Enabled, as regras de filtragem de IP são aplicadas a um contentor, e todos os pedidos recebidos para o contentor são avaliados em função destas regras. Quando definido como Disabled, todos os pedidos recebidos podem aceder ao contentor e aos respetivos dados sem qualquer avaliação se tiver as autorizações do IAM necessárias.

    • RANGE_CIDR é um intervalo de endereços IPv4 ou IPv6 de uma rede pública que tem autorização para aceder ao contentor. Pode introduzir um ou vários intervalos de endereços como uma lista.

    • PROJECT_ID é o ID do projeto onde a rede VPC existe. Para configurar várias redes VPC, tem de especificar o projeto onde cada rede está localizada.

    • NETWORK_NAME é o nome da rede VPC que tem autorização para aceder ao contentor. Para configurar várias redes VPC, tem de especificar um nome para cada rede.

    • ALLOW_ALL_SERVICE_AGENT_ACCESS é um valor booleano que indica se os agentes de serviço devem ter acesso ao contentor, independentemente da configuração do filtro de IP. Se o valor for true, outros serviços podem usar agentes de serviço para aceder ao contentor sem validação baseada em IP. Trusted Cloud

    • ALLOW_CROSS_ORG_VPCS é um valor booleano que indica se as redes VPC definidas em vpcNetworkSources podem ter origem numa organização diferente. Este campo é opcional. Se estiver definido como true, o pedido permite redes VPC entre organizações. Se estiver definido como false, o pedido restringe as redes VPC à mesma organização que o contentor. Se não for especificado, o valor predefinido é false. Este campo só se aplica se vpcNetworkSources não estiver vazio.

  3. Use cURL para chamar a API JSON com um pedido 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.s3nsapis.fr/storage/v1/b?project=PROJECT_IDENTIFIER"

    Onde:

    • JSON_FILE_NAME é o nome do ficheiro JSON que contém as definições do contentor.
    • PROJECT_IDENTIFIER é o ID ou o número do projeto ao qual o seu contentor está associado. Por exemplo, my-project.

Configurações de filtragem de IP de contentores

Esta secção fornece exemplos de configurações de ficheiros JSON de filtragem de IP de contentores para controlar o acesso aos seus contentores do Cloud Storage. Pode conceder acesso a pedidos recebidos através de qualquer um dos seguintes exemplos:

  • Qualquer endereço IP público (IPv4 ou IPv6):

    A configuração seguinte concede acesso a qualquer endereço IPv4 ou IPv6 público, mas bloqueia o tráfego proveniente de qualquer VPC:

    gcloud

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

    APIs REST

    API JSON

      {
      "ipFilter":
      {
        "mode": "Enabled",
        "publicNetworkSource":
        {
          "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"]
        },
        "allowAllServiceAgentAccess": false
      }
      }
      
  • Intervalos de IP públicos específicos:

    • A configuração de exemplo seguinte concede acesso ao intervalo de endereços IPv4 públicos 192.0.2.0/24, mas bloqueia o tráfego originário de qualquer VPC:

      gcloud

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

      APIs REST

      API JSON

        {
        "ipFilter":
          {
            "mode": "Enabled",
            "publicNetworkSource":
            {
              "allowedIpCidrRanges": ["192.0.2.0/24"]
            },
            "allowAllServiceAgentAccess": false
          }
        }
    • A configuração de exemplo seguinte concede acesso ao intervalo de endereços IPv6 públicos 2001:db8::/32, mas bloqueia o tráfego originário de qualquer VPC:

      gcloud

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

      APIs REST

      API JSON

        {
          "ipFilter":
            {
              "mode": "Enabled",
              "publicNetworkSource":
              {
                "allowedIpCidrRanges": ["2001:db8::/32"]
              },
              "allowAllServiceAgentAccess": false
            }
        }
  • Redes VPC: com as seguintes configurações, pode conceder acesso a recursos na sua rede VPC. Pode conceder acesso a todos os endereços IP na VPC ou a intervalos de IP específicos na VPC. Em cada um destes exemplos, PROJECT_ID é o ID do projeto onde existe a rede VPC e NETWORK_NAME é o nome da rede VPC que tem autorização para aceder ao contentor.

    • A seguinte configuração de exemplo concede acesso a um pedido de qualquer endereço IPv4 ou IPv6 proveniente de uma VPC específica e bloqueia o tráfego originário de um endereço IP público:

      gcloud

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

      APIs REST

      API JSON

        {
          "ipFilter":
            {
              "mode": "Enabled",
              "vpcNetworkSources":
                [
                  {
                    "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                    "allowedIpCidrRanges": ["0.0.0.0/0", "::/0"]
                  },
                ],
              "allowAllServiceAgentAccess": false
            }
        }
    • A configuração de exemplo seguinte só concede acesso a um pedido de uma VPC associada a uma VM com um endereço IPv4 externo como 192.0.2.0/24 e bloqueia o tráfego proveniente de um endereço IP público:

      gcloud

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

      APIs REST

      API JSON

        {
          "ipFilter":
          {
            "mode": "Enabled",
            "vpcNetworkSources":
              [
                {
                  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
                  "allowedIpCidrRanges": ["192.0.2.0/24"]
                },
              ],
            "allowAllServiceAgentAccess": false
          }
        }
    • A configuração de exemplo seguinte concede apenas acesso a um pedido proveniente de uma VPC com um intervalo de sub-rede IPv4 interno associado a uma VM sem um endereço IP externo e bloqueia o tráfego originário de um endereço IP público:

      gcloud

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

      Onde:

      IP_ADDRESS é um intervalo de sub-rede IPv4 interno.

      APIs REST

      API JSON

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

      Onde:

      IP_ADDRESS é um intervalo de sub-rede IPv4 interno.

    • A configuração de exemplo seguinte só concede acesso a um pedido proveniente de uma VPC com um intervalo de sub-rede IPv4 e IPv6 de pilha dupla associado a uma VM com um intervalo de endereços IPv6 externos como 2001:db8::/32 e bloqueia o tráfego proveniente de um endereço IP público:

      gcloud

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

      APIs REST

      API JSON

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

O que se segue?