Crear un contenedor con reglas de filtrado por IP

En esta página se describe cómo crear un contenedor con reglas de filtrado por IP. Si creas un contenedor con filtrado por IP, puedes controlar el acceso a tus contenedores examinando las solicitudes entrantes en función de las direcciones IP especificadas en las reglas de filtrado por IP del contenedor. Para obtener más información, consulta Filtrado de IP de un bucket.

Para obtener información sobre cómo crear o actualizar las reglas de filtrado por IP de un cubo ya creado, consulta Actualizar las reglas de filtrado por IP de un cubo.

Roles obligatorios

Para obtener los permisos necesarios para crear un segmento con reglas de filtrado por IP, pide a tu administrador que te conceda el rol Administrador de Storage (roles/storage.admin) en el segmento. Este rol contiene los permisos necesarios para crear un segmento con reglas de filtrado por IP.

Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:

Permisos obligatorios

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

También puedes obtener estos permisos con roles personalizados. También puedes obtener estos permisos con otros roles predefinidos. Para ver qué roles están asociados a qué permisos, consulta Roles de gestión de identidades y accesos para Cloud Storage.

Para obtener instrucciones sobre cómo conceder roles en los contenedores, consulta el artículo Usar IAM con contenedores.

Crear un contenedor con reglas de filtrado por IP

gcloud

  1. Verifica que tienes instalada la versión 526.0.0 o una posterior de Google Cloud CLI:

    gcloud version | head -n1
    
  2. Si tienes instalada una versión anterior de la CLI de gcloud, actualízala:

    gcloud components update --version=526.0.0
    
  3. Crea un archivo JSON que defina las reglas de las solicitudes entrantes. Para ver ejemplos e información sobre cómo estructurar las reglas de filtrado por IP de los contenedores, consulta Configuraciones de filtrado por IP de los contenedores.

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

    Donde:

    • MODE es el modo de la configuración del filtro de IP del contenedor. Los valores válidos son Enabled y Disabled. Si se define como Enabled, las reglas de filtrado por IP se aplican a un contenedor. Cualquier solicitud entrante al contenedor se evalúa en función de estas reglas. Si se le asigna el valor Disabled, todas las solicitudes entrantes podrán acceder al contenedor.

    • RANGE_CIDR es un intervalo de direcciones IPv4 o IPv6 de una red pública que tiene permiso para acceder al segmento. Puedes introducir uno o varios intervalos de direcciones en forma de lista.

    • PROJECT_ID es el ID del proyecto en el que se encuentra la red de nube privada virtual (VPC). Para configurar varias redes de VPC, debes especificar el proyecto en el que se encuentra cada red.

    • NETWORK_NAME es el nombre de la red de VPC que tiene permiso para acceder al bucket. Para configurar varias redes de VPC, debes especificar un nombre para cada red.

    • ALLOW_CROSS_ORG_VPCS es un valor booleano que indica si se permiten las redes de VPC definidas en vpcNetworkSources que proceden de otra organización. Este campo es opcional. Si se define como true, la solicitud permite redes de VPC entre organizaciones. Si se define como false, la solicitud restringe las redes de VPC a la misma organización que el cubo. Si no se especifica ningún valor, se utiliza false de forma predeterminada. Este campo solo se aplica si vpcNetworkSources no está vacío.

    • ALLOW_ALL_SERVICE_AGENT_ACCESS es un valor booleano que indica si se permite que los agentes de servicio accedan al bucket, independientemente de la configuración del filtro de IP. Si el valor es true, otros Google Cloud servicios pueden usar agentes de servicio para acceder al segmento sin validación basada en IP.

  4. Para crear un contenedor con reglas de filtrado por IP, ejecuta el comando gcloud alpha storage buckets create en tu entorno de desarrollo:

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

    Donde:

    • BUCKET_NAME es el nombre que quieres dar al segmento, sujeto a los requisitos de nomenclatura. Por ejemplo, my-bucket.
    • IP_FILTER_CONFIG_FILE es el archivo JSON que define las reglas de las solicitudes entrantes.

APIs REST

API JSON

  1. Tener instalada e inicializadala CLI de gcloud, que te permite generar un token de acceso para el encabezado Authorization.

  2. Crea un archivo JSON que contenga los ajustes del segmento, que debe incluir los campos de configuración name y ipFilter del segmento. Para ver ejemplos e información sobre cómo estructurar las reglas de filtrado por IP de los contenedores, consulta Configuraciones de filtrado por IP de los contenedores.

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

    Donde:

    • MODE es el estado de la configuración del filtro de IP. Los valores válidos son Enabled y Disabled. Si se define como Enabled, las reglas de filtrado de IP se aplican a un contenedor y todas las solicitudes entrantes al contenedor se evalúan en función de estas reglas. Si se define como Disabled, todas las solicitudes entrantes pueden acceder al segmento y a sus datos sin ninguna evaluación si tienes los permisos de IAM necesarios.

    • RANGE_CIDR es un intervalo de direcciones IPv4 o IPv6 de una red pública que tiene permiso para acceder al segmento. Puedes introducir uno o varios intervalos de direcciones como una lista.

    • PROJECT_ID es el ID del proyecto en el que se encuentra la red de VPC. Para configurar varias redes de VPC, debes especificar el proyecto en el que se encuentra cada red.

    • NETWORK_NAME es el nombre de la red de VPC que tiene permiso para acceder al bucket. Para configurar varias redes de VPC, debes especificar un nombre para cada red.

    • ALLOW_ALL_SERVICE_AGENT_ACCESS es un valor booleano que indica si se permite que los agentes de servicio accedan al segmento, independientemente de la configuración del filtro de IP. Si el valor es true, otros Google Cloud servicios pueden usar agentes de servicio para acceder al segmento sin validación basada en IP.

    • ALLOW_CROSS_ORG_VPCS es un valor booleano que indica si se permiten redes de VPC definidas en vpcNetworkSources que procedan de otra organización. Este campo es opcional. Si se define como true, la solicitud permite redes de VPC entre organizaciones. Si se define como false, la solicitud restringe las redes de VPC a la misma organización que el cubo. Si no se especifica ningún valor, se utiliza false de forma predeterminada. Este campo solo se aplica si vpcNetworkSources no está vacío.

  3. Usa cURL para llamar a la API JSON con una solicitud 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"

    Donde:

    • JSON_FILE_NAME es el nombre del archivo JSON que contiene la configuración del segmento.
    • PROJECT_IDENTIFIER es el ID o el número del proyecto al que está asociado tu contenedor. Por ejemplo, my-project.

Configuraciones de filtrado de IP de un bucket

En esta sección se proporcionan ejemplos de configuraciones de archivos JSON de filtrado de IP de segmentos para controlar el acceso a tus segmentos de Cloud Storage. Puede conceder acceso a las solicitudes entrantes con cualquiera de los siguientes ejemplos:

  • Cualquier dirección IP pública (IPv4 o IPv6):

    La siguiente configuración concede acceso a cualquier dirección IPv4 o IPv6 pública, pero bloquea el tráfico procedente de cualquier 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 IPs públicas específicos:

    • La siguiente configuración de ejemplo concede acceso al intervalo de direcciones IPv4 públicas 192.0.2.0/24, pero bloquea el tráfico procedente de cualquier 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
          }
        }
    • La siguiente configuración de ejemplo concede acceso al intervalo de direcciones IPv6 públicas 2001:db8::/32, pero bloquea el tráfico procedente de cualquier 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 de VPC: con las siguientes configuraciones, puedes conceder acceso a los recursos de tu red de VPC. Puedes conceder acceso a todas las direcciones IP de la VPC o a intervalos de IP específicos de la VPC. En cada uno de estos ejemplos, PROJECT_ID es el ID del proyecto en el que se encuentra la red de VPC y NETWORK_NAME es el nombre de la red de VPC que tiene permiso para acceder al cubo.

    • La siguiente configuración de ejemplo concede acceso a una solicitud de cualquier dirección IPv4 o IPv6 procedente de una VPC específica y bloquea el tráfico que se origina en una dirección IP pública:

      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
            }
        }
    • La siguiente configuración de ejemplo solo concede acceso a una solicitud de una VPC asociada a una VM con una dirección IPv4 externa como 192.0.2.0/24 y bloquea el tráfico procedente de una dirección IP pública:

      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
          }
        }
    • La siguiente configuración de ejemplo solo concede acceso a una solicitud procedente de una VPC con un intervalo de subred IPv4 interno asociado a una VM sin dirección IP externa y bloquea el tráfico procedente de una dirección IP pública:

      gcloud

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

      Donde:

      IP_ADDRESS es un intervalo de subred IPv4 interno.

      APIs REST

      API JSON

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

      Donde:

      IP_ADDRESS es un intervalo de subred IPv4 interno.

    • La siguiente configuración de ejemplo solo concede acceso a una solicitud procedente de una VPC con un intervalo de subred IPv4 e IPv6 de pila dual asociado a una VM con un intervalo de direcciones IPv6 externas como 2001:db8::/32 y bloquea el tráfico procedente de una dirección IP pública:

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

Siguientes pasos

Pruébalo

Si es la primera vez que utilizas Google Cloud, crea una cuenta para evaluar el rendimiento de Cloud Storage en situaciones reales. Los nuevos clientes también reciben 300 USD en crédito gratuito para ejecutar, probar y desplegar cargas de trabajo.

Probar Cloud Storage gratis