Crea una VPC compartida con Deployment Manager (instructivo)

En este instructivo, encontrarás orientación sobre el proceso de configuración de la VPC compartida mediante Deployment Manager, que proporciona una manera de aplicar reglas de seguridad de red estrictas en la organización para el acceso a los recursos de GCP.

Introducción

En organizaciones grandes, es posible que debas colocar departamentos o aplicaciones diferentes en proyectos diferentes para separar el presupuesto, el control de acceso, etcétera. Gracias a la VPC compartida, los administradores de la Organización pueden conceder permisos a varios proyectos para usar una sola red de VPC compartida y los recursos de red correspondientes.

Gracias a la VPC compartida, como administrador de la organización, puedes permitir que los administradores de red y seguridad de tu organización administren una red de VPC de espacios IP RFC 1918 (y características relacionadas como VPN o reglas de firewall) que los proyectos asociados puedan usar. Los administradores de proyectos asociados pueden crear instancias de máquina virtual (VM) en el espacio de red de VPC compartida. Puedes aplicar y poner en práctica políticas coherentes en toda la organización.

Debido a que la VPC compartida se usa en organizaciones grandes o en organizaciones con reglas de seguridad estrictas, es importante reproducir con facilidad una configuración de VPC compartida. Para ello, puedes usar Deployment Manager, una herramienta de infraestructura como código (IaC).

Acerca de cómo ejecutar el instructivo

En este instructivo, se da por hecho que estás familiarizado con los recursos de la organización en Google Cloud Platform (GCP) y que eres el administrador de un recurso de esta. Comprender las VPC compartidas y Deployment Manager te ayudará a seguir este instructivo. Durante toda su duración, la palabra implementación se refiere a una implementación de Deployment Manager.

Para hacerlo más simple, en este instructivo se usa un solo usuario de IAM, tu identidad existente como administrador de recursos de la organización. (Si aún no tienes un recurso de organización, puedes encontrar las instrucciones para crear uno en la sección Antes de comenzar). En una empresa, tres personas suelen participar en la configuración de la situación que se ilustra en este instructivo: un administrador de recursos de la organización, un administrador de red (que administra la VPC compartida) y un usuario de la VPC compartida.

Arquitectura de implementación

En el siguiente diagrama, se muestra la arquitectura de esta solución.

Arquitectura de VPC compartida

En este instructivo, crearás tres proyectos a partir de este diagrama:

  • Un administrador de recursos de la organización (en este caso suponemos que eres tú) administra el proyecto principal de Deployment Manager, y este se usa para crear los demás proyectos y la configuración de la VPC compartida.
  • Los administradores de red administran el proyecto host que aloja la VPC compartida. Toda la configuración de la red se realizará en este proyecto.
  • Los usuarios de la VPC compartida administran el proyecto de servicio. En este proyecto, se pueden crear recursos en la VPC compartida desde el proyecto host.

Objetivos

  • Crear y configurar el proyecto principal de Deployment Manager.
  • Crear el host y los proyectos de servicio con Deployment Manager.
  • Configurar la característica de VPC compartida.
  • Configurar la VPC y algunas subredes en el proyecto host.
  • Verificar que la VPC pueda usarse en el proyecto de servicio.

Costos

En este instructivo, se usan componentes facturables de GCP, incluidos los siguientes:

  • Compute Engine

Usa la Calculadora de precios para generar una estimación de los costos, según el uso previsto.

Antes de comenzar

Este instructivo se establece en el contexto de una organización de GCP. Si no tienes uno, créalo. Para obtener información, consulta Crea y administra organizaciones.

Más adelante en este instructivo, crearás dos proyectos de GCP con una implementación (es decir, una implementación de Deployment Manager). Crearás esta implementación en un proyecto dedicado con una configuración específica. Los pasos que se muestran a continuación te orientarán a través de la configuración inicial de este proyecto y su configuración.

Cómo crear el proyecto principal para Deployment Manager

  1. Abre Cloud Shell.

    Abra Cloud Shell

  2. Si aún no lo tienes, crea una cuenta de facturación. Para obtener información, consulta Crea una cuenta de facturación.

  3. Crea un proyecto nuevo en tu organización y configura una cuenta de facturación. Debes elegir un ID único para este proyecto. Por ejemplo, puedes usar un nombre como [YOUR_NAME]-[DATE]-dm-home.

    gcloud

    1. Muestra la lista de organizaciones y toma nota del ID de la organización:

      gcloud organizations list
    2. Configura variables de entorno para los valores que usarás reiteradas veces en este instructivo. Reemplaza [ORG_ID] con el valor que copiaste en el paso anterior y reemplaza [DM_HOME_PROJECT_ID] con el ID del proyecto de la página de inicio.

      export ORG_ID=[ORG_ID]
      export DM_HOME_PROJECT=[DM_HOME_PROJECT_ID]
    3. Crea el proyecto nuevo:

      gcloud projects create $DM_HOME_PROJECT \
          --organization=$ORG_ID
    4. Obtén una lista de ID de facturación para el proyecto y toma nota del ID de facturación:

      gcloud beta billing accounts list
    5. Si tienes acceso a varias cuentas de facturación, revisa las políticas internas para cada una de ellas y elige la adecuada.

    6. Configura una variable de entorno para el ID de la cuenta de facturación que obtuviste en el paso anterior. Reemplaza [BILLING_ACCOUNT_ID] con el ID de facturación que obtuviste en el paso anterior.

      export BILLING_ACCOUNT_ID=[BILLING_ACCOUNT_ID]
    7. Habilita la facturación para el proyecto nuevo:

      gcloud beta billing projects link $DM_HOME_PROJECT \
          --billing-account=$BILLING_ACCOUNT_ID

    Console

    1. En Cloud Console, abre la página Administrar recursos.

      [Ir a la página Administrar recursos](https://console.cloud.google.com/cloud-resource-manager){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }

    2. En la esquina superior izquierda de la lista desplegable Organización, selecciona tu organización.

    3. Haz clic en Crear proyecto y luego ingresa el ID que elijas como nombre de proyecto.

    4. Si tienes acceso a varias cuentas de facturación, selecciona la que desees usar a fin de seguir este instructivo (revisa las políticas internas para cada una de ellas) en la sección Cuenta de facturación.

    5. En la sección Organización, confirma que la organización esté seleccionada.

    6. Haz clic en Crear.

  4. Habilita las API necesarias para el resto del instructivo.

    gcloud

    gcloud services enable cloudbilling.googleapis.com \
        deploymentmanager.googleapis.com \
        cloudresourcemanager.googleapis.com \
        iam.googleapis.com \
        servicemanagement.googleapis.com \
        --project $DM_HOME_PROJECT

    Console

    1. Asegúrate de haber seleccionado tu proyecto nuevo en Cloud Console. Si es necesario, cambia al proyecto nuevo en la página Administrar recursos.

      [Ve a la página Administrar recursos](https://console.cloud.google.com/cloud-resource-manager){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }

    2. Ve a la página Biblioteca de API.

      [Ve a la página Biblioteca de API](https://console.cloud.google.com/apis/library){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }

    3. Habilita las API a continuación:

      • API de Google Cloud Billing
      • API de Google Identity and Access Management (IAM)
      • API de Google Service Management
      • API de Google Cloud Deployment Manager V2
      • API de Google Cloud Resource Manager

Cómo configurar las políticas de recursos de la organización

La VPC compartida es una característica al nivel de la organización. Como tal, requiere que se configuren algunas políticas al nivel de la organización: la cuenta de servicio que usa Deployment Manager necesita funciones específicas en el nivel de la organización.

gcloud


  1. Configura variables de entorno para el número del proyecto y el nombre de la cuenta de servicio. Los siguientes comandos leen los valores del proyecto y luego los usan para configurar las variables de entorno.

    export PROJECT_NUMBER=$(gcloud projects describe $DM_HOME_PROJECT \
        --format="value(projectNumber)")
    export DM_SA=${PROJECT_NUMBER}@cloudservices.gserviceaccount.com
  2. Agrega políticas de IAM:

    gcloud organizations add-iam-policy-binding $ORG_ID \
        --role=roles/resourcemanager.projectCreator \
        --member="serviceAccount:${DM_SA}"
    gcloud organizations add-iam-policy-binding $ORG_ID \
        --role=roles/billing.user \
        --member="serviceAccount:${DM_SA}"
    gcloud organizations add-iam-policy-binding $ORG_ID \
        --role=roles/compute.xpnAdmin \
        --member="serviceAccount:${DM_SA}"

Console


  1. En el proyecto, ve a IAM y administración > Configuración.

  2. Anota el número del proyecto.

  3. Ve a IAM y administración > IAM.

  4. Cambia a tu organización en el menú de selección de proyectos en la parte superior.

  5. Haz clic en Agregar en la parte superior de la ventana.

  6. Agrega las funciones a continuación a la cuenta de servicio de Deployment Manager. El nombre de esta cuenta de servicio es [PROJECT_NUMBER]@cloudservices.gserviceaccount.com, en el que [PROJECT_NUMBER] es el valor que anotaste antes.

    • Administrador de recursos > Creador de proyectos
    • Facturación > Usuario de la cuenta de facturación
    • Compute Engine > Administrador de VPC compartida de Compute

Cómo crear los proyectos y la configuración de la VPC compartida

Ahora estás listo para crear el proyecto host y de servicio con Deployment Manager. Si usaste Cloud Console, de ahora en más debes cambiar a Cloud Shell.

  1. Si se agotó el tiempo de espera de tu sesión o la cerraste, abre una sesión nueva de Cloud Shell.

    ABRIR CLOUD SHELL

  2. En Cloud Shell, clona el siguiente repositorio de Git:

    git clone https://github.com/GoogleCloudPlatform/deploymentmanager-samples.git
  3. Navega hacia la muestra project_creation en el repositorio que clonaste:

    cd $HOME/deploymentmanager-samples/examples/v2/project_creation
  4. Abre el archivo config_shared_vpc.yaml:

    nano config_shared_vpc.yaml
  5. Configura los valores que se muestran en la siguiente tabla.

    Configuración Descripción
    HOST_PROJECT Un nombre único para el proyecto host. El proyecto host es donde se creará y se administrará la VPC. Ten en cuenta que también debes cambiar este valor en la última línea del archivo para obtener un total de dos reemplazos.

    Ejemplo:

    [YOUR_NAME]-[DATE]-host
    SERVICE_PROJECT Un nombre único para el proyecto de servicio. El proyecto de servicio es donde se usará la VPC del proyecto host.

    Ejemplo:

    [YOUR_NAME]-[DATE]-svc
    ORG_ID El ID de tu organización. Debes tener este valor de los pasos anteriores. Si no lo tienes, puedes obtenerlo mediante la ejecución del siguiente comando:
    
    gcloud organizations list

    Usa comillas alrededor del ID de la organización para que no se considere como un valor numérico en el archivo YAML.

    BILLING_ACCOUNT_ID El ID de tu cuenta de facturación. Debes tener este valor desde los pasos anteriores. Si no lo tienes, puedes obtenerlo mediante la ejecución del siguiente comando:
    
    gcloud beta billing accounts list
    EMAIL Tu dirección de correo electrónico. Ten en cuenta que hay un total de cinco lugares donde debes configurar la dirección de correo electrónico.
  6. Guarda el archivo y sal de nano con la siguiente secuencia de teclas:

    ^O <Enter> ^X

  7. Si usaste Cloud Console a fin de crear el proyecto principal de Deployment Manager, configura una variable de entorno para el ID de tu proyecto principal:

    export DM_HOME_PROJECT=[DM_HOME_PROJECT]
  8. Crea una vista previa de la implementación:

    gcloud deployment-manager deployments \
        create shared-vpc-projects \
        --config config_shared_vpc.yaml --preview \
        --project $DM_HOME_PROJECT

    La creación de una vista previa de una implementación de Deployment Manager te permite ver qué recursos se crearán, se actualizarán o se borrarán.

  9. Aplica la vista previa de la implementación:

    gcloud deployment-manager deployments \
        update shared-vpc-projects \
        --project $DM_HOME_PROJECT
  10. Visualiza tu implementación en Cloud Console. Si es necesario, selecciona el proyecto principal de Deployment Manager en el menú de selección de proyectos en la parte superior.

    IR A DEPLOYMENT MANAGER

Después de unos minutos, se completa la implementación y se crean los dos proyectos nuevos. Aunque el proyecto de servicio ya está vinculado al proyecto host, aún no se crea la VPC que se compartirá.

Solución de problemas

Si se produjeron problemas durante la creación de la vista previa, puedes borrar la implementación (todavía no se han creado recursos) y reintentar el proceso.

Sin embargo, si se creó la vista previa, pero la implementación tuvo errores, es posible que no puedas crear esa implementación de nuevo. Los proyectos no se pueden borrar y crear de nuevo de forma inmediata; se marcan para su eliminación durante un período de seguridad de 30 días. Si necesitas volver a crear la implementación, cambia los valores de la configuración de HOST_PROJECT y SERVICE_PROJECT en el archivo config_shared_vpc.yaml antes de volver a intentarlo.

Crea la VPC

Ahora usarás otra plantilla de Deployment Manager para crear la VPC en el proyecto host. Esto suele ser una operación que un administrador de red llevaría a cabo. La VPC estará disponible para su uso en el proyecto de servicio de inmediato debido a que la configuración de la VPC compartida ya se configuró.

Implementa la configuración de red

  1. Configura las variables de entorno para los nombres del proyecto host y del proyecto de servicio que estableciste en el archivo config_shared_vpc.yaml:

    export HOST_PROJECT=[HOST_PROJECT]
    export SERVICE_PROJECT=[SERVICE_PROJECT]
  2. Navega a la muestra de network en el repositorio de Git:

    cd $HOME/deploymentmanager-samples/community/network/

    En el archivo config.yaml, puedes ver un recurso de tipo network.py con tres subredes con sus propios CIDR. Puedes probar cambiar o duplicar este recurso para adaptarlo a tus necesidades.

  3. Crea una vista previa de la implementación. Esta implementación se crea en el proyecto host.

    gcloud deployment-manager deployments create host-network \
        --config config.yaml --preview \
        --project $HOST_PROJECT
  4. Aplica la vista previa de la implementación.

    gcloud deployment-manager deployments update host-network \
        --project $HOST_PROJECT

Verificación

Ahora puedes verificar el acceso a la red del proyecto host desde el proyecto de servicio. Puedes acceder a esta red porque tienes la función roles/compute.networkUser en el proyecto host. Para una implementación de producción, debes asignar esta función a cada usuario que vaya a usar la VPC compartida.

  1. Crea una instancia de prueba en el proyecto de servicio con una subred del proyecto host.

    gcloud

    gcloud compute instances create instance-test \
        --zone us-east1-b \
        --subnet \
        "projects/$HOST_PROJECT/regions/us-east1/subnetworks/host-network-us-east1" \
        --project $SERVICE_PROJECT

    Console


    1. Selecciona el proyecto de servicio.

      [IR A LA PÁGINA ADMINISTRAR RECURSOS](https://console.cloud.google.com/cloud-resource-manager){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }
    2. Ve a la página Instancias de VM.

      [IR A LA PÁGINA INSTANCIAS DE VM](https://console.cloud.google.com/compute/instances){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }
    3. Haz clic en Crear.
    4. En la sección Nombre, escribe `instance-test`.
    5. Asegúrate de que `us-east1-b` esté seleccionado en la sección Zona.
    6. Haz clic en Administración, seguridad, discos, herramientas de redes, un solo inquilino.
    7. Haz clic en la pestaña Herramientas de redes.
    8. Haz clic en la interfaz de red existente.
    9. Elige la opción Networks shared with me.
    10. ![Sección “Redes compartidas conmigo” de la página Crea una instancia](/solutions/images/shared-vpc-with-deployment-manager-networks-shared-with-me.png){: class="screenshot" width="50%"}
    11. Haz clic en Listo en la parte inferior de la sección Interfaz de red.
    12. Haz clic en Crear.

    Espera uno o dos minutos para que se inicie la instancia. Cuando la instancia esté lista, aparecerá en la página VM instances con un ícono de estado verde.

  2. Verifica que la instancia use la VPC compartida.

    gcloud

    gcloud compute instances describe instance-test \
        --zone us-east1-b --project $SERVICE_PROJECT \
        --format="value(networkInterfaces[0].network)"

    El resultado de este comando es el vínculo a la VPC que usa la instancia que creaste. En este vínculo, puedes ver que la VPC es del proyecto host, incluso si la instancia se creó en el proyecto de servicio (como resultado del uso de la marca --project en el comando).

    Console


    1. Selecciona la instancia en la lista de instancias.
    2. Verifica que use la red desde el proyecto host.

      ![Lista de interfaces de red que muestran “host-network-us-east1”](/solutions/images/shared-vpc-with-deployment-manager-verify-network.png){: class="screenshot"}

Realiza una limpieza

Una vez que termines este instructivo, podrás limpiar los recursos que creaste en Google Cloud para que no consuman la cuota y no se te cobre por ellos en el futuro. En las siguientes secciones, se describe cómo borrar o desactivar estos recursos.

  1. En Cloud Shell, borra la instancia de prueba:

    gcloud compute instances delete instance-test \
        --project $SERVICE_PROJECT \
        --zone us-east1-b
  2. Si configuraste la protección para quitar del proyecto, quítala:

    gcloud beta resource-manager org-policies disable-enforce \
        --organization $ORG_ID compute.restrictXpnProjectLienRemoval
  3. Borra la implementación host-network:

    gcloud deployment-manager deployments delete host-network \
        --project $HOST_PROJECT
  4. Borra la implementación shared-vpc-projects:

    gcloud deployment-manager deployments \
        delete shared-vpc-projects \
        --project $DM_HOME_PROJECT
  5. Borra el proyecto principal:

    gcloud projects delete $DM_HOME_PROJECT

¿Qué sigue?