Configurar los Controles del servicio de VPC

Controles del servicio de VPC es una función de Google Cloud que te permite configurar un perímetro seguro para protegerte del robo de datos. En esta guía, se muestra cómo usar los Controles del servicio de VPC con Cloud Functions para agregar seguridad adicional a tus funciones.

Para obtener más información sobre las limitaciones conocidas de esta integración, consulta la documentación de los Controles del servicio de VPC.

Configuración a nivel de la organización

Para usar los Controles del servicio de VPC con Cloud Functions, puedes configurar un perímetro de servicio a nivel de la organización. Si configuras las políticas de la organización adecuadas, puedes asegurarte de que se apliquen las verificaciones de los Controles del servicio de VPC cuando se usa Cloud Functions y que los desarrolladores solo puedan implementar servicios que cumplan con los Controles del servicio de VPC. Obtén más información sobre la herencia y las incumplimientos cuando configuras una política de la organización.

Configura un perímetro de Controles del servicio de VPC

Para configurar un perímetro de servicio, necesitas las funciones de visualizador de organizaciones (roles/resourcemanager.organizationViewer) y editor de Access Context Manager (roles/accesscontextmanager.policyEditor).

Sigue la Guía de inicio rápido de los Controles del servicio de VPC para realizar lo siguiente:

  1. Crear un perímetro de servicio

  2. Agregar uno o más proyectos al perímetro

  3. Restringe la API de Cloud Functions (1a. gen) o la API de Cloud Functions y la API de Cloud Run Admin (2a gen.).

Después de configurar el perímetro de servicio, se verificarán todas las llamadas a la API de Cloud Functions para garantizar que se originen en su interior.

Opcional: Habilita el acceso al perímetro para máquinas de desarrollo

Las verificaciones de los Controles del servicio de VPC se aplican a la API de Cloud Functions, por lo que las llamadas a esta fallan si no se originan en el perímetro de servicio. Por lo tanto, para administrar funciones con la API de Cloud Functions, la IU de Cloud Functions en la consola de Google Cloud, o Google Cloud CLI, elige una de las siguientes opciones:

  • Usa una máquina que esté dentro del perímetro de los Controles del servicio de VPC. Por ejemplo, puedes usar una VM de Compute Engine o una máquina local conectada a tu red de VPC a través de una VPN.

  • Otorga acceso al perímetro a los desarrolladores de funciones. Por ejemplo, puedes crear niveles de acceso que habiliten el acceso al perímetro según la dirección IP o la identidad de usuario. Para obtener más información, consulta Permite el acceso a recursos protegidos desde fuera de un perímetro.

Configura las políticas de la organización

Para administrar las políticas de la organización, necesitas la función de administrador de políticas de la organización (roles/orgpolicy.policyAdmin).

A fin de cumplir con los Controles del servicio de VPC y protegerte contra el robo de datos, configura las siguientes políticas de la organización que controlan la configuración de red permitida para Cloud Functions en el perímetro de servicio.

Restringe la configuración de entrada permitida

En la política de la organización cloudfunctions.allowedIngressSettings, se definen las opciones de configuración de entrada que pueden usar los desarrolladores para Cloud Functions. Establece esta política de la organización para exigir que los desarrolladores usen el valor ALLOW_INTERNAL_ONLY:

Consola

  1. Ve a la página de la política Configuración de entrada permitida en la consola de Google Cloud:

    Ir a la política de la organización

  2. Haz clic en Administrar política.

  3. En la página Editar política, selecciona Personalizar.

  4. En Aplicación de la política, selecciona Reemplazar.

  5. En Valores de la política, selecciona Personalizar.

  6. En Tipo de política, selecciona Permitir.

  7. En Valores personalizados, ingresa ALLOW_INTERNAL_ONLY.

  8. Haz clic en Configurar política.

gcloud

Usa el comando gcloud resource-manager org-policies allow:

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

En el ejemplo anterior, ORGANIZATION_ID es el ID de la organización.

Después de implementar esta política de la organización, todas las funciones deberán usar el valor ALLOW_INTERNAL_ONLY en su configuración de entrada. Esto significa que las funciones de HTTP solo pueden aceptar tráfico proveniente de una red de VPC que esté dentro del perímetro de servicio. Las implementaciones de funciones en las que se especifique un valor diferente fallarán.

Exige un conector de VPC

En la política de la organización cloudfunctions.requireVPCConnector, se define si las funciones necesitan o no un conector de Acceso a VPC sin servidores. Haz lo siguiente para establecer esta política de la organización y aplicar la restricción:

Consola

  1. Ve a la página de la política Exigir conector de VPC en la consola de Google Cloud:

    Ir a la política de la organización

  2. Haz clic en Administrar política.

  3. En la página Editar política, selecciona Personalizar.

  4. En Aplicación, selecciona Activado.

  5. Haz clic en Configurar política.

gcloud

Usa el comando gcloud resource-manager org-policies enable-enforce:

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

En el ejemplo anterior, ORGANIZATION_ID es el ID de la organización.

Después de implementar esta política de la organización, todas las funciones deberán usar un conector de Acceso a VPC sin servidores. Las implementaciones de funciones en las que no se especifique un conector fallarán.

Restringe la configuración de salida permitida del conector de VPC

En la política de la organización cloudfunctions.allowedVpcConnectorEgressSettings, se definen las opciones de configuración de salida que pueden usar los desarrolladores para Cloud Functions. Haz lo siguiente para establecer esta política de la organización y permitir solo el valor ALL_TRAFFIC:

Consola

  1. Ve a la página de la política Configuración de salida permitida del conector de VPC en la consola de Google Cloud:

    Ir a la política de la organización

  2. Haz clic en Administrar política.

  3. En la página Editar política, selecciona Personalizar.

  4. En Aplicación de la política, selecciona Reemplazar.

  5. En Valores de la política, selecciona Personalizar.

  6. En Tipo de política, selecciona Permitir.

  7. En Valores personalizados, ingresa ALL_TRAFFIC.

  8. Haz clic en Configurar política.

gcloud

Usa el comando gcloud resource-manager org-policies allow:

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

En el ejemplo anterior, ORGANIZATION_ID es el ID de la organización.

Después de implementar esta política de la organización, todas las funciones deberán usar el valor ALL_TRAFFIC en su configuración de salida. Esto significa que las funciones deben enrutar todo el tráfico de salida por tu red de VPC. Las implementaciones de funciones en las que se especifique un valor diferente fallarán.

En combinación con la política de la organización cloudfunctions.requireVPCConnector, esto fuerza a todo el tráfico de salida a atravesar la red de VPC a la que está sujeta a su firewall configurado y reglas de enrutamiento.

Configuración a nivel de proyecto

Para usar los Controles del servicio de VPC en proyectos individuales que están dentro del perímetro de servicio, debes realizar una configuración adicional.

Configura redes de VPC

Para acceder a las API y los servicios de Google, además de mitigar los riesgos de robo de datos, las solicitudes deben enviarse al rango de IP virtual (VIP) restringido 199.36.153.4/30 (restricted.googleapis.com).

Sigue estos pasos para bloquear el tráfico de salida de cada red de VPC en un proyecto, excepto el que se dirige al rango de VIP restringido:

  1. Configura las reglas de firewall para evitar que los datos abandonen la red de VPC:

    • Crea una regla de rechazo de salida que bloquee todo el tráfico saliente.

    • Crea una regla de autorización de salida que permita el tráfico hacia 199.36.153.4/30 en el puerto TCP 443. Asegúrate de que tenga prioridad antes de la regla de rechazo de salida que acabas de crear. Esto permite la salida solo al rango de VIP restringido.

  2. Configura el DNS para resolver *.googleapis.com en restricted.googleapis.com.

  3. Configura el DNS con un registro A que asigne *.cloudfunctions.net al rango de IP 199.36.153.4/30. Puedes hacer esto con 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. Habilita el Acceso privado a Google para la subred de tu conector de VPC.

En este punto, puede suceder lo siguiente con las solicitudes que se originan en la red de VPC:

  • Las solicitudes no pueden salir de la red de VPC, lo que impide la salida fuera del perímetro del servicio.
  • Las solicitudes pueden llegar a las API y los servicios de Google que cumplen con los Controles del servicio de VPC, lo que evita el robo mediante las API de Google.

Otorga acceso a la cuenta de servicio de Cloud Build al perímetro de los Controles del servicio de VPC

Cloud Functions usa Cloud Build para compilar tu código fuente en un contenedor ejecutable. Para usar Cloud Functions con los Controles del servicio de VPC, debes configurar la cuenta de servicio de Cloud Build (ya sea predeterminada o personalizada) para que tenga acceso al perímetro de servicio.

Busca el nombre de la cuenta de servicio

Si usas la cuenta de servicio predeterminada de Cloud Build, puedes encontrar su nombre de la siguiente manera:

  1. Usa la página de IAM en la consola de Google Cloud para encontrar la cuenta de servicio de Cloud Build.

    Abrir IAM

  2. Asegúrate de que se muestre el proyecto correcto en el menú desplegable del proyecto.

  3. Busca cloudbuild.gserviceaccount.com. La dirección de correo electrónico con el formato PROJECT_NUMBER@cloudbuild.gserviceaccount.com es el nombre de la cuenta de servicio.

Si tienes una cuenta de servicio personalizada de Cloud Build, usa ese nombre en su lugar.

Otorga acceso al perímetro de servicio a la cuenta de servicio

Una vez que tengas el nombre de la cuenta de servicio, sigue la guía en Limita el acceso por usuario o cuenta de servicio a fin de crear un nivel de acceso para la cuenta de servicio. Luego, para agregar el nivel de acceso a tu perímetro de servicio, consulta Agrega un nivel de acceso a un perímetro existente.

Implementa funciones que cumplan con los Controles del servicio de VPC

Después de configurar los Controles del servicio de VPC para Cloud Functions, tendrás que asegurarte de que todas las funciones implementadas dentro del perímetro de servicio cumplan con las políticas de la organización especificadas. Esto significa lo siguiente:

  • Todas las funciones deben usar un conector de Acceso a VPC sin servidores. Consulta Conéctate a una red de VPC para obtener más información.
  • Todas las funciones deben permitir tráfico solo desde fuentes internas. Consulta Configuración de entrada para obtener más información.
  • Todas las funciones deben enrutar todo el tráfico saliente a través de la red de VPC. Consulta la configuración de salida para obtener más información.

Las implementaciones de funciones que no cumplan con estos criterios fallarán.

Audita las funciones existentes para garantizar que cumplan con los Controles del servicio de VPC

Después de configurar los Controles del servicio de VPC, se verificará de manera automática si las funciones nuevas creadas en los proyectos que están en el perímetro de servicio cumplen con estos controles. Sin embargo, para evitar la interrupción de las cargas de trabajo existentes, las funciones establecidas seguirán operando y es posible que no cumplan con las políticas de la organización.

Te recomendamos que audites las funciones existentes y que actualices o vuelvas a implementar las funciones según sea necesario. Si quieres facilitar este proceso, puedes crear una secuencia de comandos que use la API de Cloud Functions para enumerar tus funciones y destacar aquellas que no especifiquen la configuración de red adecuada.

Usa los Controles del servicio de VPC con funciones fuera de un perímetro

Las secciones anteriores se aplican a la situación en la que implementas Cloud Functions dentro de un perímetro de servicio de Controles del servicio de VPC.

Si necesitas implementar una función fuera del perímetro de servicio, pero la función requiere acceso a recursos dentro de un perímetro, usa la siguiente configuración:

  1. Otorga acceso al perímetro de los Controles del servicio de VPC a la cuenta de servicio de Cloud Build.
  2. Otorga acceso al perímetro a la cuenta de servicio del entorno de ejecución de la función. Puedes hacerlo de las siguientes dos maneras: Crear un nivel de acceso y Agrega el nivel de acceso al perímetro del servicio o Crea una política de entrada en el perímetro.
  3. Conecta la función a una red de VPC.
  4. Enruta todo el tráfico saliente de la función a través de la red de VPC Consulta la configuración de salida para obtener más información.

Después de completar esta configuración, la función podrá acceder a los recursos protegidos por el perímetro.