Aprovisiona la VPC compartida

La VPC compartida te permite exportar subredes desde una red de VPC en un proyecto host a otros proyectos de servicio en la misma organización. Las instancias en los proyectos de servicio pueden tener conexiones de red en las subredes compartidas del proyecto host. En esta página, se describe cómo configurar y usar la VPC compartida, incluida la preparación administrativa necesaria para la organización.

Cuotas, límites y recursos aptos

Antes de comenzar, asegúrate de consultar la Descripción general de la VPC compartida y la Descripción general de IAM. En particular, haz lo siguiente:

Prepara tu organización

Administradores y la IAM

Preparar la organización, configurar proyectos de host de VPC compartida y usar redes de VPC compartida implica un mínimo de tres funciones distintas de administración de identidades y accesos (IAM). Para obtener más detalles sobre cada función y la información sobre las funciones opcionales, consulta la sección IAM y administradores de la descripción general de la VPC compartida.

Políticas de la organización para la VPC compartida

Las restricciones de la política de la organización pueden proteger los recursos de VPC compartida a nivel del proyecto, de la carpeta o de la organización. En las siguientes secciones, se describe cada política.

Evita la eliminación accidental de proyectos host

La eliminación accidental de un proyecto host provocaría interrupciones en todos los proyectos de servicio asociados a él. Cuando un proyecto se configura para ser un proyecto host de VPC compartida, se le coloca un bloqueo especial, llamado retención. Siempre que la retención esté presente, evita que el proyecto se borre de forma accidental. La retención se quita de forma automática del proyecto host cuando ya no se configura para VPC compartida.

Un usuario con la función orgpolicy.policyAdmin puede definir una restricción de política a nivel de la organización (constraints/compute.restrictXpnProjectLienRemoval) que limite la eliminación de retenciones solo para las siguientes funciones:

  • Usuarios con roles/owner o roles/resourcemanager.lienModifier a nivel de la organización
  • Usuario con funciones personalizadas que incluyan los permisos resourcemanager.projects.get y resourcemanager.projects.updateLiens a nivel de la organización

Esto evita que un propietario del proyecto que no tiene las funciones roles/owner o resourcemanager.lienModifier a nivel de la organización pueda borrar por accidente un proyecto host de VPC compartida. Para obtener más información acerca de los permisos asociados con la función resourcemanager.lienModifier, consulta Establece una retención en un proyecto en la documentación de Resource Manager.

Debido a que las políticas de la organización se aplican a todos los proyectos de la organización, solo debes seguir estos pasos una vez para restringir la eliminación de la retención.

  1. Autentícate en gcloud como administrador de la organización o miembro de IAM con la función orgpolicy.policyAdmin. Reemplaza ORG_ADMIN por el nombre de un administrador de la organización:

    gcloud auth login ORG_ADMIN
    
  2. Para determinar el número de ID de la organización, consulta el resultado de este comando.

    gcloud organizations list
    
  3. Ejecuta este comando a fin de aplicar la política compute.restrictXpnProjectLienRemoval para la organización. Reemplaza ORG_ID por el número que definiste en el paso anterior.

    gcloud beta resource-manager org-policies enable-enforce \
        --organization ORG_ID compute.restrictXpnProjectLienRemoval
    
  4. Sal de gcloud si terminaste de realizar tareas como administrador de la organización para proteger la cuenta.

    gcloud auth revoke ORG_ADMIN
    

Restringe los proyectos vinculados con el proyecto host

De forma predeterminada, un administrador de VPC compartida puede vincular un proyecto que no sea host con cualquier proyecto host en la misma organización. Un administrador de políticas de la organización puede limitar el conjunto de proyectos host con los que se puede vincular un proyecto que no sea host o proyectos que no sean host en una organización o carpeta. Para obtener más información, consulta la restricción constraints/compute.restrictSharedVpcHostProjects.

Limita las subredes del proyecto host que puede usar un proyecto de servicio

De forma predeterminada, después de configurar la VPC compartida, los miembros de IAM en proyectos de servicio pueden usar cualquier subred del proyecto host si tienen los permisos de IAM adecuados. Además de administrar los permisos del usuario individuales, un administrador de políticas de la organización puede establecer una política para definir el conjunto de subredes a los que puede acceder un proyecto determinado o los proyectos de una organización o una carpeta. Para obtener más información, consulta la restricción constraints/compute.restrictSharedVpcSubnetworks.

Nombra administradores de VPC compartida

Un administrador de organización puede otorgar a uno o más miembros de IAM las funciones de administrador de VPC compartida y administrador de IAM de proyectos. Si un usuario tiene la función de administrador de VPC compartida a nivel de carpeta, también necesita la función de visualizador de red de Compute o alguna otra función que tenga el permiso compute.subnetworks.list para administrar la VPC compartida desde Google Cloud Console Si el administrador de la VPC compartida no tiene este permiso, puede usar la herramienta de línea de comandos de gcloud o la API para administrar la VPC compartida.

La función de administrador de IAM del proyecto otorga permiso a los administradores de VPC compartida para compartir todas las subredes existentes y futuras, no solo las subredes individuales. Este otorgamiento crea una vinculación a nivel de organización o de carpeta, no a nivel de proyecto. Por lo tanto, los miembros de IAM deben definirse en la organización, no solo en un proyecto.

Console

Para otorgar la función de administrador de VPC compartida a nivel de organización, haz lo siguiente:

  1. Accede a Google Cloud Console como administrador de la organización y, luego, ve a la página de IAM.
    Ir a la página de IAM
  2. En el menú del proyecto, selecciona la organización.
    Si seleccionas un proyecto, no verás las entradas correctas en el menú Funciones.
  3. Haz clic en Agregar.
  4. Ingresa las direcciones de correo electrónico de los Miembros.
  5. En el menú desplegable Funciones, selecciona Compute Engine > Administrador de VPC compartida de Compute.

  6. Haz clic en Agregar otra función.

  7. En el menú desplegable Funciones, selecciona Administrador de recursos > Administrador de IAM del proyecto.

  8. Haz clic en Guardar.

Para otorgar la función de administrador de VPC compartida a nivel de carpeta, haz lo siguiente:

  1. Accede a Google Cloud Console como administrador de la organización y, luego, ve a la página de IAM.
    Ir a la página de IAM
  2. En el menú del proyecto, selecciona la carpeta.
    Si seleccionas una organización o un proyecto, no verás las opciones correctas.
  3. En la página Miembros, haz clic en Agregar.
  4. Ingresa las direcciones de correo electrónico de los Miembros nuevos.
  5. En Seleccionar una función, selecciona Compute Engine > Administrador de VPC compartida de Compute.
  6. Haz clic en Agregar otra función.
  7. En el menú desplegable Funciones, selecciona Administrador de recursos > Administrador de IAM del proyecto.
  8. Haz clic en Agregar otra función.
  9. En el menú desplegable Funciones, selecciona Administrador de recursos > Visualizador de red de Compute.
  10. Haz clic en Guardar.

gcloud

  1. Autentícate en gcloud como administrador de la organización. Reemplaza ORG_ADMIN por el nombre de un administrador de la organización:

    gcloud auth login ORG_ADMIN
    
  2. Para determinar el número de ID de la organización, consulta el resultado de este comando.

    gcloud organizations list
    
  3. Si deseas asignar la función de administrador de VPC compartida a nivel de organización, haz lo siguiente:

    1. Aplica la función de administrador de VPC compartida a un miembro de IAM existente. Reemplaza ORG_ID por el número de ID de la organización del paso anterior y EMAIL_ADDRESS por la dirección de correo electrónico del usuario al que le otorgas la función de administrador de la VPC compartida.

      gcloud organizations add-iam-policy-binding ORG_ID \
        --member='user:EMAIL_ADDRESS' \
        --role="roles/compute.xpnAdmin"
      
      gcloud organizations add-iam-policy-binding ORG_ID \
        --member='user:EMAIL_ADDRESS' \
        --role="roles/resourcemanager.projectIamAdmin"
      
  4. Si deseas asignar la función de administrador de VPC compartida a nivel de carpeta, haz lo siguiente:

    1. Para determinar el ID de la carpeta, consulta el resultado de este comando.

      gcloud beta resource-manager folders list --organization=ORG_ID
      
    2. Aplica la función de administrador de VPC compartida a un miembro de IAM existente. Reemplaza ORG_ID por el número de ID de la organización del paso anterior y EMAIL_ADDRESS por la dirección de correo electrónico del usuario al que le otorgas la función de administrador de la VPC compartida.

      gcloud beta resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/compute.xpnAdmin"
      
      gcloud beta resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/resourcemanager.projectIamAdmin"
      
      gcloud beta resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/compute.networkViewer"
      
  5. Revoca el token de la cuenta del administrador de la organización en la herramienta de línea de comandos de gcloud cuando termines de realizar tareas para proteger tu cuenta.

    gcloud auth revoke ORG_ADMIN
    

API

  • Para asignar la función de administrador de VPC compartida a nivel de organización, usa el siguiente procedimiento:

    1. Determina el número de ID de la organización.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations
      
    2. Describe y, luego, registra los detalles de la política de la organización existente.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORG_ID:getIamPolicy
      

      Reemplaza ORG_ID por el ID de tu organización.

    3. Asigna la función de administrador de VPC compartida.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORG_ID:setIamPolicy
      {
        "bindings": [
          ...copy existing bindings
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.xpnAdmin"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/resourcemanager.projectIamAdmin"
          }
        ],
        "etag": "ETAG",
        "version": 1,
        ...other exisitng policy details
      }
      

      Reemplaza los marcadores de posición por valores válidos:

      • ORG_ID es el ID de la organización que contiene el usuario al que le otorgas la función de administrador de VPC compartida.
      • EMAIL_ADDRESS es la dirección de correo electrónico del usuario.
      • ETAG es un identificador único que obtuviste cuando describiste la política existente. Evita las colisiones si se envían varias solicitudes de actualizaciones al mismo tiempo.

      Para obtener más información, consulta el método organizations.setIamPolicy.

  • Para asignar la función de administrador de VPC compartida a nivel de carpeta, usa la siguiente solicitud:

    1. Determina el número de ID de la organización.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations
      
    2. Busca el ID de la carpeta.

      GET https://cloudresourcemanager.googleapis.com/v2/folders?parent=organizations/ORG_ID
      

      Reemplaza ORG_ID por el ID de tu organización.

    3. Describe y, luego, registra los detalles de la política de la carpeta existente.

      POST https://cloudresourcemanager.googleapis.com/v2/folders/FOLDER_ID:getIamPolicy
      

      Reemplaza FOLDER_ID por el ID de tu carpeta.

    4. Asigna la función de administrador de VPC compartida.

      POST https://cloudresourcemanager.googleapis.com/v1/organizations/FOLDER_ID:setIamPolicy
      {
        "bindings": [
          ...copy existing bindings
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.xpnAdmin"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/resourcemanager.projectIamAdmin"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.networkViewer"
          }
        ],
        "etag": "ETAG",
        "version": 1,
        ...other existing policy details
      }
      

      Reemplaza los marcadores de posición por valores válidos:

      • FOLDER_ID es el ID de la organización que contiene el usuario al que le otorgas la función de administrador de VPC compartida.
      • EMAIL_ADDRESS es la dirección de correo electrónico del usuario.
      • ETAG es un identificador único que obtuviste cuando describiste la política existente. Evita las colisiones si se envían varias solicitudes de actualizaciones al mismo tiempo.

      Para obtener más información, consulta el método folders.setIamPolicy.

Configura una VPC compartida

Solo el administrador de VPC compartida puede realizar las tareas de esta sección.

Habilita un proyecto host

Dentro de una organización, los administradores de VPC compartida pueden designar proyectos como proyectos host de VPC compartida, sujetos a cuotas y límites, mediante este procedimiento. Los administradores de VPC compartida también pueden crear y borrar proyectos si tienen la función de creador de proyectos y de función de eliminador de proyectos (roles/resourcemanager.projectCreator y roles/resourcemanager.projectDeleter) en tu organización.

Cuando habilitas un proyecto host, los recursos de red del proyecto no se comparten de forma automática con los proyectos de servicio. Debes vincular proyectos de servicio al proyecto host para compartir las redes y subredes seleccionadas con los proyectos de servicio.

Console

  1. Ve a la página VPC compartida en Google Cloud Console.
    Ir a la página VPC compartida
  2. Accede como un administrador de VPC compartida.
  3. Selecciona el proyecto que deseas habilitar como proyecto host de VPC compartida en el selector de proyectos.
  4. Haz clic en Configurar VPC compartida.
  5. En la página siguiente, haz clic en Guardar y continuar, en Habilitar proyecto host.
  6. En Seleccionar subredes, realiza una de las siguientes acciones:
    1. Haz clic en Compartir todas las subredes (permisos a nivel de proyecto) si necesitas compartir todas las subredes actuales y futuras en las redes de VPC del proyecto host con proyectos de servicio y administradores del proyecto de servicio especificados en los próximos pasos.
    2. Haz clic en Subredes individuales (permisos a nivel de subred) si necesitas compartir subredes de forma selectiva de las redes de VPC del proyecto host con proyectos de servicio y administradores del proyecto de servicio. Luego, selecciona Subredes que se compartirán.
  7. Haz clic en Continuar.
    Se muestra la siguiente pantalla.
  8. En Nombres de proyectos, especifica los proyectos de servicio que deseas vincular con el proyecto host. Ten en cuenta que vincular proyectos de servicio no define ningún administrador de proyecto de servicio; eso se hace en el siguiente paso.
  9. En la sección Seleccionar usuarios por función, agrega administradores de proyectos de servicio. Se otorgará a estos usuarios la función de IAM compute.networkUser para las subredes compartidas. Solo los administradores de proyectos de servicio pueden crear recursos en las subredes del proyecto host de VPC compartida.
  10. Haz clic en Guardar.

gcloud

  1. Autentícate en gcloud como administrador de VPC compartida. Reemplaza SHARED_VPC_ADMIN por el nombre del administrador de la VPC compartida:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Habilita la VPC compartida para el proyecto que necesitas que se convierta en un proyecto host. Reemplaza HOST_PROJECT_ID por el ID del proyecto.

    Si tienes una función de administrador de VPC compartida a nivel de organización, usa este comando:

    gcloud compute shared-vpc enable HOST_PROJECT_ID
    

    Si tienes una función de administrador de VPC compartida a nivel de carpeta, usa este comando:

    gcloud beta compute shared-vpc enable HOST_PROJECT_ID
    
  3. Confirma que el proyecto aparezca como proyecto host para la organización. Reemplaza ORG_ID por el ID de tu organización (determinado por gcloud organizations list).

    gcloud compute shared-vpc organizations list-host-projects ORG_ID
    
  4. Si solo necesitabas habilitar un proyecto host, puedes salir de gcloud para proteger las credenciales de tu cuenta de administrador de VPC compartida. De lo contrario, omite este paso y continúa con los pasos para vincular proyectos de servicio.

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. Habilita la VPC compartida para el proyecto mediante el uso de credenciales con permisos de administrador de VPC compartida.

    • Si tienes la función de administrador de VPC compartida a nivel de organización, usa la API v1:

      POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnHost
      
    • Si tienes la función de administrador de VPC compartida a nivel de carpeta, usa la API beta:

      POST https://compute.googleapis.com/compute/beta/projects/HOST_PROJECT_ID/enableXpnHost
      

    Reemplaza HOST_PROJECT_ID por el ID del proyecto que será un proyecto host de VPC compartida.

    Para obtener más información, consulta el método projects.enableXpnHost.

  2. Confirma que el proyecto aparezca como proyecto host.

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/listXpnHosts
    

    Reemplaza HOST_PROJECT_ID por el ID del proyecto host de VPC compartida.

    Para obtener más información, consulta el método projects.listXpnHosts.

Terraform

Puedes usar un recurso de Terraform para habilitar un proyecto host.

resource "google_compute_shared_vpc_host_project" "host" {
  project = var.project # Replace this with your host project ID in quotes
}

Vincula proyectos de servicio

Un proyecto de servicio debe vincularse con un proyecto host antes de que los administradores del proyecto de servicio puedan usar la VPC compartida. Un administrador de VPC compartida debe realizar los siguientes pasos para completar el proceso de vinculación.

Un proyecto de servicio solo se puede vincular con un proyecto host, pero un proyecto host admite varias vinculaciones de proyectos de servicio. Para obtener más información, consulta los límites específicos de la VPC compartida en la página de cuotas de VPC.

Console

  1. Accede a Google Cloud Console como un administrador de VPC compartida.
  2. Ve a la página VPC compartida en Google Cloud Console.
    Ir a la página VPC compartida
  3. Haz clic en la pestaña Proyectos vinculados.
  4. En la pestaña Proyectos vinculados, haz clic en el botón Vincular proyectos.
  5. Marca las casillas de los proyectos de servicio que deseas vincular en la sección Nombres de proyectos. Ten en cuenta que vincular proyectos de servicio no define ningún administrador de proyecto de servicio; eso se hace en el siguiente paso.
  6. En la sección Permisos de red de VPC, selecciona las funciones que corresponden a los miembros que obtendrán la función de compute.networkUser. A los miembros de IAM se les otorga la función de usuario de red para todo el proyecto host o ciertas subredes en el proyecto host, según el modo de uso compartido de redes de VPC. Estos miembros se conocen como administradores de proyectos de servicio en sus respectivos proyectos de servicio.
  7. En la sección Modo de uso compartido de redes de VPC, selecciona una de las siguientes opciones:
    1. Haz clic en Compartir todas las subredes (permisos a nivel de proyecto) para compartir todas las subredes actuales y futuras en las redes de VPC del proyecto host con todos los proyectos de servicio y administradores de proyectos de servicio.
    2. Haz clic en Subredes individuales (permisos a nivel de subred) si necesitas compartir subredes de forma selectiva de las redes de VPC del proyecto host con proyectos de servicio y administradores de proyectos de servicio. Luego, selecciona Subredes que se compartirán.
  8. Haz clic en Guardar.

gcloud

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de VPC compartida. Reemplaza SHARED_VPC_ADMIN por el nombre del administrador de VPC compartida:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Vincula un proyecto de servicio a un proyecto host ya habilitado. Reemplaza SERVICE_PROJECT_ID por el ID del proyecto de servicio y HOST_PROJECT_ID por el ID del proyecto host.

    Si tienes una función de administrador de VPC compartida a nivel de organización, usa este comando:

    gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_ID \
        --host-project HOST_PROJECT_ID
    

    Si tienes una función de administrador de VPC compartida a nivel de carpeta, usa este comando:

    gcloud beta compute shared-vpc associated-projects add SERVICE_PROJECT_ID \
        --host-project HOST_PROJECT_ID
    
  3. Confirma que el proyecto de servicio se haya vinculado.

    gcloud compute shared-vpc get-host-project SERVICE_PROJECT_ID
    
  4. De manera opcional, puedes enumerar los proyectos de servicio que están vinculados al proyecto host:

    gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID
    
  5. Si solo necesitabas vincular un proyecto de servicio, puedes salir de gcloud para proteger las credenciales de la cuenta de administrador de VPC compartida. De lo contrario, omite este paso y define a los administradores del proyecto de servicio para todas las subredes o solo algunas subredes.

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. Vincula un proyecto de servicio con el proyecto host de VPC compartida.

    • Si tienes la función de administrador de VPC compartida a nivel de organización, usa la API v1:

      POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnResource
      {
      "xpnResource": {
        "id": "SERVICE_PROJECT"
      }
      }
      
    • Si tienes la función de administrador de VPC compartida a nivel de carpeta, usa la API beta:

      POST https://compute.googleapis.com/compute/beta/projects/HOST_PROJECT_ID/enableXpnResource
      {
      "xpnResource": {
        "id": "SERVICE_PROJECT"
      }
      }
      

    Reemplaza los marcadores de posición por valores válidos:

    • HOST_PROJECT_ID es el ID del proyecto host de la VPC compartida.
    • SERVICE_PROJECT es el ID del proyecto de servicio que se vinculará.

    Para obtener más información, consulta el método projects.enableXpnResource.

  2. Confirma que los proyectos de servicio estén vinculados al proyecto host.

    GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/getXpnResources
    

    Reemplaza los marcadores de posición por valores válidos:

    • HOST_PROJECT_ID es el ID del proyecto host de la VPC compartida.

    Para obtener más información, consulta el método projects.getXpnResources.

Terraform

Puedes usar un recurso de Terraform para vincular un proyecto de servicio.

resource "google_compute_shared_vpc_service_project" "service1" {
  host_project    = google_compute_shared_vpc_host_project.host.project
  service_project = var.service_project # Replace this with your service project ID in quotes
}

Administradores de proyectos de servicio para todas las subredes

Un administrador de VPC compartida puede asignar a un miembro de IAM de un proyecto de servicio como administrador de proyecto de servicio con acceso a todas las subredes del proyecto host. Los administradores de proyectos de servicio de este tipo reciben la función compute.networkUser para todo el proyecto host. Esto significa que tienen acceso a todas las subredes definidas en la actualidad y futuras en el proyecto host.

Console

Para definir un miembro de IAM de un proyecto de servicio como administrador del proyecto de servicio con acceso a todas las subredes en un proyecto host mediante Cloud Console, consulta la sección Vincula proyectos de servicio.

gcloud

En estos pasos, se incluye la definición de un miembro de IAM de un proyecto de servicio como administrador del proyecto de servicio con acceso a todas las subredes en un proyecto host. Para poder seguir estos pasos, debes habilitar un proyecto host y vincular el proyecto de servicio al proyecto host.

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de VPC compartida. Reemplaza SHARED_VPC_ADMIN por el nombre del administrador de VPC compartida:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Crea una vinculación de políticas para convertir a un miembro de IAM del proyecto de servicio en un administrador del proyecto de servicio. Reemplaza HOST_PROJECT_ID por el ID del proyecto host y SERVICE_PROJECT_ADMIN por la dirección de correo electrónico del usuario administrador del proyecto de servicio.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member "user:SERVICE_PROJECT_ADMIN" \
    --role "roles/compute.networkUser"
    

    Puedes especificar diferentes tipos de miembros si cambias el formato del argumento --member:

    • Usa group: para especificar un grupo de Google (por dirección de correo electrónico) como miembro.
    • Usa domain: para especificar un dominio de Google como miembro.
    • Usa serviceAccount: para especificar una cuenta de servicio. Para obtener más información sobre este caso práctico, consulta Cuentas de servicio como administradores de proyectos de servicio.
  3. Repite el paso anterior para cada administrador del proyecto de servicio adicional que necesites definir.

  4. Si terminaste de definir a los administradores del proyecto de servicio, puedes salir de gcloud para proteger las credenciales de cuenta de administrador de VPC compartida.

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. Describe y, luego, registra los detalles de la política del proyecto existente. Necesitarás la política existente y el valor de etag.

    POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
    

    Reemplaza HOST_PROJECT_ID por el ID del proyecto host que contiene la red de VPC compartida.

  2. Crea una vinculación de políticas para designar a los miembros de IAM en el proyecto de servicio como administradores de proyectos de servicio.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            MEMBER,
            ...additional members
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    Reemplaza los marcadores de posición por valores válidos:

    • HOST_PROJECT_ID es el ID del proyecto host que contiene la red de VPC compartida.
    • MEMBER es una identidad con la que está asociada la función, como un usuario, un grupo, un dominio o una cuenta de servicio. Para obtener más información, consulta el campo members en la documentación de Resource Manager.
    • ETAG es un identificador único que obtuviste cuando describiste la política existente. Evita las colisiones si se envían varias solicitudes de actualizaciones al mismo tiempo.

    Para obtener más información, consulta el método projects.setIamPolicy.

Administradores de proyectos de servicio para algunas subredes

Un administrador de VPC compartida puede asignar a un miembro de IAM de un proyecto de servicio como administrador del proyecto de servicio con acceso solo a algunas de las subredes del proyecto host. Esta opción proporciona un medio más detallado para definir a los administradores de proyectos de servicio, ya que se otorga la función compute.networkUser solo para algunas subredes en el proyecto host.

Console

Para definir un miembro de IAM de un proyecto de servicio como administrador del proyecto de servicio con acceso a solo algunas subredes en un proyecto host mediante Cloud Console, consulta la sección Vincula proyectos de servicio.

gcloud

En estos pasos, se explica cómo definir miembros de IAM de un proyecto de servicio como administradores de proyectos de servicio con acceso solo a algunas subredes en un proyecto host. Para poder definirlos, debes habilitar un proyecto host y vincular el proyecto de servicio al proyecto host.

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de VPC compartida. Reemplaza SHARED_VPC_ADMIN por el nombre del administrador de VPC compartida:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Selecciona la subred del proyecto host al que deben acceder los administradores de proyectos de servicio. Obtén la política de IAM actual en formato JSON. Reemplaza SUBNET_NAME por el nombre de la subred en el proyecto host y HOST_PROJECT_ID por el ID del proyecto host.

    gcloud beta compute networks subnets get-iam-policy SUBNET_NAME \
        --region SUBNET_REGION \
        --project HOST_PROJECT_ID \
        --format json
    
  3. Copia el resultado JSON del paso anterior y guárdalo en un archivo. Para mayor claridad, en estos pasos, se guarda en un archivo llamado subnet-policy.json.

  4. Modifica el archivo subnet-policy.json y agrega los miembros de IAM que se convertirán en administradores del proyecto de servicio con acceso a la subred. Reemplaza cada SERVICE_PROJECT_ADMIN por la dirección de correo electrónico de un usuario de IAM del proyecto de servicio.

    {
      "bindings": [
      {
         "members": [
               "user:[SERVICE_PROJECT_ADMIN]",
               "user:[SERVICE_PROJECT_ADMIN]"
            ],
            "role": "roles/compute.networkUser"
      }
      ],
      "etag": "[ETAG_STRING]"
    }
    

    Ten en cuenta que puedes especificar diferentes tipos de miembros de IAM (además de los usuarios) en las políticas:

    • Cambia user: por group: para especificar un grupo de Google (por dirección de correo electrónico) como miembro.
    • Cambia user: por domain: para especificar un dominio de Google como miembro.
    • Usa serviceAccount: para especificar una cuenta de servicio. Para obtener más información sobre este caso práctico, consulta Cuentas de servicio como administradores de proyectos de servicio.
  5. Actualiza la vinculación de política para la subred mediante el contenido del archivo subnet-policy.json.

    gcloud beta compute networks subnets set-iam-policy SUBNET_NAME subnet-policy.json \
        --region SUBNET_REGION \
        --project HOST_PROJECT_ID
    
  6. Si terminaste de definir a los administradores del proyecto de servicio, puedes salir de gcloud para proteger las credenciales de cuenta de administrador de VPC compartida.

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. Describe y, luego, registra los detalles de la política de la subred existente. Necesitarás la política existente y el valor de etag.

    GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/getIamPolicy
    

    Reemplaza los marcadores de posición por valores válidos:

    • HOST_PROJECT_ID es el ID del proyecto host que contiene la red de VPC compartida.
    • SUBNET_NAME es el nombre de la subred que se compartirá.
    • SUBNET_REGION es la región en la que se encuentra la subred.
  2. Para otorgar a los administradores del proyecto de servicio acceso a las subredes del proyecto host, actualiza la política de subred.

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            MEMBER,
            ...additional members
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    Reemplaza los marcadores de posición por valores válidos:

    • ETAG es un identificador único que obtuviste cuando describiste la política existente. Evita las colisiones si se envían varias solicitudes de actualizaciones al mismo tiempo.
    • HOST_PROJECT_ID es el ID del proyecto host que contiene la red de VPC compartida.
    • MEMBER es una identidad con la que está asociada la función, como un usuario, un grupo, un dominio o una cuenta de servicio. Para obtener más información, consulta el campo members en la documentación de Resource Manager.
    • SUBNET_NAME es el nombre de la subred que se compartirá.
    • SUBNET_REGION es la región en la que se encuentra la subred.

    Para obtener más información, consulta el método subnetworks.setIamPolicy.

Cuentas de servicio como administradores de proyectos de servicio

Un administrador de VPC compartida también puede definir cuentas de servicio de proyectos de servicio como administradores de proyectos de servicio. En esta sección, se ilustra cómo definir dos tipos diferentes de cuentas de servicio como administradores de proyectos de servicio:

Al igual que otros miembros de IAM, la función de administrador del proyecto de servicio (compute.networkUser) puede otorgarse para todas las subredes o solo algunas subredes del proyecto host. Sin embargo, para simplificar las instrucciones, en esta sección solo se ilustra cómo definir cada uno de los dos tipos de cuenta de servicio como administradores de proyectos de servicio para todas las subredes del proyecto host.

Cuentas de servicio administradas por usuarios como administradores del proyecto de servicio

En estas instrucciones, se describe cómo definir una cuenta de servicio administrada por el usuario como administrador de proyectos de servicio para todas las subredes del proyecto host de VPC compartida.

Console

  1. Accede a Google Cloud Console como un administrador de VPC compartida.
  2. Ve a la página Configuración de Google Cloud Console.
    Ir a la página Configuración
  3. Cambia el proyecto por el proyecto de servicio que contiene la cuenta de servicio que se debe definir como administrador del proyecto de servicio.
  4. Copia el ID del proyecto de servicio. Para mayor claridad, en este procedimiento se hace referencia al ID del proyecto de servicio como SERVICE_PROJECT_ID.
  5. Cambia el proyecto por el proyecto host de VPC compartida.
  6. Ve a la página de IAM en Google Cloud Console.
    Ir a la página de IAM
  7. Haz clic en Agregar.
  8. Agrega SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com al campo Miembros y reemplaza SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio.
  9. Selecciona Compute Engine > Usuario de la red de Compute en el menú Funciones.
  10. Haz clic en Agregar.

gcloud

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de VPC compartida. Reemplaza SHARED_VPC_ADMIN por el nombre del administrador de VPC compartida:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Si no conoces el ID del proyecto de servicio, puedes enumerar todos los proyectos de la organización. En esta lista, se muestra el ID de cada proyecto.

    gcloud projects list
    
  3. Crea una vinculación de políticas para que la cuenta de servicio sea un administrador del proyecto de servicio. Reemplaza HOST_PROJECT_ID por el ID del proyecto host, SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio, y SERVICE_PROJECT_ID por el ID del proyecto de servicio.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member "serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com" \
        --role "roles/compute.networkUser"
    

API

  1. Describe y, luego, registra los detalles de la política del proyecto existente. Necesitarás la política existente y el valor de etag.

    POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
    

    Reemplaza HOST_PROJECT_ID por el ID del proyecto host que contiene la red de VPC compartida.

  2. Crea una vinculación de políticas para designar cuentas de servicio como administradores del proyecto de servicio.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com",
            ...include additional service accounts
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    Reemplaza los marcadores de posición por valores válidos:

    • HOST_PROJECT_ID es el ID del proyecto host que contiene la red de VPC compartida.
    • SERVICE_ACCOUNT_NAME es el nombre de la cuenta de servicio.
    • SERVICE_PROJECT_ID es el ID del proyecto de servicio que contiene la cuenta de servicio.
    • ETAG es un identificador único que obtuviste cuando describiste la política existente. Evita las colisiones si se envían varias solicitudes de actualizaciones al mismo tiempo.

    Para obtener más información, consulta el método projects.setIamPolicy.

Cuenta de servicio de las API de Google como administrador del proyecto de servicio

En estas instrucciones, se describe cómo definir la cuenta de servicio de las API de Google como un administrador del proyecto de servicio para todas las subredes del proyecto host de VPC compartida. Hacer que la cuenta de servicio de las API de Google sea el administrador del proyecto de servicio es un requisito para los grupos de instancias administrados que se usan con la VPC compartida porque las tareas como la creación de instancias las realiza este tipo de cuenta de servicio. Para obtener más información sobre esta relación, consulta Grupos de instancias administrados y la IAM.

Console

  1. Accede a Google Cloud Console como un administrador de VPC compartida.
  2. Ve a la página Configuración de Google Cloud Console.
    Ir a la página Configuración
  3. Cambia el proyecto por el proyecto de servicio que contiene la cuenta de servicio que se debe definir como administrador del proyecto de servicio.
  4. Copia el Número de proyecto del proyecto de servicio. Para mayor claridad, en este procedimiento se hace referencia al número de proyecto de servicio como SERVICE_PROJECT_NUMBER.
  5. Cambia el proyecto por el proyecto host de VPC compartida.
  6. Ve a la página de IAM en Google Cloud Console.
    Ir a la página de IAM
  7. Haz clic en Agregar.
  8. Agrega SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com al campo Miembros.
  9. Selecciona Compute Engine > Usuario de la red de Compute en el menú Funciones.
  10. Haz clic en Agregar.

gcloud

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de VPC compartida. Reemplaza SHARED_VPC_ADMIN por el nombre del administrador de VPC compartida:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. Determina el número del proyecto para el proyecto de servicio. Para mayor claridad, en este procedimiento se hace referencia al número de proyecto de servicio como SERVICE_PROJECT_NUMBER. Reemplaza SERVICE_PROJECT_ID por el ID del proyecto de servicio.

    gcloud projects describe SERVICE_PROJECT_ID --format='get(projectNumber)'
    
    • Si no conoces el ID del proyecto de servicio, puedes enumerar todos los proyectos de la organización. En esta lista, se muestra el número del proyecto de cada uno.

      gcloud projects list
      
  3. Crea una vinculación de políticas para que la cuenta de servicio sea un administrador del proyecto de servicio. Reemplaza HOST_PROJECT_ID por el ID del proyecto host y SERVICE_PROJECT_NUMBER por el número del proyecto de servicio.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com" \
        --role "roles/compute.networkUser"
    

API

  1. Describe y, luego, registra los detalles de la política del proyecto existente. Necesitarás la política existente y el valor de etag.

    POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
    

    Reemplaza HOST_PROJECT_ID por el ID del proyecto host que contiene la red de VPC compartida.

  2. Enumera el proyecto para encontrar su número.

    GET https://cloudresourcemanager.googleapis.com/v1/projects?filter=projectId="SERVICE_PROJECT_ID"
    

    Reemplaza SERVICE_PROJECT_ID por el ID del proyecto de servicio en el que se encuentra la cuenta de servicio.

  3. Crea una vinculación de políticas para designar cuentas de servicio como administradores del proyecto de servicio.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com"
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    Reemplaza los marcadores de posición por valores válidos:

    • HOST_PROJECT_ID es el ID del proyecto host que contiene la red de VPC compartida.
    • SERVICE_PROJECT_NUMBER es el número del proyecto de servicio que contiene la cuenta de servicio.
    • ETAG es un identificador único que obtuviste cuando describiste la política existente. Evita las colisiones si se envían varias solicitudes de actualizaciones al mismo tiempo.

    Para obtener más información, consulta el método projects.setIamPolicy.

Usa la VPC compartida

Una vez que un administrador de VPC compartida habilita un proyecto host, vincula los proyectos de servicio necesarios y define los administradores de proyectos de servicio para todas o algunas de las subredes del proyecto host, los administradores de proyectos de servicio pueden crear instancias, plantillas y balanceadores de cargas internos en los proyectos de servicio mediante las subredes del proyecto host.

Un administrador del proyecto de servicio debe realizar todas las tareas de esta sección.

Es importante tener en cuenta que un administrador de VPC compartida solo otorga a los administradores del proyecto de servicio la función compute.networkUser (ya sea para todo el proyecto host o solo para algunas de sus subredes). Los administradores del proyecto de servicio también deben tener otras funciones necesarias para administrar sus respectivos proyectos de servicio. Por ejemplo, un administrador del proyecto de servicio también podría ser un propietario del proyecto o debería tener al menos la función compute.instanceAdmin para el proyecto.

Enumera las subredes disponibles

Los administradores de proyectos de servicio pueden enumerar las subredes a las que se les otorgó permiso mediante estos pasos.

Console

Ve a la página VPC compartida en Google Cloud Console.
Ir a la página VPC compartida

gcloud

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de proyectos de servicio. Reemplaza SERVICE_PROJECT_ADMIN por el nombre del administrador del proyecto de servicio:

    gcloud auth login SERVICE_PROJECT_ADMIN
    
  2. Ejecuta el siguiente comando y reemplaza HOST_PROJECT_ID por el ID del proyecto host de la VPC compartida:

    gcloud compute networks subnets list-usable --project HOST_PROJECT_ID
    

    En el siguiente ejemplo, se enumeran las subredes disponibles en el proyecto host project-1:

    $ gcloud compute networks subnets list-usable --project project-1
    
    PROJECT    REGION       NETWORK  SUBNET    RANGE          SECONDARY_RANGES
    project-1  us-west1     net-1    subnet-1  10.138.0.0/20
    project-1  us-central1  net-1    subnet-2  10.128.0.0/20  r-1 192.168.2.0/24
                                                              r-2 192.168.3.0/24
    project-1  us-east1     net-1    subnet-3  10.142.0.0/20
    

Para obtener más información, consulta el comando list-usable en la documentación del SDK.

API

Enumera las subredes disponibles en el proyecto host. Realiza la solicitud como administrador del proyecto de servicio.

GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/aggregated/subnetworks/listUsable

Reemplaza HOST_PROJECT_ID por el ID del proyecto host que contiene la red de VPC compartida.

Para obtener más información, consulta el método subnetworks.listUsable.

Reserva una IP interna estática

Los administradores de proyectos de servicio pueden reservar una dirección IP interna en una subred de una red de VPC compartida. Ten en cuenta que el objeto de configuración de dirección IP se crea en el proyecto de servicio, mientras que su valor proviene del rango de direcciones disponibles en la subred compartida que elegiste.

gcloud

  1. Si aún no lo hiciste, autentícate en gcloud como administrador de proyectos de servicio. Reemplaza SERVICE_PROJECT_ADMIN por el nombre del administrador del proyecto de servicio:

    gcloud auth login SERVICE_PROJECT_ADMIN
    
  2. Ejecuta el siguiente comando y reemplaza HOST_PROJECT_ID por el ID del proyecto host de la VPC compartida:

    gcloud compute addresses create IP_ADDR_NAME \
    --project SERVICE_PROJECT_ID \
    --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
    --region=REGION
    

En el ejemplo anterior, deberías reemplazar los siguientes elementos:

  • IP_ADDR_NAME por un nombre para el objeto de dirección IP
  • SERVICE_PROJECT_ID por el ID del proyecto de servicio
  • HOST_PROJECT_ID por el ID del proyecto host de VPC compartida
  • REGION por la región que contiene la subred compartida
  • SUBNET por el nombre de la subred compartida

Los detalles adicionales para crear direcciones IP se encuentran en la documentación del SDK.

API

Reserva una dirección IP interna estática como administrador del proyecto de servicio.

POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/addresses
{
  "name": "ADDRESS_NAME",
  "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
  "addressType": "INTERNAL"
}

Reemplaza los marcadores de posición por valores válidos:

  • ADDRESS_NAME es un nombre para la dirección IP interna reservada.
  • HOST_PROJECT_ID es el ID del proyecto que contiene la red de VPC compartida.
  • REGION es la región en la que se ubicará la dirección IP reservada y donde se encuentra la subred compartida.
  • SERVICE_PROJECT_ID es el ID del proyecto de servicio en el que se reserva la dirección IP.
  • SUBNET_NAME es el nombre de la subred compartida.

Para obtener más información, consulta el método addresses.insert.

Terraform

Puedes usar un bloque de datos de Terraform para especificar la información de la subred del host. Luego, usa un recurso de Terraform para reservar una dirección IP interna estática. Si omites el argumento address opcional, se seleccionará y reservará una dirección IP disponible.

Especifica la subred del host:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

Reserva una dirección IP desde la subred del proyecto host para usarla en el proyecto de servicio:

resource "google_compute_address" "internal" {
  project      = var.service_project
  region       = "us-central1"
  name         = "int-ip"
  address_type = "INTERNAL"
  address      = "10.0.0.8"
  subnetwork   = data.google_compute_subnetwork.subnet.self_link
}

Crea una instancia

Cuando crees una instancia con VPC compartida, ten en cuenta lo siguiente:

  • El proceso estándar para crear una instancia implica la selección de una zona, una red y una subred. La subred y la zona seleccionadas deben estar en la misma región. Cuando un administrador del proyecto de servicio crea una instancia mediante una subred de una red de VPC compartida, la zona seleccionada para esa instancia debe ser una que esté en la misma región que la subred seleccionada.

    • Cuando se crea una instancia con una dirección IP interna estática reservada, la subred (y la región) ya estaban seleccionadas cuando se creó la dirección IP estática. En esta sección, se proporciona un ejemplo de gcloud para crear una instancia con una dirección IP interna estática.
  • Los administradores del proyecto de servicio solo pueden crear instancias cuando usan subredes para las cuales se les otorgó permiso. Consulta Enumera las subredes disponibles para determinar cuáles están disponibles.

  • Cuando Google Cloud recibe una solicitud para crear una instancia en una subred de una red de VPC compartida, comprueba si el miembro de IAM que realiza la solicitud tiene permiso para usar esa subred compartida. Si la verificación falla, la instancia no se creará y Google Cloud mostrará un error de permisos. Comunícate con el administrador de VPC compartida para obtener ayuda.

Console

  1. Ve a la página Instancias de VM en Google Cloud Console.
    Ir a la página Instancias de VM
  2. Haz clic en Crear.
  3. Especifica un Nombre para la instancia.
  4. Haz clic en Administración, seguridad, discos, herramientas de redes, instancia única.
  5. Haz clic en Redes.
  6. En Interfaces de red, haz clic en la red default.
  7. Haz clic en el botón de selección Redes compartidas conmigo.
  8. Selecciona la Subred compartida donde deseas crear la instancia.
  9. Especifica cualquier otro parámetro necesario para la instancia.
  10. Haz clic en Crear.

gcloud

  • Para crear una instancia con una dirección IP interna efímera en una subred compartida de una red de VPC compartida, usa este comando:

    gcloud compute instances create INSTANCE_NAME \
    --project SERVICE_PROJECT_ID \
    --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
    --zone ZONE
    

    En el ejemplo anterior, deberías reemplazar los siguientes elementos:

    • INSTANCE_NAME por el nombre de la instancia
    • SERVICE_PROJECT_ID por el ID del proyecto de servicio
    • HOST_PROJECT_ID por el ID del proyecto host de VPC compartida
    • REGION por la región que contiene la subred compartida
    • SUBNET por el nombre de la subred compartida
    • ZONE por una zona de la región especificada
  • Para crear una instancia con una dirección IP interna estática reservada en una red de VPC compartida, haz lo siguiente:

    1. Reserva una dirección IP interna estática en el proyecto host.
    2. Crea la instancia:

      gcloud compute instances create INSTANCE_NAME \
      --project SERVICE_PROJECT_ID \
      --private-network-ip IP_ADDR_NAME \
      --zone ZONE
      --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
      

      En el ejemplo anterior, deberías reemplazar los siguientes elementos:

      • INSTANCE_NAME por el nombre de la instancia
      • SERVICE_PROJECT_ID por el ID del proyecto de servicio
      • HOST_PROJECT_ID por el ID del proyecto host de la VPC compartida
      • IP_ADDR_NAME por el nombre de la dirección IP estática
      • ZONE por una zona en la misma región que IP_ADDR_NAME
      • SUBNET por el nombre de la subred compartida que está asociada con la dirección IP interna estática

API

  • Para crear una instancia con una dirección IP interna efímera como administrador del proyecto de servicio, especifica solo la subred.

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
    {
      "machineType": "MACHINE_TYPE",
      "name": "INSTANCE_NAME",
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"
        }
      ],
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "SOURCE_IMAGE"
          }
        }
      ]
    }
    

    Reemplaza los marcadores de posición por valores válidos:

    • INSTANCE_NAME es un nombre para la instancia.
    • HOST_PROJECT_ID es el ID del proyecto que contiene la red de VPC compartida.
    • MACHINE_TYPE es un tipo de máquina para la instancia.
    • REGION es la región que contiene la subred compartida.
    • SERVICE_PROJECT_ID es el ID del proyecto de servicio.
    • SOURCE_IMAGE es una imagen de la instancia.
    • SUBNET es el nombre de la subred compartida.
    • ZONE es una zona en la región especificada.

    Para obtener más información, consulta el método instances.insert.

  • Para crear una instancia con una dirección IP interna reservada como administrador del proyecto de servicio, especifica la subred y el nombre de la dirección IP reservada.

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
    {
      "machineType": "MACHINE_TYPE",
      "name": "INSTANCE_NAME",
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
          "networkIP": "projects/SERVICE_PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME"
        }
      ],
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "SOURCE_IMAGE"
          }
        }
      ]
    }
    

    Reemplaza los marcadores de posición por valores válidos:

    • ADDRESS_NAME es el nombre de la dirección IP interna reservada.
    • INSTANCE_NAME es un nombre para la instancia.
    • HOST_PROJECT_ID es el ID del proyecto que contiene la red de VPC compartida.
    • MACHINE_TYPE es un tipo de máquina para la instancia.
    • REGION es la región que contiene la subred compartida.
    • SERVICE_PROJECT_ID es el ID del proyecto de servicio.
    • SOURCE_IMAGE es una imagen de la instancia.
    • SUBNET es el nombre de la subred compartida.
    • ZONE es una zona en la región especificada.

    Para obtener más información, consulta el método instances.insert.

Terraform

Puedes usar un bloque de datos de Terraform para especificar la información de la subred del host. Luego, usa un recurso de Terraform para crear una instancia de VM en un proyecto de servicio.

Especifica la subred del host:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

Crea una instancia de VM en un proyecto de servicio con una dirección IP efímera desde la subred compartida del proyecto host:

resource "google_compute_instance" "ephemeral_ip" {
  project      = var.service_project
  zone         = "us-central1-a"
  name         = "my-vm"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
  }
}

Crea una instancia de VM en un proyecto de servicio con una dirección IP estática reservada desde la subred compartida del proyecto host:

resource "google_compute_instance" "reserved_ip" {
  project      = var.service_project
  zone         = "us-central1-a"
  name         = google_compute_address.internal.self_link
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
    network_ip = "int-ip"
  }
}

Crea una plantilla de instancias

Cuando crees una plantilla de instancia con VPC compartida, ten en cuenta lo siguiente:

  • El proceso para crear una plantilla de instancias implica seleccionar una red y una subred.

    • Las plantillas creadas para usarse en una red de VPC compartida de modo personalizado deben especificar la red y una subred.

    • Es posible que las plantillas creadas para usarse en una red de VPC compartida de modo automático puedan diferir en la selección de una subred. En estos casos, se seleccionará de forma automática una subred en la misma región que cualquier grupo de instancias administrado que use la plantilla. Las redes de modo automático tienen una subred en cada región por definición.

  • Cuando un miembro de IAM crea una plantilla de instancia, Google Cloud no realiza una verificación de permisos para ver si el miembro puede usar la subred que se especificó. Esta verificación de permisos siempre se posterga hasta que se solicita un grupo de instancias administrado que usa la plantilla.

Console

  1. Ve a la página Plantillas de instancias en Google Cloud Console.
    Ir a la página Plantillas de instancias
  2. Haz clic en Crear plantilla de instancias.
  3. Especifica un Nombre para la plantilla de instancias.
  4. Haz clic en Administración, seguridad, discos, herramientas de redes, instancia única.
  5. Haz clic en Redes.
  6. En Interfaces de red, haz clic en la red default.
  7. Haz clic en el botón de selección Redes compartidas conmigo.
  8. Selecciona la Subred compartida en la que deseas crear la plantilla de instancias.
  9. Especifica cualquier otro parámetro necesario para la plantilla de instancias.
  10. Haz clic en Crear.

gcloud

  • Si deseas crear una plantilla de instancias para usarla en cualquier subred creada de forma automática de una red de VPC compartida de modo automático, usa este comando:

    gcloud compute instance-templates create TEMPLATE_NAME \
    --project SERVICE_PROJECT_ID \
    --network projects/HOST_PROJECT_ID/global/networks/NETWORK
    

    En el ejemplo anterior, deberías reemplazar los siguientes elementos:

    • TEMPLATE_NAME por el nombre de la plantilla
    • SERVICE_PROJECT_ID por el ID del proyecto de servicio
    • HOST_PROJECT_ID por el ID del proyecto host de VPC compartida
    • NETWORK por el nombre de la red de VPC compartida
  • Si deseas crear una plantilla de instancias para una subred creada manualmente en una red de VPC compartida (ya sea de modo automático o personalizado), usa este comando:

    gcloud compute instance-templates create TEMPLATE_NAME \
    --project SERVICE_PROJECT_ID \
    --region REGION \
    --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

    En el ejemplo anterior, deberías reemplazar los siguientes elementos:

    • TEMPLATE_NAME por el nombre de la plantilla
    • SERVICE_PROJECT_ID por el ID del proyecto de servicio
    • HOST_PROJECT_ID por el ID del proyecto host de VPC compartida
    • REGION por la región que contiene la subred compartida
    • SUBNET por el nombre de la subred compartida

API

  • Para crear una plantilla de instancias que use cualquier subred creada de forma automática de una red de VPC compartida de modo automático, especifica la red de VPC.

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
    {
    "properties": {
      "networkInterfaces": [
        {
          "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK"
        }
      ]
    ...
    }
    

    Reemplaza los marcadores de posición por valores válidos:

    • HOST_PROJECT_ID es el ID del proyecto que contiene la red de VPC compartida.
    • SERVICE_PROJECT_ID es el ID del proyecto de servicio.
    • NETWORK es el nombre de la red de VPC compartida.

    Para obtener más información, consulta el método instanceTemplates.insert.

  • Para crear una plantilla de instancias que use una subred creada manualmente en la red de VPC compartida (de modo automático o personalizado), especifica la subred.

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
    {
    "properties": {
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"
        }
      ]
    ...
    }
    

    Reemplaza los marcadores de posición por valores válidos:

    • HOST_PROJECT_ID es el ID del proyecto que contiene la red de VPC compartida.
    • REGION es la región que contiene la subred compartida.
    • SERVICE_PROJECT_ID es el ID del proyecto de servicio.
    • SUBNET_NAME es el nombre de la subred compartida.

    Para obtener más información, consulta el método instanceTemplates.insert.

Terraform

Puedes usar un bloque de datos de Terraform para especificar la información de la subred del host. Luego, usa un recurso de Terraform para crear una plantilla de instancias de VM. Las direcciones IP de la VM provienen de la subred compartida del proyecto host para reservar una dirección IP interna estática.

La subred debe existir en la misma región donde se crearán las instancias de VM.

Especifica la subred del host:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

Crea una plantilla de instancias de VM en el proyecto de servicio:

resource "google_compute_instance_template" "default" {
  project      = var.service_project
  name         = "appserver-template"
  description  = "This template is used to create app server instances."
  machine_type = "n1-standard-1"
  disk {
    source_image = "debian-cloud/debian-9"
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
  }
}

Crea un grupo de instancias administrado

Cuando crees un grupo de instancias administrado con una VPC compartida, ten en cuenta lo siguiente:

  • Los grupos de instancias administrados que se usan con VPC compartida requieren que la cuenta de servicio de las API de Google se convierta en un administrador del proyecto de servicio, porque esa cuenta de servicio realiza tareas como la creación automática de instancias mediante el ajuste de escala automático.

  • El proceso estándar para crear un grupo de instancias administrado implica seleccionar una zona o una región, según el tipo de grupo, y una plantilla de instancias. Los detalles de red y subred están vinculados a la plantilla de instancias. Las plantillas de instancias aptas están restringidas a aquellas que hacen referencia a subredes en la misma región que usa el grupo de instancias administrado.

  • Los administradores del proyecto de servicio solo pueden crear grupos de instancias administrados cuyas instancias miembro usen subredes a las que se les haya otorgado permiso. Debido a que los detalles de red y subred están vinculados a la plantilla de instancias, los administradores del proyecto de servicio solo pueden usar plantillas que hagan referencia a subredes que están autorizados a usar.

  • Cuando Google Cloud recibe una solicitud para crear un grupo de instancias administrado, comprueba si el miembro de IAM que hace la solicitud tiene permiso para usar la subred (en la misma región que el grupo) que se especificó en la plantilla de instancias. Si la verificación falla, el grupo de instancias administrado no se creará y Google Cloud mostrará un error de permisos. Enumera las subredes disponibles para determinar cuáles se pueden usar y comunícate con el administrador de VPC compartida si necesitas ayuda.

Para obtener más información, consulta Crea grupos de instancias administrados en la documentación de Compute Engine.

Crea un balanceador de cargas de HTTP(S) interno

Hay dos formas de configurar el balanceo de cargas de HTTP(S) interno dentro de una red de VPC compartida. Puedes crear el balanceador de cargas y sus instancias de backend en el proyecto de servicio o en el de host. Consulta las arquitecturas de VPC compartida en la descripción general del balanceador de cargas HTTP(S) interno para obtener detalles.

Consulta la página sobre cómo configurar el balanceo de cargas HTTP(S) interno con una VPC compartida para ver un ejemplo.

Crea un balanceador de cargas TCP/UDP interno

En el siguiente ejemplo, se ilustra lo que debes tener en cuenta cuando creas un balanceador de cargas de TCP/UDP interno en una red de VPC compartida. Los administradores del proyecto de servicio pueden crear un balanceador de cargas interno de TCP/UDP que use una subred (en el proyecto host) a la que tengan acceso. La regla de reenvío interno del balanceador de cargas se define en el proyecto de servicio, pero su referencia de subred apunta a una subred en una red de VPC compartida del proyecto host.

Antes de crear un balanceador de cargas de TCP/UDP interno en un entorno de VPC compartida, revisa los siguientes documentos:

Console

  1. Ve a la página Balanceo de cargas en Google Cloud Console.
    Ir a la página Balanceo de cargas

  2. Crea un balanceador de cargas interno de TCP/UDP y realiza el siguiente ajuste: en la sección Configurar servicios de frontend, selecciona la subred de VPC compartida que necesitas de la sección Redes que comparten otros proyectos del menú Subred.

  3. Termina de crear el balanceador de cargas.

gcloud

Cuando crees la regla de reenvío interno, especifica una subred en el proyecto host con la marca --subnet:

gcloud compute forwarding-rules create FR_NAME \
    --project SERVICE_PROJECT_ID \
    --load-balancing-scheme internal \
    --region REGION \
    --ip-protocol IP_PROTOCOL \
    --ports PORT,PORT,... \
    --backend-service BACKEND_SERVICE_NAME \
    --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
    --address INTERNAL_IP

En el ejemplo anterior, deberías reemplazar los siguientes elementos:

  • FR_NAME por el nombre de la regla de reenvío
  • SERVICE_PROJECT_ID por el ID del proyecto de servicio
  • REGION por la región que contiene la subred compartida
  • IP_PROTOCOL por TCP o UDP, que coincide con el protocolo del servicio de backend del balanceador de cargas
  • PORT por el puerto numérico o la lista de puertos para el balanceador de cargas
  • BACKEND_SERVICE_NAME por el nombre del servicio de backend (ya creado como parte del procedimiento general de creación de un balanceador de cargas de TCP/UDP interno)
  • HOST_PROJECT_ID por el ID del proyecto host de VPC compartida
  • SUBNET por el nombre de la subred compartida
  • INTERNAL_IP por una dirección IP interna en la subred compartida (si no se especifica, se seleccionará una disponible)

Consulta esta página a fin de ver más opciones para usar con gcloud compute forwarding-rules create.

API

Crea la regla de reenvío interno y especifica una subred en el proyecto host.

POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/forwardingRules
{
  "name": "FR_NAME",
  "IPAddress": "IP_ADDRESS",
  "IPProtocol": "PROTOCOL",
  "ports": [ "PORT", ... ],
  "loadBalancingScheme": "INTERNAL",
  "subnetwork": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET",
  "network": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME",
  "backendService": "https://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/us-west1/backendServices/BE_NAME",
  "networkTier": "PREMIUM"
}

Reemplaza los marcadores de posición por valores válidos:

  • BE_NAME es el nombre del servicio de backend (ya creado como parte del procedimiento general de creación de un balanceador de cargas de TCP/UDP interno).
  • FR_NAME es un nombre para la regla de reenvío.
  • HOST_PROJECT_ID es el ID del proyecto host de la VPC compartida.
  • IP_ADDRESS es una dirección IP interna en la subred compartida.
  • IP_PROTOCOL es TCP o UDP, que coincide con el protocolo del servicio de backend del balanceador de cargas.
  • PORT es el puerto numérico o la lista de puertos para el balanceador de cargas.
  • REGION es la región que contiene la subred compartida.
  • SERVICE_PROJECT_ID es el ID del proyecto de servicio.
  • SUBNET es el nombre de la subred compartida.

Para obtener más información, consulta el método forwardingRules.insert.

Próximos pasos