Configurar Controles de Servicio de VPC (1.ª gen.)

Controles de Servicio de VPC es una Google Cloud función que te permite configurar un perímetro seguro para protegerte frente a la filtración externa de datos. En esta guía se muestra cómo usar Controles de Servicio de VPC con funciones de Cloud Run para añadir seguridad adicional a tus funciones.

Para ver las limitaciones de esta integración, consulta la documentación de Controles de Servicio de VPC.

Configuración a nivel de organización

Para usar Controles de Servicio de VPC con funciones de Cloud Run, puedes configurar un perímetro de servicio a nivel de organización. Si configuras las políticas de organización adecuadas, puedes asegurarte de que se apliquen las comprobaciones de Controles de Servicio de VPC al usar funciones de Cloud Run y de que los desarrolladores solo puedan desplegar servicios que cumplan los requisitos de Controles de Servicio de VPC. Consulta más información sobre la herencia y las infracciones al definir una política de la organización.

Configurar un perímetro de Controles de Servicio de VPC

Para configurar un perímetro de servicio, necesitas los roles Lector de la organización (roles/resourcemanager.organizationViewer) y Editor de Access Context Manager (roles/accesscontextmanager.policyEditor).

Sigue la guía de inicio rápido de Controles de Servicio de VPC para hacer lo siguiente:

  1. Crea un perímetro de servicio.

  2. Añade uno o varios proyectos al perímetro.

  3. Restringe la API de Cloud Functions.

Una vez que haya configurado su perímetro de servicio, se comprobarán todas las llamadas a la API restringida para asegurarse de que proceden del mismo perímetro.

Opcional: Habilitar el acceso perimetral para máquinas de desarrollo

Como los controles de servicio de VPC se aplican a la API Cloud Functions, las llamadas a la API Cloud Functions fallan a menos que se originen dentro del perímetro de servicio. Por lo tanto, para gestionar funciones con la API de Cloud Functions, la interfaz de usuario de Cloud Run functions en la Google Cloud consola o la CLI de Google Cloud, elige una de las siguientes opciones:

  • Usa una máquina dentro del perímetro de Controles de Servicio de VPC. Por ejemplo, puedes usar una VM de Compute Engine o una máquina local conectada a tu red VPC mediante una VPN.

  • Concede acceso al perímetro a los desarrolladores de funciones. Por ejemplo, puedes crear niveles de acceso que permitan el acceso al perímetro en función de la dirección IP o de la identidad del usuario. Consulta el artículo sobre cómo permitir el acceso a recursos protegidos desde fuera de un perímetro para obtener más información.

Configurar políticas de organización

Para gestionar las políticas de organización, necesitas el rol Administrador de políticas de organización (roles/orgpolicy.policyAdmin).

Para cumplir los requisitos de Controles de Servicio de VPC y protegerte frente a la filtración de datos, configura las siguientes políticas de la organización que controlan los ajustes de red permitidos para las funciones de Cloud Run en el perímetro de servicio.

Restringir la configuración de entrada permitida

La política de organización cloudfunctions.allowedIngressSettings controla la configuración de entrada que los desarrolladores pueden usar en las funciones de Cloud Run. Define esta política de organización para obligar a los desarrolladores a usar el valor ALLOW_INTERNAL_ONLY:

Consola

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

    Ir a la política de la organización

  2. Haz clic en Gestionar política.

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

  4. En Cumplimiento de las políticas, selecciona Reemplazar.

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

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

  7. En Valores personalizados, introduce ALLOW_INTERNAL_ONLY.

  8. Haz clic en Definir 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

donde ORGANIZATION_ID es el ID de tu organización.

Una vez que se haya aplicado esta política de organización, todas las funciones deberán usar el valor ALLOW_INTERNAL_ONLY en su configuración de entrada. Esto significa que las funciones HTTP solo pueden aceptar tráfico procedente de una red de VPC dentro del perímetro de servicio. Las implementaciones de funciones que especifiquen un valor diferente fallarán.

Requiere un conector VPC

La política de organización cloudfunctions.requireVPCConnector controla si se requiere un conector de acceso a VPC sin servidor para las funciones. Define esta política de organización para aplicar esta restricción:

Consola

  1. Ve a la página de la política Require VPC Connector (Requerir conector de VPC) en la consola deGoogle Cloud :

    Ir a la política de la organización

  2. Haz clic en Gestionar política.

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

  4. En Implementación obligatoria, selecciona Activada.

  5. Haz clic en Definir 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

donde ORGANIZATION_ID es el ID de tu organización.

Una vez que se haya aplicado esta política de organización, todas las funciones deberán usar un conector de acceso a VPC sin servidor. Los despliegues de funciones que no especifiquen un conector fallarán.

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

La política de organización cloudfunctions.allowedVpcConnectorEgressSettings controla los ajustes de salida que pueden usar los desarrolladores para las funciones de Cloud Run. Define esta política de organización para permitir solo el valor ALL_TRAFFIC:

Consola

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

    Ir a la política de la organización

  2. Haz clic en Gestionar política.

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

  4. En Cumplimiento de las políticas, selecciona Reemplazar.

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

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

  7. En Valores personalizados, introduce ALL_TRAFFIC.

  8. Haz clic en Definir 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

donde ORGANIZATION_ID es el ID de tu organización.

Una vez que se haya implementado esta política de 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 a través de tu red de VPC. Las implementaciones de funciones que especifiquen un valor diferente fallarán.

En combinación con la política de organización cloudfunctions.requireVPCConnector, esta opción obliga a todo el tráfico de salida a atravesar la red de VPC, donde está sujeto a las reglas de cortafuegos y de enrutamiento configuradas.

Configuración a nivel de proyecto

En el caso de los proyectos individuales que se encuentren dentro del perímetro de servicio, debes realizar una configuración adicional para usar Controles de Servicio de VPC.

Configurar redes de VPC

Para acceder a las APIs y los servicios de Google y, al mismo tiempo, reducir los riesgos de exfiltración de datos, las solicitudes deben enviarse al intervalo de IPs virtuales (VIPs) restringidas, 199.36.153.4/30 (restricted.googleapis.com).

Para cada red VPC de un proyecto, sigue estos pasos para bloquear el tráfico saliente, excepto el tráfico al intervalo de VIP restringido:

  1. Configura reglas de cortafuegos para evitar que los datos salgan de la red de VPC:

    • Crea una regla de denegación de salida que bloquee todo el tráfico saliente.

    • Crea una regla de salida que permita el tráfico a 199.36.153.4/30 en el puerto TCP 443. Asegúrate de que tenga una prioridad antes que la regla de denegación de salida que acabas de crear. De esta forma, solo se permitirá la salida al intervalo de VIP restringido.

  2. Configura el DNS para que resuelva *.googleapis.com en restricted.googleapis.com.

  3. Configura el DNS con una asignación de registro A *.cloudfunctions.net al intervalo de IPs 199.36.153.4/30. Puedes hacerlo 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 Acceso privado de Google en la subred de tu conector de VPC.

En este punto, las solicitudes que se originan en la red de VPC:

  • no pueden salir de la red de VPC, lo que impide que salgan del perímetro de servicio.
  • Solo puede acceder a las APIs y los servicios de Google que comprueban los controles de servicio de VPC, lo que evita la exfiltración a través de las APIs de Google.

Conceder acceso a la cuenta de servicio de Cloud Build al perímetro de Controles de Servicio de VPC

Las funciones de Cloud Run usan Cloud Build para compilar el código fuente en un contenedor ejecutable. Para usar funciones de Cloud Run con Controles de Servicio de VPC, debes configurar la cuenta de servicio de Cloud Build para que tenga acceso a tu perímetro de servicio:

Buscar el nombre de la cuenta de servicio

  1. Usa la página Gestión de identidades y accesos de la Google Cloud consola 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 de proyectos.

  3. Buscar cloudbuild.gserviceaccount.com. La dirección de correo del formulario PROJECT_NUMBER@cloudbuild.gserviceaccount.com es el nombre de la cuenta de servicio.

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

Una vez que tengas el nombre de la cuenta de servicio, sigue la guía Limitar el acceso por usuario o cuenta de servicio para crear un nivel de acceso para la cuenta de servicio. A continuación, sigue los pasos de la sección Añadir un nivel de acceso a un perímetro ya creado para añadir el nivel de acceso al perímetro de servicio.

Implementar funciones que cumplan los Controles de Servicio de VPC

Una vez que hayas configurado Controles de Servicio de VPC para las funciones de Cloud Run, debes asegurarte de que todas las funciones desplegadas en el perímetro de servicio cumplan las políticas de la organización especificadas. En concreto, es posible que ocurra lo siguiente:

  • Todas las funciones deben usar un conector de acceso a VPC sin servidor. Para obtener más información, consulta el artículo Conectarse a una red de VPC.
  • Todas las funciones deben permitir solo el tráfico de fuentes internas. Para obtener más información, consulta Ajustes de entrada.
  • Todas las funciones deben dirigir todo el tráfico saliente a través de la red VPC. Para obtener más información, consulta Ajustes de salida.

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

Auditar las funciones actuales para asegurar que cumplen los Controles de Servicio de VPC

Después de configurar Controles de Servicio de VPC, las nuevas funciones creadas en proyectos dentro del perímetro de servicio se comprueban automáticamente para verificar que cumplen los requisitos. Sin embargo, para evitar que se interrumpan las cargas de trabajo actuales, las funciones que ya existen siguen funcionando y es posible que no cumplan las políticas de la organización.

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

Usar Controles de Servicio de VPC con funciones fuera de un perímetro

Las secciones anteriores se aplican al caso en el que despliegues funciones de Cloud Run en un perímetro de servicio de Controles de Servicio de VPC.

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

  1. Concede acceso a la cuenta de servicio de Cloud Build al perímetro de Controles de Servicio de VPC.
  2. Concede acceso al perímetro a la cuenta de servicio de tiempo de ejecución de la función. Para ello, puedes crear un nivel de acceso y añadirlo al perímetro de servicio o crear una política de entrada en el perímetro.
  3. Conecta la función a una red de VPC.
  4. Dirige todo el tráfico saliente de la función a través de la red de la VPC. Para obtener más información, consulta Ajustes de salida.

Una vez que hayas completado esta configuración, la función podrá acceder a los recursos protegidos por el perímetro.