En esta página, se describe cómo organizar tu Google Cloud jerarquía mediante la anidación de proyectos en carpetas.
Descripción general
En la Google Cloud jerarquía de recursos, los proyectos actúan como las unidades organizativas y de facturación principales para tus recursos. Se encuentran entre las carpetas (o el recurso de la organización) y los recursos subyacentes, como las instancias de máquina virtual y los buckets de almacenamiento.
Si bien las carpetas son un mecanismo de agrupación opcional, organizar tus proyectos en carpetas proporciona varias ventajas clave:
Gobernanza escalable: Aplica automáticamente políticas de Identity and Access Management (IAM) y restricciones de seguridad a varios proyectos a través de la herencia basada en la jerarquía.
Alineación empresarial: Estructura tu entorno de nube para reflejar los departamentos, los centros de costos o los ciclos de vida de desarrollo de tu organización (como Dev, Staging y Prod).
Administración delegada: Otorga a equipos específicos la autonomía para administrar sus propios proyectos y subcarpetas sin requerir permisos amplios a nivel de la organización.
Visibilidad de costos: Agrupa proyectos relacionados para simplificar el seguimiento del gasto y mejorar el análisis de facturación para unidades de negocios o aplicaciones específicas.
Aislamiento de seguridad: Establece límites de confianza claros para limitar el área afectada de los cambios de configuración y reducir los riesgos de seguridad en diferentes entornos.
Crea un proyecto en una carpeta
Para crear un proyecto en una carpeta, debes tener la función creador de proyectos (roles/resourcemanager.projectCreator) en la carpeta. Esta función se puede heredar de una carpeta superior.
Console
- En la Google Cloud consola, abre la página Administrar recursos.
- Ve a la página Administrar recursos.
- Selecciona tu recurso de organización en el menú desplegable Organización en la parte superior izquierda de la página.
- Haz clic en Crear proyecto.
- Ingresa un Nombre de proyecto (Project name).
- En el cuadro Destino, haz clic en Explorar para seleccionar la carpeta en la que deseas crear el proyecto.
- Haz clic en Crear.
gcloud
gcloud projects create PROJECT_ID --folder FOLDER_ID
Reemplaza lo siguiente:
PROJECT_ID: el ID del proyecto que se crearáFOLDER_ID: el ID de la carpeta en la que se debe crear el proyecto
REST
El JSON de la solicitud luce así:
request_json= '{
name: DISPLAY_NAME, projectId: PROJECT_ID, parent: {id: PARENT_ID, type: PARENT_TYPE}
}'
La solicitud curl luce así:
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer ${bearer_token}" \
-d "$request_json" \
https://cloudresourcemanager.googleapis.com/v3/projects
Reemplaza lo siguiente:
PROJECT_ID: el identificador único del proyecto que se está creando Por ejemplo,my-awesome-proj-123.DISPLAY_NAME: el nombre visible del proyecto que se está creandoPARENT_ID: el identificador único del elemento superior que se está creando Por ejemplo,123.PARENT_TYPE: el tipo del elemento superior, comofolderoorganization
No incluyas información sensible en el nombre de tu carpeta ni en otros nombres de recursos. Cualquier referencia a la carpeta o los recursos relacionados expone el nombre de la carpeta y el nombre del recurso.
Mueve un proyecto a una carpeta
Debes considerar con cuidado las implicaciones de las políticas antes de mover un proyecto dentro o fuera de una carpeta. Las políticas de Allow que definas a nivel del proyecto se moverán con el proyecto, pero las políticas heredadas de un recurso superior no se moverán.
Cuando mueves un proyecto, cualquier política de Identity and Access Management o política de la organización que esté conectada directamente se moverá con él. Sin embargo, un proyecto en tu jerarquía de recursos también se ve afectado por las políticas que hereda de los recursos superiores. Si un proyecto hereda un rol de IAM que otorga a los usuarios permiso para usar un servicio en particular, los usuarios no tendrán acceso a ese servicio en el destino, a menos que también hereden el permiso en el destino.
Por ejemplo, piensa en una cuenta de servicio que tenga el rol Creador de objetos de almacenamiento vinculado a un usuario en la carpeta A. La cuenta de servicio tiene permisos para subir datos a Cloud Storage en cualquier proyecto de la carpeta A. Si moviste uno de estos proyectos a la carpeta B, que no tiene los mismos permisos heredados, la cuenta de servicio de ese proyecto pierde la capacidad de subir datos, lo que provoca una interrupción del servicio.
Estas mismas consideraciones se aplican si las políticas de la organización se definen en las carpetas de origen y destino. Al igual que las políticas de IAM, las políticas de la organización se heredan. Por lo tanto, debes asegurarte de que las políticas de la organización sean coherentes entre las carpetas de origen y de destino.
Para obtener más información sobre las políticas de la organización, consulta Introducción al servicio de las políticas de la organización.
Para mover un proyecto, necesitas el rol de IAM Encargado de la transferencia del proyecto (roles/resourcemanager.projectMover) en la carpeta de origen y en la de destino. Si el recurso no está en una carpeta, necesitas este rol en el recurso de la organización.
Estos roles te otorgan los siguientes permisos obligatorios:
resourcemanager.projects.updateen el proyecto- Si el recurso está en una carpeta:
resourcemanager.projects.moveen la carpeta de origen y el destino - Si el recurso no está en una carpeta:
resourcemanager.projects.moveen el recurso de la organización
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Console
Para mover un proyecto, sigue estos pasos:
En la Google Cloud consola, ve a la página Administrar recursos.
Selecciona tu organización en el menú desplegable Organización en la parte superior izquierda de la página.
Haz clic en la fila del proyecto para seleccionarlo en la lista de recursos. Ten en cuenta que no debes hacer clic en el nombre del proyecto, que te lleva a la página de Identity and Access Management (IAM) del proyecto.
Haz clic en el menú de opciones (los puntos suspensivos verticales) de la fila y haz clic en Mover.
Haz clic en Explorar para seleccionar la carpeta a la que deseas mover el proyecto.
Haz clic en Mover.
gcloud
Para mover un proyecto, ejecuta el
gcloud beta projects move
comando:
gcloud beta projects move PROJECT_ID \ --DESTINATION_TYPE DESTINATION_ID
Reemplaza lo siguiente:
PROJECT_ID: El ID o el número del proyecto que deseas mover.DESTINATION_TYPE: El tipo de destino, ya seaorganizationofolder.DESTINATION_ID: El ID del recurso de la organización o la carpeta a la que deseas mover el proyecto.
REST
Puedes usar el método v3
projects.move
para mover un proyecto.
Solicitud:
POST https://cloudresourcemanager.googleapis.com/v3/{name=PROJECT_NAME}:move
{
"destinationParent": DESTINATION_PARENT
}
Reemplaza lo siguiente:
PROJECT_NAME: el nombre del proyecto que deseas actualizar Por ejemplo,projects/415104041262DESTINATION_PARENT: el nuevo recurso de organización superior o la carpeta en la que deseas mover el proyecto Por ejemplo:organizations/12345678901
Si se considera correcta, la solicitud mostrará una operación que se puede usar para hacer un seguimiento del movimiento del proyecto.
Mueve una carpeta a otra
A fin de mover una carpeta a otra, debes tener el permiso resourcemanager.folders.move para las carpetas de origen y de destino.
Console
El proceso de mover carpetas a otras carpetas en la consola es similar al de mover proyectos.
- En la Google Cloud consola, abre la página Administrar recursos.
- Selecciona tu recurso de organización en el menú desplegable Organización en la parte superior izquierda de la página.
- Haz clic en la fila de tu carpeta para seleccionarla en la lista de proyectos y carpetas.
- Haz clic en el menú de opciones (los puntos suspensivos verticales) de la fila y haz clic en Mover.
- Haz clic en Explorar para seleccionar la carpeta a la que deseas moverla.
- Haz clic en Mover.
gcloud
Para mover una carpeta dentro del recurso de la organización, ejecuta el siguiente comando:
gcloud resource-manager folders move FOLDER_ID \
--organization=PARENT_ID
Reemplaza lo siguiente:
FOLDER_ID: el ID de la carpeta que se moveráPARENT_ID: el ID del recurso de la organización superior
Para mover una carpeta dentro de otra carpeta, ejecuta el siguiente comando:
gcloud resource-manager folders move FOLDER_ID \
--folder=PARENT_ID
Reemplaza lo siguiente:
FOLDER_ID: el ID de la carpeta que se moveráPARENT_ID: el ID de la carpeta superior
REST
El JSON de la solicitud luce así:
request_json= '{
destinationParent: "folders/DESTINATION_FOLDER_ID"
}'
La solicitud de curl para mover carpetas:
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer ${bearer_token} \
-d "$request_json" \
https://cloudresourcemanager.googleapis.com/v3/folders/DISPLAY_NAME:move
Reemplaza lo siguiente:
- DESTINATION_FOLDER_ID: el ID de la carpeta en la que mueves otra carpeta, por ejemplo,
98765. - DISPLAY_NAME: el nombre visible de la carpeta que mueves, por ejemplo "Mi carpeta genial".
La respuesta para mover carpetas luce así:
{
"name": "operations/fm.1234567890",
"metadata": {
"@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
"displayName": "DISPLAY_NAME",
"operationType": "MOVE"
}
}
La solicitud de curl para obtener operaciones luce así:
curl -H "Authorization: Bearer ${bearer_token}" \
https://cloudresourcemanager.googleapis.com/v3/operations/fm.1234567890
La respuesta para obtener operaciones luce así:
{
"name": "operations/fm.1234567890",
"metadata": {
"@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
"displayName": "DISPLAY_NAME",
"operationType": "MOVE"
},
"done": true,
"response": {
"@type": "type.googleapis.com/google.cloud.resourcemanager.v3.Folder",
"name": "folders/12345",
"parent": "folders/98765",
"displayName": "DISPLAY_NAME",
"lifecycleState": "ACTIVE",
"createTime": "2017-07-19T23:29:26.018Z",
"updateTime": "2017-07-20T00:54:44.295Z"
}
}
Ve o enumera proyectos dentro de una carpeta
Para ver o enumerar proyectos que son elementos secundarios directos de una carpeta, debes tener el rol Visualizador de carpetas (roles/resourcemanager.folderViewer) o el rol Navegador (roles/browser) en la carpeta.
Console
En la Google Cloud consola, abre la página Administrar recursos.
En el menú desplegable Organización, selecciona tu organización.
En la lista de recursos, haz clic en el nombre de la carpeta para expandirla y ver sus proyectos.
Opcional: Usa la barra Filtro en la parte superior de la lista para buscar un proyecto específico por nombre o ID.
gcloud
Para enumerar todos los proyectos que son elementos secundarios directos de una carpeta específica, usa el comando gcloud projects list con un filtro:
gcloud projects list --filter="parent.id:FOLDER_ID AND parent.type:folder"
Reemplaza FOLDER_ID por el ID único de la carpeta.
REST
Usa el método projects.list con un parámetro de consulta que defina la carpeta superior.
Solicitud HTTP: GET https://cloudresourcemanager.googleapis.com/v3/projects?parent=folders/FOLDER_ID
A continuación, se muestra un ejemplo del comando curl:
Bash
curl -H "Authorization: Bearer $(gcloud auth print-access-token)"
"https://cloudresourcemanager.googleapis.com/v3/projects?parent=folders/FOLDER_ID"
Reemplaza FOLDER_ID por el ID único de la carpeta.
Filtra proyectos por etiquetas (opcional)
Si tienes una gran cantidad de proyectos dentro de una carpeta, puedes usar filtros para encontrar recursos específicos según los metadatos.
Console
- En la barra Filtro de la página Administrar recursos, escribe
Labels:key=valuepara reducir la lista a proyectos con etiquetas específicas. Ten en cuenta que la consola proporciona compatibilidad limitada para el filtrado visual por etiquetas. Usa Google Cloud CLI para consultas de etiquetas avanzadas.
gcloud
Para enumerar los proyectos dentro de una carpeta que tienen un valor de etiqueta específico, usa la marca --filter con el atributo tags:
gcloud projects list \ --filter="parent.id:FOLDER_ID AND tags.TAG_KEY_PARENT/TAG_KEY_SHORT_NAME:TAG_VALUE_SHORT_NAME"
Reemplaza lo siguiente:
FOLDER_ID: el ID único de la carpetaTAG_KEY_PARENT: el ID del recurso superior de la clave de etiqueta, como una organización o un proyectoTAG_KEY_SHORT_NAME: el nombre corto de la clave de etiquetaTAG_VALUE_SHORT_NAME: el nombre corto del valor de la etiqueta
Para filtrar por etiquetas, haz lo siguiente:
gcloud projects list \ --filter="parent.id:FOLDER_ID AND labels.KEY=VALUE"
Reemplaza lo siguiente:
FOLDER_ID: el ID único de la carpetaKEY: la clave de la etiquetaVALUE: el valor de la etiqueta
¿Qué sigue?
- Obtén información para ver y actualizar proyectos.
- Obtén información sobre los roles y permisos para administrar proyectos.