Aprovisiona la VPC compartida
La VPC compartida te permite exportar subredes desde una Red de nube privada virtual (VPC) en un proyecto host a otro proyecto 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.
La VPC compartida admite la exportación de subredes de solo IPv4 (pila única) y de IPv4 e IPv6 (pila doble).
Para obtener información sobre cómo desconectar proyectos de servicio o quitar la configuración de VPC compartida por completo, consulta Desaprovisiona una VPC compartida.
La VPC compartida también se conoce como “XPN” en la API y en la interfaz de línea de comandos.
Cuotas, límites y recursos aptos
Antes de comenzar, asegúrate de estar familiarizado con la VPC compartida y IAM en particular:
Toma nota de las cuotas y límites que pertenecen a la VPC compartida.
Asegúrate de comprender qué recursos pueden participar y qué recursos no pueden hacerlo.
Asegúrate de haber habilitado la API de Compute Engine y la factuación del proyecto host y todos los proyectos de servicio que planeas conectar al proyecto host.
Prepara tu organización
Ten en cuenta la siguiente información cuando prepares 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.
Restricciones de las políticas de la organización
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
oroles/resourcemanager.lienModifier
a nivel de la organización - Usuario con funciones personalizadas que incluyan los permisos
resourcemanager.projects.get
yresourcemanager.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.
Autentícate en
gcloud
como administrador de la organización o principal de IAM con el rolorgpolicy.policyAdmin
. ReemplazaORG_ADMIN
por el nombre de un administrador de la organización:gcloud auth login ORG_ADMIN
Para determinar el número de ID de la organización, consulta el resultado de este comando.
gcloud organizations list
Ejecuta este comando a fin de aplicar la política
compute.restrictXpnProjectLienRemoval
para la organización. ReemplazaORG_ID
por el número que definiste en el paso anterior.gcloud resource-manager org-policies enable-enforce \ --organization ORG_ID compute.restrictXpnProjectLienRemoval
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 archivos adjuntos del 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 principales 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
.
Evita el cierre accidental de proyectos host
Desconectar la facturación en una red de VPC compartida puede provocar un cierre completo de todos los recursos dependientes, incluidos los proyectos de servicio. Para evitar un posible caso de un cierre accidental de la VPC compartida debido a la facturación inactiva o inhabilitada, asegura el vínculo entre el proyecto host y su cuenta de facturación.
Nombra administradores de VPC compartida
Un administrador de organización puede otorgar a uno o más principales de IAM las funciones de administrador de VPC compartida y administrador de IAM de proyectos.
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 principales 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:
Accede a la consola de Google Cloud como administrador de la organización y, luego, ve a la página de IAM.
Desde el menú del proyecto, selecciona tu organización.
Si seleccionas un proyecto, el menú Roles muestra entradas incorrectas.
Haz clic en Agregar.
Ingresa las direcciones de correo electrónico de los Principales nuevos.
En el menú Roles, selecciona Compute Engine > Administrador de VPC compartida de Compute.
Haz clic en Agregar otra función.
En el menú desplegable Funciones, selecciona Administrador de recursos > Administrador de IAM del proyecto.
Haz clic en Guardar.
Para otorgar la función de administrador de VPC compartida a nivel de carpeta, haz lo siguiente:
Accede a la consola de Google Cloud como administrador de la organización y, luego, ve a la página de IAM.
Desde el menú del proyecto, selecciona tu carpeta.
Si seleccionas un proyecto o una organización, las opciones que ves son incorrectas.
Haz clic en Agregar.
Ingresa las direcciones de correo electrónico de los Principales nuevos.
En Seleccionar un rol, selecciona Compute Engine > Administrador de VPC compartida de Compute.
Haz clic en Agregar otra función.
En el menú Roles, selecciona Administrador de recursos > Administrador de IAM del proyecto.
Haz clic en Agregar otra función.
En el menú Roles, selecciona Administrador de recursos > Visualizador de red de Compute.
Haz clic en Guardar.
gcloud
Autentícate en
gcloud
como administrador de la organización. ReemplazaORG_ADMIN
por el nombre de un administrador de la organización:gcloud auth login ORG_ADMIN
Para determinar el número de ID de la organización, consulta el resultado de este comando.
gcloud organizations list
Para asignar el rol de administrador de VPC compartida a nivel de organización, haz lo siguiente:
Aplica la función de administrador de VPC compartida a un principal de IAM existente. Reemplaza
ORG_ID
por el número de ID de la organización del paso anterior yEMAIL_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"
Para asignar el rol de administrador de VPC compartida a nivel de carpeta, haz lo siguiente:
Para determinar tu ID de carpeta, consulta el resultado de este comando.
gcloud resource-manager folders list --organization=ORG_ID
Aplica la función de administrador de VPC compartida a un principal de IAM existente. Reemplaza
ORG_ID
por el número de ID de la organización del paso anterior yEMAIL_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 resource-manager folders add-iam-policy-binding FOLDER_ID \ --member='user:EMAIL_ADDRESS' \ --role="roles/compute.xpnAdmin"
gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \ --member='user:EMAIL_ADDRESS' \ --role="roles/resourcemanager.projectIamAdmin"
gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \ --member='user:EMAIL_ADDRESS' \ --role="roles/compute.networkViewer"
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:
Determina el número de ID de la organización.
POST https://cloudresourcemanager.googleapis.com/v1/organizations
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.Asigna el rol 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 existing policy details }
Reemplaza lo siguiente:
ORG_ID
: El ID de la organización que contiene el usuario al que le otorgas el rol de administrador de VPC compartida.EMAIL_ADDRESS
: La dirección de correo electrónico del usuario.ETAG
: 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 el rol de administrador de VPC compartida a nivel de carpeta, usa la siguiente solicitud:
Determina el número de ID de la organización.
POST https://cloudresourcemanager.googleapis.com/v1/organizations
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.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.Asigna el rol 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 lo siguiente:
FOLDER_ID
: El ID de la organización que contiene el usuario al que le otorgas el rol de administrador de VPC compartida.EMAIL_ADDRESS
: La dirección de correo electrónico del usuario.ETAG
: 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 la 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
Si aún no tienes el rol de administrador de VPC compartida de Compute (roles/compute.xpnAdmin
), no podrás ver esta página en la consola de Google Cloud.
En la consola de Google Cloud, ve a la página VPC compartida.
Accede como un administrador de VPC compartida.
Selecciona el proyecto que deseas habilitar como proyecto host de VPC compartida en el selector de proyectos.
Haz clic en Configurar VPC compartida.
En la página siguiente, haz clic en Guardar y continuar, en Habilitar proyecto host.
En Seleccionar subredes, realiza una de las siguientes acciones:
- 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.
- 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.
Haz clic en Continuar.
Se muestra la siguiente pantalla.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.
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.Haz clic en Guardar.
gcloud
Autentícate en
gcloud
como administrador de VPC compartida. ReemplazaSHARED_VPC_ADMIN
por el nombre del administrador de VPC compartida:gcloud auth login SHARED_VPC_ADMIN
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.gcloud compute shared-vpc enable HOST_PROJECT_ID
Confirma que el proyecto aparezca como proyecto host para la organización. Reemplaza
ORG_ID
por el ID de tu organización (determinado porgcloud organizations list
).gcloud compute shared-vpc organizations list-host-projects ORG_ID
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
Habilita la VPC compartida para el proyecto mediante el uso de credenciales con permisos de administrador de VPC compartida.
POST https://compute.googleapis.com/compute/v1/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
.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.
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
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 varios proyectos de servicio vinculados. 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
- Accede a la consola de Google Cloud como un administrador de VPC compartida.
- En la consola de Google Cloud, ve a la página VPC compartida.
Ir a la página de VPC compartida - Haz clic en la pestaña Proyectos vinculados.
- En la pestaña Proyectos vinculados, haz clic en el botón Vincular proyectos.
- 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.
- En la sección Permisos de red de VPC, selecciona las funciones que corresponden a los principales que obtendrán la función de
compute.networkUser
. A los principales 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 principales se conocen como administradores de proyectos de servicio en sus respectivos proyectos de servicio. - En la sección Modo de uso compartido de redes de VPC, selecciona una de las siguientes opciones:
- 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.
- 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.
- Haz clic en Guardar.
gcloud
Si aún no lo hiciste, autentícate en
gcloud
como administrador de VPC compartida. ReemplazaSHARED_VPC_ADMIN
por el nombre del administrador de VPC compartida:gcloud auth login SHARED_VPC_ADMIN
Vincula un proyecto de servicio a un proyecto host ya habilitado. Reemplaza
SERVICE_PROJECT_ID
por el ID del proyecto de servicio yHOST_PROJECT_ID
por el ID del proyecto host.gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_ID \ --host-project HOST_PROJECT_ID
Confirma que el proyecto de servicio se haya vinculado.
gcloud compute shared-vpc get-host-project SERVICE_PROJECT_ID
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
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
Adjunta un proyecto de servicio al proyecto host de VPC compartida.
POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnResource { "xpnResource": { "id": "SERVICE_PROJECT" } }
Reemplaza lo siguiente:
HOST_PROJECT_ID
: el ID del proyecto host de la VPC compartida.SERVICE_PROJECT
: el ID del proyecto de servicio que se vinculará.
Para obtener más información, consulta el método
projects.enableXpnResource
.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 lo siguiente:
HOST_PROJECT_ID
: 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.
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Administradores de proyectos de servicio para todas las subredes
Un administrador de VPC compartida puede asignar a un principal 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 y futuras en el proyecto host.
Un usuario que tiene la función compute.networkUser
en el proyecto host puede ver todas las subredes dentro de los proyectos de servicio adjuntos.
Console
Para definir una principal de IAM de un proyecto de servicio como administrador del proyecto de servicio con acceso a todas las subredes en un proyecto host mediante la consola de Google Cloud, consulta la sección Vincula proyectos de servicio.
gcloud
En estos pasos, se incluye la definición de un principal 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.
Si aún no lo hiciste, autentícate en
gcloud
como administrador de VPC compartida. ReemplazaSHARED_VPC_ADMIN
por el nombre del administrador de VPC compartida:gcloud auth login SHARED_VPC_ADMIN
Crea una vinculación de políticas para convertir a un principal de IAM del proyecto de servicio en un administrador del proyecto de servicio. Reemplaza
HOST_PROJECT_ID
por el ID del proyecto host ySERVICE_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 principales si cambias el formato del argumento
--member
:- Usa
group:
para especificar un grupo de Google (por dirección de correo electrónico) como principal. - Usa
domain:
para especificar un dominio de Google como principal. - 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.
- Usa
Repite el paso anterior para cada administrador del proyecto de servicio adicional que necesites definir.
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
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.Crea una vinculación de políticas para designar a los principales 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": [ PRINCIPAL, ...additional principals ], "role": "roles/compute.networkUser" }, ], "etag": "ETAG", "version": 1, ...other existing policy details }
Reemplaza lo siguiente:
HOST_PROJECT_ID
: El ID del proyecto host que contiene la red de VPC compartida.PRINCIPAL
: una identidad con la que está asociada el rol, como un usuario, un grupo, un dominio o una cuenta de servicio. Para obtener más información, consulta el campomembers
en la documentación de Resource Manager.ETAG
: 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 principal 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 a fin de definir a los administradores del proyecto de servicio mediante el otorgamiento del rol compute.networkUser
solo para algunas subredes del proyecto host.
Un usuario que tiene la función compute.networkUser
en el proyecto host puede ver todas las subredes dentro de los proyectos de servicio adjuntos.
Console
Para definir una principal de IAM de un proyecto de servicio como administrador del proyecto de servicio con acceso a solo algunas subredes en un proyecto host mediante la consola de Google Cloud, consulta la sección Vincula proyectos de servicio.
gcloud
En estos pasos, se explica cómo definir principales 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.
Si aún no lo hiciste, autentícate en
gcloud
como administrador de VPC compartida. ReemplazaSHARED_VPC_ADMIN
por el nombre del administrador de VPC compartida:gcloud auth login SHARED_VPC_ADMIN
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 yHOST_PROJECT_ID
por el ID del proyecto host.gcloud compute networks subnets get-iam-policy SUBNET_NAME \ --region SUBNET_REGION \ --project HOST_PROJECT_ID \ --format json
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
.Modifica el archivo
subnet-policy.json
y agrega los principales de IAM que se convertirán en administradores del proyecto de servicio con acceso a la subred. Reemplaza cadaSERVICE_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 principales de IAM (además de los usuarios) en las políticas:
- Cambia
user:
porgroup:
para especificar un grupo de Google (por dirección de correo electrónico) como principal. - Cambia
user:
pordomain:
para especificar un dominio de Google como principal. - 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.
- Cambia
Actualiza la vinculación de política para la subred mediante el contenido del archivo
subnet-policy.json
.gcloud compute networks subnets set-iam-policy SUBNET_NAME subnet-policy.json \ --region SUBNET_REGION \ --project HOST_PROJECT_ID
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
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 lo siguiente:
HOST_PROJECT_ID
: 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
: la región en la que se encuentra la subred.
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": [ PRINCIPAL, ...additional principals ], "role": "roles/compute.networkUser" }, ], "etag": "ETAG", "version": 1, ...other existing policy details }
Reemplaza lo siguiente:
ETAG
: 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
: El ID del proyecto host que contiene la red de VPC compartida.PRINCIPAL
: una identidad con la que está asociada el rol, como un usuario, un grupo, un dominio o una cuenta de servicio. Para obtener más información, consulta el campomembers
en la documentación de Resource Manager.SUBNET_NAME
: Es el nombre de la subred que se compartirá.SUBNET_REGION
: 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 del proyecto 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:
Cuentas de servicio administradas por el usuario con este formato:
USER_ID
@SERVICE_PROJECT_ID
.iam.gserviceaccount.comLa cuenta de servicio de las APIs de Google con este formato:
SERVICE_PROJECT_NUMBER
@cloudservices.gserviceaccount.com
El rol de administrador del proyecto de servicio (compute.networkUser
).se puede otorgar 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
- Accede a la consola de Google Cloud como un administrador de VPC compartida.
- En la consola de Google Cloud, ve a la página Configuración.
Ir a la página Configuración - Cambia el proyecto por el proyecto de servicio que contiene la cuenta de servicio que se debe definir como administrador del proyecto de servicio.
- 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
. - Cambia el proyecto por el proyecto host de VPC compartida.
- Ve a la página de IAM en la consola de Google Cloud.
Ir a la página de IAM - Haz clic en Agregar.
- Agrega
SERVICE_ACCOUNT_NAME
@SERVICE_PROJECT_ID
.iam.gserviceaccount.comal campo Principales y reemplazaSERVICE_ACCOUNT_NAME
por el nombre de la cuenta de servicio. - Selecciona Compute Engine > Usuario de la red de Compute en el menú Funciones.
- Haga clic en Agregar.
gcloud
Si aún no lo hiciste, autentícate en
gcloud
como administrador de VPC compartida. ReemplazaSHARED_VPC_ADMIN
por el nombre del administrador de VPC compartida:gcloud auth login SHARED_VPC_ADMIN
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
Crea una vinculación de políticas para que la cuenta de servicio sea un administrador de proyectos de servicio. Reemplaza
HOST_PROJECT_ID
por el ID del proyecto host,SERVICE_ACCOUNT_NAME
por el nombre de la cuenta de servicio, ySERVICE_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
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.Crea una vinculación de políticas para designar cuentas de servicio como administradores de proyectos 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 lo siguiente:
HOST_PROJECT_ID
: El ID del proyecto host que contiene la red de VPC compartida.SERVICE_ACCOUNT_NAME
: el nombre de la cuenta de servicioSERVICE_PROJECT_ID
: el ID del proyecto de servicio que contiene la cuenta de servicio.ETAG
: 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 APIs 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
- Accede a la consola de Google Cloud como un administrador de VPC compartida.
- En la consola de Google Cloud, ve a la página Configuración.
Ir a la página Configuración - Cambia el proyecto por el proyecto de servicio que contiene la cuenta de servicio que se debe definir como administrador del proyecto de servicio.
- 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
. - Cambia el proyecto por el proyecto host de VPC compartida.
- Ve a la página de IAM en la consola de Google Cloud.
Ir a la página de IAM - Haz clic en Agregar.
- Agrega
SERVICE_PROJECT_NUMBER
@cloudservices.gserviceaccount.comal campo Miembros. - Selecciona Compute Engine > Usuario de la red de Compute en el menú Funciones.
- Haga clic en Agregar.
gcloud
Si aún no lo hiciste, autentícate en
gcloud
como administrador de VPC compartida. ReemplazaSHARED_VPC_ADMIN
por el nombre del administrador de VPC compartida:gcloud auth login SHARED_VPC_ADMIN
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
. ReemplazaSERVICE_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
Crea una vinculación de políticas para que la cuenta de servicio sea un administrador de proyectos de servicio. Reemplaza
HOST_PROJECT_ID
por el ID del proyecto host ySERVICE_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
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.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.Crea una vinculación de políticas para designar cuentas de servicio como administradores de proyectos 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 lo siguiente:
HOST_PROJECT_ID
: El ID del proyecto host que contiene la red de VPC compartida.SERVICE_PROJECT_NUMBER
: el número del proyecto de servicio que contiene la cuenta de servicio.ETAG
: 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 el rol de usuario de la red de Compute (roles/compute.networkUser
) en todo el proyecto host o solo en 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 el rol de administrador de la instancia de Compute (roles/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
En la consola de Google Cloud, ve a la página VPC compartida.
gcloud
Si aún no lo hiciste, autentícate en
gcloud
como administrador de proyectos de servicio. ReemplazaSERVICE_PROJECT_ADMIN
por el nombre del administrador del proyecto de servicio:gcloud auth login SERVICE_PROJECT_ADMIN
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
.
Libera una dirección IPv4 o IPv6 interna estática
Los administradores de proyectos de servicio pueden reservar una dirección IPv4 o IPv6 interna en una subred de una red de VPC compartida. 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 IPv4 disponibles en la subred compartida que elegiste.
Para reservar una dirección IP interna independiente en el proyecto de servicio, completa los siguientes pasos.
Console
- Configura la VPC compartida.
En la consola de Google Cloud, ve a la página VPC compartida.
Accede como un administrador de VPC compartida.
Selecciona el proyecto de servicio del selector de proyectos.
Para ir a la página Direcciones IP, selecciona Red de VPC > direcciones IP.
Haz clic en Reservar dirección IP estática interna.
En el campo Nombre, ingresa un nombre de dirección IP.
En la lista Versión de IP, selecciona la versión de IP requerida:
- Para reservar una dirección IPv4 interna estática, elige IPv4.
- Para reservar una dirección IPv6 interna estática, elige IPv6.
Haz clic en el botón de selección Redes compartidas conmigo.
En las listas Red y Subred, elige una red de VPC y una subred respectivamente.
Especifica cómo deseas reservar la dirección IP:
- En Direcciones IPv4, para especificar una dirección IPv4 interna estática que se reservará, en Dirección IP estática, selecciona Permitirme elegir y, luego, ingresa una dirección IP personalizada. De lo contrario, el sistema asignará de forma automática una dirección IPv4 interna estática en la subred.
- Para las direcciones IPv6, el sistema asigna de forma automática una dirección IPv6 interna estática del rango de direcciones IPv6 interno de la subred.
Opcional: Si deseas compartir la dirección IPv4 interna estática en diferentes frontends, para Motivo, elige Compartida. La selección predeterminada es No compartida.
Haz clic en Reservar.
gcloud
Si aún no lo hiciste, autentícate en la CLI de Google Cloud como administrador del proyecto de servicio. Reemplaza
SERVICE_PROJECT_ADMIN
por el nombre del administrador del proyecto de servicio:gcloud auth login SERVICE_PROJECT_ADMIN
Usa el comando
compute addresses create
.Reserva direcciones IPv4:
gcloud compute addresses create IP_ADDR_NAME \ --project SERVICE_PROJECT_ID \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \ --region=REGION --ip-version=IPV4
Reserva direcciones IPv6:
gcloud compute addresses create IP_ADDR_NAME \ --project SERVICE_PROJECT_ID \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \ --region=REGION --ip-version=IPV6
Reemplaza lo siguiente:
IP_ADDR_NAME
un nombre para el objeto de dirección IPv4SERVICE_PROJECT_ID
: el ID del proyecto de servicioHOST_PROJECT_ID
: el ID del proyecto host de la VPC compartida.REGION
es la región que contiene la subred compartida.SUBNET
: el nombre de la subred compartida
Los detalles adicionales para crear direcciones IP se encuentran en la documentación del SDK.
API
Usa el método addresses.insert
.
Reserva una dirección IPv4 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 lo siguiente:
ADDRESS_NAME
: un nombre para la dirección IP interna reservada.HOST_PROJECT_ID
: el ID del proyecto que contiene la red de VPC compartida.REGION
: la región en la que se ubicará la dirección IPv4 reservada y donde se encuentra la subred compartida.SERVICE_PROJECT_ID
: el ID del proyecto de servicio en el que se reserva la dirección IPv4.SUBNET_NAME
: 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 IPv4 interna estática. Si omites el argumento address
opcional, se seleccionará y reservará una dirección IPv4 disponible.
Especifica la subred del host:
Reserva una dirección IPv4 desde la subred del proyecto host para usarla en el proyecto de servicio:
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Reserva una dirección IPv4 externa estática
Un recurso en un proyecto de servicio puede usar una dirección IPv4 externa estática regional que se define en el proyecto de servicio o en el proyecto host. Por lo tanto, un recurso en los proyectos de servicio adjuntos puede usar una dirección IPv4 externa estática regional que se reserva en el proyecto host.
Reserva una dirección IPv6 externa estática
Los administradores de proyectos de servicio pueden reservar una dirección IPv6 externa estática en un proyecto de servicio. El objeto de configuración de dirección IPv6 se crea en el proyecto de servicio, mientras que su valor proviene del rango de direcciones disponibles en la subred IPv6 compartida que elegiste.
Console
Puedes reservar una dirección IPv6 externa independiente en el proyecto de servicio con la consola de Google Cloud:
- Configura la VPC compartida.
- En la consola de Google Cloud, ve a la página VPC compartida.
Ir a la página VPC compartida - Accede como un administrador de VPC compartida.
- Selecciona el proyecto de servicio del selector de proyectos.
- Para ir a la página Direcciones IP, selecciona Red de VPC > direcciones IP.
- Haz clic en Reservar dirección IP externa estática.
- Elige un nombre para la dirección nueva.
- Especifica si el nivel de servicio de red será Premium o Estándar. La reserva de direcciones estáticas IPv6 solo es compatible con el nivel Premium.
- En Versión de la IP, selecciona IPv6.
- Elige si esta dirección IP será regional o global.
- Si reservas una dirección IP estática para un balanceador de cargas global, elige Global.
- Si reservas una dirección IP estática para una instancia o un balanceador de cargas de red, elige Regional y, luego, elige la región en la que deseas crear la dirección.
- Elija las siguientes opciones:
- Redes en este proyecto: elige esta opción si deseas reservar una dirección IPv6 externa en una subred de la misma red de nube privada virtual (VPC) en la que se reserva la dirección IPv6.
- Redes compartidas conmigo: Elige esta opción si deseas reservar una dirección IPv6 externa en una subred de una red de VPC compartida.
Según tu elección, elige una de las siguientes opciones:
- Red: la red de VPC
- Subred: la subred desde la que se asigna la dirección IPv6 regional estática
- Tipo de extremo: elige Instancia de VM o Balanceador de cargas de red
Opcional: Si elegiste Instancia de VM como el tipo de extremo, selecciona una instancia de VM a la que deseas conectar la dirección IPv6.
Haz clic en Reservar.
gcloud
Si aún no lo hiciste, autentícate en
gcloud
como administrador de proyectos de servicio. ReemplazaSERVICE_PROJECT_ADMIN
por el nombre del administrador del proyecto de servicio:gcloud auth login SERVICE_PROJECT_ADMIN
Usa el comando
gcloud compute addresses create
:gcloud compute addresses create IP_ADDR_NAME \ --project SERVICE_PROJECT_ID \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \ --region=REGION \ --ip-version=IPV6 \ --endpoint-type=[VM | NETLB]
Reemplaza lo siguiente:
IP_ADDR_NAME
un nombre para el objeto de dirección IPv6SERVICE_PROJECT_ID
: el ID del proyecto de servicioHOST_PROJECT_ID
: el ID del proyecto host de la VPC compartida.SUBNET
: el nombre de la subred compartidaREGION
es la región que contiene la subred compartida.
API
Para reservar una dirección IPv6 interna estática como administrador del proyecto de servicio, usa el método addresses.insert
:
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/addresses { "name": "ADDRESS_NAME", "ipVersion": "IPV6", "ipv6EndpointType": "VM|LB", "networkTier": "PREMIUM", "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME", "addressType": "EXTERNAL" }
Reemplaza lo siguiente:
SERVICE_PROJECT_ID
: el ID del proyecto de servicio en el que se reserva la dirección IPv6.REGION
: la región en la que se encuentran la dirección IPv6 reservada y la subred compartida.ADDRESS_NAME
: Es un nombre para la dirección IPv6 externa estática reservada.HOST_PROJECT_ID
: el ID del proyecto que contiene la red de VPC compartida.SUBNET_NAME
: el nombre de la subred compartida
Crea una instancia
Ten en cuenta lo siguiente cuando uses la VPC compartida para crear una instancia:
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 creas una instancia con una dirección IPv4 interna estática reservada, la subred y la región ya están seleccionadas cuando se crea la dirección IPv4 estática. En esta sección, se proporciona un ejemplo de
gcloud
para crear una instancia con una dirección IPv4 interna estática.Los administradores del proyecto de servicio solo pueden crear instancias cuando usan subredes para las cuales se les otorgó permiso. Para determinar qué subredes están disponibles, consulta Enumera las subredes disponibles.
Cuando Google Cloud recibe una solicitud para crear una instancia en una subred de una red de VPC compartida, comprueba si el principal de IAM que realiza la solicitud tiene permiso para usar esa subred compartida. Si la verificación falla, la instancia no se crea y Google Cloud muestra un error de permisos. Para obtener ayuda, comunícate con el administrador de VPC compartida.
Puedes crear una instancia de pila doble si la creas en una subred de pila doble. Las subredes de pila doble solo son compatibles con las redes de VPC de modo personalizado. El tipo de acceso IPv6 de la subred determina si la dirección IPv6 asignada a la VM es una dirección IPv6 interna o externa.
Console
- Configura la VPC compartida.
En la consola de Google Cloud, ve a la página VPC compartida.
Accede como un administrador de VPC compartida.
Selecciona el proyecto de servicio del selector de proyectos.
Para ir a la página Crear una instancia, selecciona Compute Engine > Instancias de VM > Crear instancia.
Especifica un Nombre para la instancia.
En Región, selecciona una región que contenga una subred compartida.
Haz clic en Herramientas de redes en Opciones avanzadas.
En Interfaces de redes, haz clic en el botón de selección Redes compartidas conmigo.
En la lista Subred compartida, selecciona la subred necesaria en la que deseas crear la instancia:
- Para las direcciones IPv4, selecciona cualquier subred de pila única.
- Para las direcciones IPv6, selecciona una subred de pila doble con el tipo de acceso IPv6 requerido.
Selecciona el tipo de pila de IP:
- Para direcciones IPv4, selecciona IPv4 (pila única).
- Para direcciones IPv6, selecciona IPv4 e IPv6 (pila doble).
Especifica cualquier otro parámetro necesario para la instancia.
Haz clic en Crear.
gcloud
Crea una instancia con una dirección IPv4 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
Reemplaza lo siguiente:
INSTANCE_NAME
: el nombre de la instancia.SERVICE_PROJECT_ID
: el ID del proyecto de servicioHOST_PROJECT_ID
: el ID del proyecto host de la VPC compartida.REGION
es la región que contiene la subred compartida.SUBNET
: el nombre de la subred compartidaZONE
una zona de la región especificada. .
Crea una instancia con una dirección IPv4 interna estática reservada en una red de VPC compartida, haz lo siguiente:
- Reserva una dirección IPv4 interna estática en el proyecto de servicio del rango de direcciones disponibles del proyecto host.
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
Reemplaza lo siguiente:
INSTANCE_NAME
: el nombre de la instancia.SERVICE_PROJECT_ID
: el ID del proyecto de servicioIP_ADDR_NAME
: el nombre de la dirección IP estática.ZONE
: una zona en la misma región queIP_ADDR_NAME
HOST_PROJECT_ID
: el ID del proyecto host de la VPC compartida.REGION
: es la región que contiene la subred compartida.SUBNET
: el nombre de la subred compartida que está asociada con la dirección IPv4 interna estática
Crea una instancia con una dirección IPv4 interna efímera y una dirección IPv6 efímera, haz lo siguiente:
gcloud compute instances create INSTANCE_NAME \ --project SERVICE_PROJECT_ID \ --stack-type IPV4_IPV6 \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \ --zone ZONE
Reemplaza lo siguiente:
INSTANCE_NAME
: el nombre de la instancia.SERVICE_PROJECT_ID
: el ID del proyecto de servicioHOST_PROJECT_ID
: el ID del proyecto host de la VPC compartida.REGION
es la región que contiene la subred compartida.SUBNET
: el nombre de la subred compartidaZONE
una zona de la región especificada.
Crea una instancia con una dirección IPv6 externa estática reservada:
gcloud compute instances create INSTANCE_NAME \ --project SERVICE_PROJECT_ID \ --stack-type IPV4_IPV6 \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \ --ipv6-address IPV6_ADDRESS \ --ipv6-prefix-length=96 \ --ipv6-network-tier PREMIUM \ --zone ZONE
Reemplaza lo siguiente:
INSTANCE_NAME
: el nombre de la instancia.SERVICE_PROJECT_ID
: el ID del proyecto de servicioHOST_PROJECT_ID
: el ID del proyecto host de la VPC compartida.REGION
es la región que contiene la subred compartida.SUBNET
: el nombre de la subred compartidaIPV6_ADDRESS
: La dirección IPv6 que se asignará a la VM.ZONE
una zona de la región especificada.
API
Para crear una instancia con una dirección IPv4 interna efímera, 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 lo siguiente:
INSTANCE_NAME
: un nombre para la instancia.HOST_PROJECT_ID
: el ID del proyecto que contiene la red de VPC compartida.MACHINE_TYPE
: un tipo de máquina para la instancia.REGION
es la región que contiene la subred compartida.SERVICE_PROJECT_ID
: el ID del proyecto de servicioSOURCE_IMAGE
: una imagen de la instancia.SUBNET
: el nombre de la subred compartidaZONE
una zona de la región especificada.
Para obtener más información, consulta el método
instances.insert
.Para crear una instancia con una dirección IPv4 interna reservada, especifica la subred y el nombre de la dirección IPv4 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 lo siguiente:
ADDRESS_NAME
: el nombre de la dirección IPv4 interna reservada.INSTANCE_NAME
: un nombre para la instancia.HOST_PROJECT_ID
: el ID del proyecto que contiene la red de VPC compartida.MACHINE_TYPE
: un tipo de máquina para la instancia.REGION
es la región que contiene la subred compartida.SERVICE_PROJECT_ID
: el ID del proyecto de servicioSOURCE_IMAGE
: una imagen de la instancia.SUBNET
: el nombre de la subred compartidaZONE
una zona de la región especificada.
Para obtener más información, consulta el método
instances.insert
.Para crear una instancia con una dirección IPv4 interna efímera y una dirección IPv6 efímera, especifica la subred y el tipo de pila:
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", "stackType": "IPv4_IPv6" } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "SOURCE_IMAGE" } } ] }
Reemplaza lo siguiente:
INSTANCE_NAME
: un nombre para la instancia.HOST_PROJECT_ID
: el ID del proyecto que contiene la red de VPC compartida.MACHINE_TYPE
: un tipo de máquina para la instancia.REGION
es la región que contiene la subred compartida.SERVICE_PROJECT_ID
: el ID del proyecto de servicioSOURCE_IMAGE
: una imagen de la instancia.SUBNET
: el nombre de la subred compartidaZONE
una zona de 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:
Crea una instancia de VM en un proyecto de servicio con una dirección IPv4 efímera desde la subred compartida del proyecto host:
Crea una instancia de VM en un proyecto de servicio con una dirección IPv4 estática reservada desde la subred compartida del proyecto host:
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Crea una plantilla de instancias
Ten en cuenta lo siguiente cuando uses la VPC compartida para crear una plantilla de instancia:
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 selecciona 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 principal de IAM crea una plantilla de instancia, Google Cloud no realiza una verificación de permisos para ver si el principal 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.
Puedes crear una plantilla de instancias de pila doble si la creas en una subred de pila doble. Las subredes de pila doble solo son compatibles con las redes de VPC de modo personalizado. El tipo de acceso IPv6 de la subred determina si la dirección IPv6 asignada a la VM es una dirección IPv6 interna o externa.
Console
- Configura la VPC compartida.
- En la consola de Google Cloud, ve a la página VPC compartida.
Ir a la página VPC compartida - Accede como un administrador de VPC compartida.
- Selecciona el proyecto de servicio del selector de proyectos.
- Para ir a la página Crear una plantilla de instancias, selecciona Compute Engine > Plantillas de instancias > Crear plantillas de instancias.
- Especifica un Nombre para la plantilla de instancias.
- En la sección Opciones avanzadas, haz clic en Herramientas de redes.
- En la sección Interfaces de red, haz clic en el botón de selección Redes compartidas conmigo.
- En la lista Subred compartida, selecciona la subred necesaria en la que deseas crear la plantilla de instancia:
- Para las direcciones IPv4, selecciona cualquier subred de pila única.
- Para las direcciones IPv6, selecciona una subred de pila doble con el tipo de acceso IPv6 requerido.
- Selecciona el tipo de pila de IP:
- Para direcciones IPv4, selecciona IPv4 (pila única).
- Para direcciones IPv6, selecciona IPv4 e IPv6 (pila doble).
- Especifica cualquier otro parámetro necesario para la plantilla de instancias.
- Haz clic en Crear.
gcloud
Crea una plantilla de instancias de solo IPv4 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
Reemplaza lo siguiente:
TEMPLATE_NAME
: el nombre de la plantilla.SERVICE_PROJECT_ID
: el ID del proyecto de servicioHOST_PROJECT_ID
: el ID del proyecto host de la VPC compartida.NETWORK
: es el nombre de la red de VPC compartida.
Si deseas crear una plantilla de instancias de solo IPv4 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
Reemplaza lo siguiente:
TEMPLATE_NAME
: el nombre de la plantilla.SERVICE_PROJECT_ID
: el ID del proyecto de servicioHOST_PROJECT_ID
: el ID del proyecto host de la VPC compartida.REGION
es la región que contiene la subred compartida.SUBNET
: el nombre de la subred compartida
Crea una plantilla de instancias de pila doble que use una subred en una red de VPC compartida de modo personalizado, haz lo siguiente:
gcloud compute instance-templates create TEMPLATE_NAME \ --project SERVICE_PROJECT_ID \ --stack-type IPV4_IPV6 \ --region REGION \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
Reemplaza lo siguiente:
TEMPLATE_NAME
: el nombre de la plantilla.SERVICE_PROJECT_ID
: el ID del proyecto de servicioHOST_PROJECT_ID
: el ID del proyecto host de la VPC compartida.REGION
es la región que contiene la subred compartida.SUBNET
: el nombre de la subred compartida
API
Crea una plantilla de instancias de solo IPv4 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 lo siguiente:
HOST_PROJECT_ID
: el ID del proyecto que contiene la red de VPC compartida.SERVICE_PROJECT_ID
: el ID del proyecto de servicioNETWORK
: es el nombre de la red de VPC compartida.
Para obtener más información, consulta el método
instanceTemplates.insert
.Crea una plantilla de instancias de solo IPv4 que use una subred creada manualmente en una 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 lo siguiente:
HOST_PROJECT_ID
: el ID del proyecto que contiene la red de VPC compartida.REGION
es la región que contiene la subred compartida.SERVICE_PROJECT_ID
: el ID del proyecto de servicioSUBNET_NAME
: el nombre de la subred compartida
Para obtener más información, consulta el método
instanceTemplates.insert
.Para crear una plantilla de instancias de pila doble que use una subred en una red de VPC compartida de modo personalizado, especifica la subred y el tipo de pila:
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", "stackType": "IPV4_IPV6" } ] ... }
Reemplaza lo siguiente:
HOST_PROJECT_ID
: el ID del proyecto que contiene la red de VPC compartida.REGION
es la región que contiene la subred compartida.SERVICE_PROJECT_ID
: el ID del proyecto de servicioSUBNET_NAME
: 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 IPv4 de las VM provienen de la subred compartida del proyecto host.
La subred debe existir en la misma región donde se crearán las instancias de VM.
Especifica la subred del host:
Crea una plantilla de instancias de VM en el proyecto de servicio:
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Cree 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 principal 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 crea y Google Cloud muestra un error:
Required 'compute.subnetworks.use' permission for 'projects/SUBNET_NAME
.Enumera las subredes disponibles para determinar cuáles se pueden usar y comunícate con el administrador de VPC compartida si la cuenta de servicio necesita acceso adicional. Para obtener más información, consulta Cuentas de servicio como administradores de proyectos de servicio.
Para obtener más información, consulta Crea grupos de instancias administrados en la documentación de Compute Engine.
Crea un balanceador de cargas HTTP(S)
Hay muchas formas de configurar balanceadores de cargas de aplicaciones externos dentro de una red de VPC compartida. Sin importar el tipo de implementación, todos los componentes del balanceador de cargas deben estar en la misma organización y en la misma red de VPC compartida.
Para obtener más información sobre las arquitecturas de VPC compartidas compatibles, consulta los siguientes vínculos:
- Arquitectura de VPC compartida para balanceadores de cargas de aplicaciones externos.
- Arquitectura de VPC compartida para balanceadores de cargas de aplicaciones internos.
Crea un balanceador de cargas de red de transferencia interno
En el siguiente ejemplo, se ilustra lo que debes tener en cuenta cuando creas un balanceador de cargas de red de transferencia interno en una red de VPC compartida. Los administradores del proyecto de servicio pueden crear un balanceador de cargas de red de transferencia interno 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 red de transferencia interno en un entorno de VPC compartida, consulta la arquitectura de VPC compartida.
Console
Ve a la página Balanceo de cargas en la consola de Google Cloud.
Ir a la página Balanceo de cargasCrea 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.
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
Reemplaza lo siguiente:
FR_NAME
: el nombre de la regla de reenvío.SERVICE_PROJECT_ID
: el ID del proyecto de servicio.REGION
es la región que contiene la subred compartida.IP_PROTOCOL
:TCP
oUDP
, que coincide con el protocolo del servicio de backend del balanceador de cargas.PORT
: el puerto numérico o la lista de puertos para el balanceador de cargas.BACKEND_SERVICE_NAME
: el nombre del servicio de backend (ya creado como parte del procedimiento general de creación de un balanceador de cargas de red de transferencia interno).HOST_PROJECT_ID
: es el ID del proyecto host de la VPC compartida.SUBNET
: el nombre de la subred compartidaINTERNAL_IP
: una dirección IP interna en la subred compartida (si no se especifica, se seleccionará una disponible)
Para obtener más opciones, consulta el comando 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 lo siguiente:
BE_NAME
: el nombre del servicio de backend (ya creado como parte del procedimiento general de creación de un balanceador de cargas de red de transferencia interno).FR_NAME
: un nombre para la regla de reenvío.HOST_PROJECT_ID
: el ID del proyecto host de la VPC compartida.IP_ADDRESS
: una dirección IP interna en la subred compartida.IP_PROTOCOL
:TCP
oUDP
, que coincide con el protocolo del servicio de backend del balanceador de cargas.PORT
: 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
: el ID del proyecto de servicioSUBNET
: el nombre de la subred compartida
Para obtener más información, consulta el método forwardingRules.insert
.
Terraform
Puedes usar un bloque de datos de Terraform para especificar la subred y la red del host. Luego, usa un recurso de Terraform para crear la regla de reenvío.
Especifica la red host:
Especifica la subred del host:
En el proyecto de servicio, crea una regla de reenvío en la red y la subred del proyecto host de la siguiente forma:
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
¿Qué sigue?
- Consulta VPC compartida para obtener más información.
- Para obtener instrucciones sobre cómo configurar clústeres de Google Kubernetes Engine con una VPC compartida, consulta Configura clústeres con una VPC compartida.
- Obtén información para configurar el acceso a una red de VPC compartida desde Cloud Run, Cloud Run Functions o el entorno estándar de App Engine.
- Para obtener instrucciones sobre cómo borrar una configuración de VPC compartida, consulta Desaprovisiona una VPC compartida.