Desarrollar aplicaciones en un entorno limitado de Google Cloud

Nuestros documentos suelen estar escritos para ayudarte a poner en marcha un producto o una función, pero es posible que algunos no funcionen correctamente si tu organización aplica restricciones de seguridad. Por ejemplo, tu empresa puede implementar algunas de las restricciones de seguridad del Cloud Foundation Toolkit, los Google Cloud planos técnicos de seguridad o crear sus propias restricciones.

Este artículo te ayuda a solucionar los errores de despliegue de aplicaciones que pueden aparecer en una organización que usa restricciones de seguridad.

Solucionar problemas de restricciones de seguridad

Tu equipo de operaciones de TI o de seguridad puede habilitar restricciones de seguridad mediante una política de organización. Estas restricciones limitan el uso de los recursos de tu organización.

Cuando hagas una solicitud a la API que devuelva un error, la respuesta de la API debería indicarte si se debe a infracciones de las políticas. En la respuesta se debe explicar la restricción que se infringe. Los siguientes pasos para solucionar problemas te ayudarán a determinar y entender si se produce una infracción:

  1. Revisa el mensaje de error de la respuesta de la API. ¿Puedes identificar qué restricción de seguridad infringe mi implementación?

    En el siguiente ejemplo se indica que el problema es la restricción sql.restrictPublicIp:

    Organization Policy check failure
    The external IP of this instance violates the constraints/sql.restrictPublicIp enforced
    
  2. Si entiendes la infracción de la política, actualiza la configuración de la implementación de recursos para que se ajuste a las restricciones.

    En el ejemplo anterior de restricción de direcciones IP públicas externas, configure su instancia de Cloud SQL para que use una dirección IP privada interna.

  3. Si no sabes por qué se aplica la restricción o qué debes hacer, ponte en contacto con tu equipo de seguridad para saber dónde se aplica la política en la jerarquía de tu organización y qué soluciones alternativas te proponen.

    Comprueba si hay plantillas de implementación, como plantillas de Terraform, compartidas en tu organización. Estas plantillas deben detallar cómo se ha configurado la infraestructura deGoogle Cloud y limitar la implementación de tu aplicación.

Problemas habituales con las restricciones de seguridad

Cuando implementas tus aplicaciones en Google Cloud, puede que se produzca un error como el del siguiente ejemplo:

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

En este ejemplo, no puedes configurar una instancia de Cloud SQL para que use una dirección IP pública externa. Se está aplicando una restricción de seguridad a partir de una política aplicada a tu entorno.

Las siguientes restricciones de seguridad habituales se pueden habilitar y detallar en una respuesta de error de la API a medida que desarrollas tus aplicaciones.

Compute Engine

Nombre de la restricción Por qué se implementa Solución alternativa sugerida
constraints/compute.disableNestedVirtualization Evita que se instale un hipervisor compatible con KVM en la VM. Este comportamiento podría suponer riesgos de seguridad si no se aplican los parches y la gestión adecuados. Configura tu VM para inhabilitar la virtualización anidada acelerada por hardware.

De forma predeterminada, está activada en todas las VMs de Compute Engine que se ejecutan en plataformas de CPU Intel Haswell o más recientes.
constraints/compute.requireShieldedVm Exige que las nuevas instancias de VM usen imágenes de disco blindadas con las opciones de arranque seguro, vTPM y supervisión de integridad habilitadas. Estas opciones evitan que se manipule la VM y que se acceda a los datos o se modifiquen. No habilites las VMs blindadas al crear una VM.

Para crear un clúster de GKE, debes habilitar los nodos de GKE protegidos.

Actualmente, Dataflow no admite trabajadores de máquinas virtuales protegidas.
constraints/compute.disableSerialPortAccess Elimina los vectores de seguridad para interactuar con una VM o ver la salida de diagnóstico que se podría usar para llevar a cabo un ataque. No habilites el acceso al puerto serie al crear una VM.
constraints/compute.disableGuestAttributesAccess Minimiza la cantidad de información sobre el host y la plataforma subyacentes que una aplicación maliciosa podría usar de forma inadecuada. No uses la API de Compute Engine para leer los atributos de invitado de tus VMs de Compute Engine.
constraints/compute.vmExternalIpAccess Evita que las aplicaciones se ejecuten con una dirección IP externa y que se pueda acceder a ellas desde Internet. Inhabilita el acceso a IPs externas de tus VMs. Solo puedes usar una dirección IP privada interna.

GKE puede usar clústeres privados sin direcciones IP públicas.

Actualmente, Dataprep y Dataflow no admiten direcciones IP privadas.

Red virtual y direcciones IP

Nombre de la restricción Por qué se implementa Solución alternativa sugerida
constraints/compute.skipDefaultNetworkCreation Asegúrate de que solo se puedan crear nubes privadas virtuales (VPC) gestionadas por la empresa y de que se apliquen reglas de tráfico de red o de filtrado. Conecta tus aplicaciones a las VPCs que ya tengas en tu organización. Las VPCs creadas automáticamente de forma predeterminada no se implementan en proyectos nuevos.
constraints/compute.restrictXpnProjectLienRemoval Evitar que se elimine accidentalmente una VPC compartida cuando los recursos de otros proyectos dependan de los servicios de red que proporciona. No intentes eliminar una VPC compartida. Asegúrate de que estás orientando la eliminación al recurso correcto.
constraints/sql.restrictPublicIp Evita que las instancias de Cloud SQL se ejecuten con una dirección IP externa y que se pueda acceder a ellas desde Internet. No configure su instancia de Cloud SQL para que use una dirección IP pública externa.

En su lugar, configure su instancia de Cloud SQL para que use una dirección IP privada interna.

Identidad y autenticación

Nombre de la restricción Por qué se implementa Solución alternativa sugerida
constraints/iam.disableServiceAccountKeyCreation Las claves de cuentas de servicio pueden suponer un riesgo para la seguridad si se exponen, por lo que debes evitar que se exporten. Autentícate con una alternativa más segura a las claves de cuentas de servicio.
constraints/storage.uniformBucketLevelAccess Minimiza el riesgo de que se apliquen permisos incorrectos o incoherentes a los contenedores de almacenamiento permitiendo que solo se use la gestión de identidades y accesos (IAM). Habilita el acceso uniforme a nivel de segmento para proteger tu segmento de Cloud Storage.
constraints/iam.allowedPolicyMemberDomains Restringe Google Cloud el acceso a los recursos solo a los dominios aprobados. Usa una cuenta de uno de los dominios aprobados. Hay otros problemas conocidos con esta restricción.

Ejemplos de errores de respuesta de la API

En el ejemplo anterior de restricción de direcciones IP públicas externas con Cloud SQL, una infracción de la política provoca que la API devuelva un error. En los siguientes ejemplos más detallados se muestra la respuesta de la API que indica qué restricción provoca que la solicitud falle. Consulta tus propias respuestas de la API para entender por qué fallan las implementaciones de aplicaciones.

Fallo de Cloud SQL con Google Cloud CLI:

$ gcloud alpha sql instances create mysql-node --project my-sql-project

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

Error de Cloud SQL con Terraform:

$ terraform apply plan.out

[...]
module.mysql-db.google_sql_database_instance.default: Creating...

Error: Error, failed to create instance backend01-db-1c81e0e3: googleapi:
Error 400: Invalid request: Organization Policy check failure: the external IP
of this instance violates the constraints/sql.restrictPublicIp enforced at the
123456789 project., invalid

Listar las políticas de organización aplicadas a tu proyecto

Es posible que tu proyecto herede políticas de nivel de carpeta u organización. En función de tus roles de acceso, es posible que no puedas ver qué políticas se aplican en los niveles superiores de tu jerarquía para saber dónde se aplica la restricción infringida.

Para ver las políticas o excepciones aplicadas a tu proyecto, usa el comando gcloud org-policies list:

gcloud org-policies list --project=PROJECT_ID

Sustituye PROJECT_ID por el proyecto cuyas políticas quieras ver.

Para obtener más información sobre una política aplicada, usa el comando gcloud org-policies describe. Proporciona el nombre de la política que quieres describir y el ID de tu proyecto con el parámetro --project:

gcloud org-policies describe POLICY_NAME \
  --project=PROJECT_ID

Haz los cambios siguientes:

  • POLICY_NAME: el nombre de la política de la organización

  • PROJECT_ID: el proyecto del que quieres ver la política aplicada

Siguientes pasos

Si no puedes determinar dónde se aplica una política y cómo eludir una restricción de seguridad, ponte en contacto con tu equipo de operaciones de TI o de seguridad. Cada organización aplica políticas y planos personalizados para su entorno.

Para obtener más información sobre todos los controles que se pueden aplicar en tu organización, consulta la lista de restricciones de políticas de la organización.