Desarrolla aplicaciones en un entorno de Google Cloud limitado

Por lo general, nuestros documentos están escritos para ayudarte a poner en funcionamiento un producto o una función, pero es posible que algunos no funcionen de forma correcta si la organización aplica restricciones de seguridad. Por ejemplo, tu empresa podría implementar algunas de las restricciones de seguridad de Cloud Foundation Toolkit, los planos de seguridad de Google Cloud. o crear los tuyos.

En este artículo, se explica cómo solucionar errores de implementación de aplicaciones que puedes ver en una organización que usa restricciones de seguridad.

Soluciona problemas de restricciones de seguridad

El equipo de seguridad o operaciones de TI puede habilitar las restricciones de seguridad mediante la política de la organización. Estas restricciones restringen cómo se pueden usar los recursos de tu organización.

Cuando realizas una solicitud a la API que muestra un error, la respuesta de la API debe indicarte si se debe a incumplimientos de política. En la respuesta, se debe explicar la restricción que se infringe. Los siguientes pasos de solución de problemas te ayudan a determinar y comprender si se produce un incumplimiento:

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

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

    Organization Policy check failure
    The external IP of this instance violates the constraints/sql.restrictPublicIp enforced
    
  2. Si comprendes el incumplimiento de política, actualiza la configuración de implementación de recursos para que funcione dentro de las restricciones.

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

  3. Si no estás seguro de por qué se aplica la restricción o qué hacer, trabaja con tu equipo de seguridad para comprender dónde se aplica la política en la jerarquía de la organización y las soluciones alternativas sugeridas.

    Verifica si las plantillas de implementación, como las plantillas de Terraform, se comparten en la organización. Estas plantillas deben detallar cómo se configuró la infraestructura de Google Cloud y limitar la implementación de tu aplicación.

Problemas comunes de restricciones de seguridad

Cuando implementas tus aplicaciones en Google Cloud, puedes encontrar un error como el 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 usar una dirección IP pública externa. Se aplica una restricción de seguridad desde una política aplicada al entorno.

Las siguientes restricciones de seguridad comunes 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 dentro de la VM. Este comportamiento puede generar riesgos de seguridad sin la aplicación de parches y la administración adecuadas. Configura tu VM para inhabilitar la virtualización anidada acelerada por hardware.

De forma predeterminada, está activada para todas las VM de Compute Engine que se ejecutan en Intel Haswell o en plataformas de CPU más recientes.
constraints/compute.requireShieldedVm Requiere que las instancias de VM nuevas usen imágenes de discos protegidos con las opciones de Inicio seguro, vTPM y Supervisión de integridad habilitadas. Estas opciones evitan que la VM se altere y que se acceda a los datos o se modifiquen. No habilites las VM protegidas cuando crees una VM.

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

Por el momento, Dataflow no admite trabajadores de VM protegidos.
constraints/compute.disableSerialPortAccess Quita los vectores de seguridad para interactuar con una VM o ver el resultado de diagnóstico que se podría usar para formar un ataque. No habilites el acceso al puerto en serie cuando crees una VM.
constraints/compute.disableGuestAttributesAccess Minimiza la cantidad de información sobre el host y la plataforma subyacentes que una app maliciosa podría abusar. No uses la API de Compute Engine para leer los atributos de invitado de tus VM de Compute Engine.
constraints/compute.vmExternalIpAccess Impide que las aplicaciones se ejecuten con una dirección IP externa y se pueda acceder a ellas desde Internet. Inhabilita el acceso de IP externas para las VM. Solo puedes usar una dirección IP privada interna.

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

Por el momento, 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 instancias de nube privada virtual (VPC) administrada por la empresa y que se apliquen reglas de filtrado o el tráfico de red. Conecta las aplicaciones a las VPC existentes en tu organización. Las VPC predeterminadas creadas automáticamente no se implementan en proyectos nuevos.
constraints/compute.restrictXpnProjectLienRemoval Evita que una VPC compartida se borre de forma accidental cuando los recursos de otros proyectos dependen de los servicios de red que proporciona. No intentes borrar una VPC compartida. Asegúrate de elegir el recurso correcto para la eliminación.
constraints/sql.restrictPublicIp Impide que las instancias de Cloud SQL se ejecuten con una dirección IP externa y se pueda acceder a ellas desde Internet. No configures la instancia de Cloud SQL para que use una dirección IP pública externa.

En su lugar, configura tu 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 las cuentas de servicio pueden representar un riesgo de seguridad si se exponen, por lo que debes evitar que se exporten. Usa otra forma de autenticación en lugar de una cuenta de servicio.
constraints/storage.uniformBucketLevelAccess Permitir que se use la administración de identidades y accesos (IAM) solo para aplicar el riesgo de permisos incorrectos o incoherentes a los buckets de almacenamiento. Habilita el acceso uniforme a nivel de bucket para proteger tu bucket de Cloud Storage.
constraints/iam.allowedPolicyMemberDomains Restringe el acceso de los recursos de Google Cloud solo a los dominios aprobados Debe usar una cuenta dentro de uno de los dominios aprobados. Existen problemas conocidos adicionales para esta restricción.

Ejemplos de errores de respuesta de API

En el ejemplo anterior de restricción de direcciones IP públicas externas con Cloud SQL, un incumplimiento de política hace que la API muestre un error. En los siguientes ejemplos más detallados, se muestra la respuesta de la API que te indica qué restricción hace que la solicitud falle. Revisa tus propias respuestas de la API para comprender por qué fallan las implementaciones de la aplicación.

Falla de Cloud SQL con la herramienta de línea de comandos de gcloud:

$ 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.

Falla 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

Obtén una lista de las políticas de la organización que se aplicaron a tu proyecto

Es posible que tu proyecto herede políticas de la organización o carpeta. Según las funciones de acceso, es posible que no tengas visibilidad sobre qué políticas se aplican en los niveles superiores de la jerarquía para ver dónde se aplica la restricción infractora.

Para ver las políticas o excepciones aplicadas a tu proyecto, usa el comando gcloud alpha resource-manager org-policies list y especifica el ID del proyecto con el parámetro --project:

gcloud alpha resource-manager org-policies list --project <project-id>

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

gcloud alpha resource-manager org-policies describe <policy-name> --project <project-id>

¿Qué sigue?

Si no puedes determinar dónde se aplica una política y cómo evitar una restricción de seguridad, comunícate con tu equipo de operaciones o seguridad de TI. Cada organización aplica políticas y planos personalizados a su entorno.

Para obtener más información sobre todos los controles que podrían aplicarse en tu organización, consulta la lista de restricciones de la política de la organización.