Google Cloud ofrece Gestión de Identidades y Accesos (IAM), que te permite dar un acceso más granular a recursos Google Cloud específicos y evitar el acceso no deseado a otros recursos. IAM te permite adoptar el principio de seguridad de mínimos accesos, de forma que solo concedas el acceso necesario a tus recursos.
La gestión de identidades y accesos te permite controlar quién (usuarios) tiene qué acceso (roles) a qué recursos configurando políticas de permiso. Las políticas de permitir conceden roles específicos a un usuario, lo que le otorga determinados permisos.
En esta página se explican los roles de IAM disponibles en el recurso de organización y cómo crear y gestionar políticas de permisos para recursos de organización mediante la API de Cloud Resource Manager. Para obtener más información, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
Permisos y roles
Para controlar el acceso a los recursos, Google Cloud requiere que las cuentas que realicen solicitudes de API tengan los roles de gestión de identidades y accesos adecuados. Los roles de gestión de identidades y accesos incluyen permisos que permiten a los usuarios realizar acciones específicas enGoogle Cloud recursos. Por ejemplo, el permiso resourcemanager.organizations.get
permite a un usuario obtener detalles sobre el recurso de su organización.
No se conceden permisos directamente a los usuarios, sino que se les asignan roles, que incluyen uno o varios permisos.
Puedes designar una o más funciones en el mismo recurso.
Usar roles predefinidos
En la siguiente tabla se enumeran los roles que puede asignar para acceder a las propiedades de un recurso de organización, la descripción de lo que hace el rol y los permisos incluidos en ese rol.
.Rol | Permisos |
---|---|
Administrador de la organización( Permiso para gestionar políticas de gestión de identidades y accesos, y ver políticas de organización para organizaciones, carpetas y proyectos. Recursos de nivel más bajo en los que puedes asignar este rol:
|
|
Lector de organización( Proporciona acceso para ver una organización. Recursos de nivel más bajo en los que puedes asignar este rol:
|
|
Administrador de políticas de organización( Proporciona acceso para definir las restricciones que una organización quiere aplicar a la configuración de los recursos de nube mediante la definición de políticas de la organización. Recursos de nivel más bajo en los que puedes asignar este rol:
|
|
Navegador( Acceso de lectura para consultar la jerarquía de un proyecto, incluida la carpeta, la organización y la política de permisos. Este rol no incluye el permiso para ver los recursos del proyecto. Recursos de nivel más bajo en los que puedes asignar este rol:
|
|
Crear roles personalizados
Además de los roles predefinidos que se describen en este tema, también puedes crear roles personalizados, que son conjuntos de permisos que puedes adaptar a tus necesidades. Cuando crees un rol personalizado para usarlo con Resource Manager, ten en cuenta lo siguiente:- Los permisos de lista y de obtención, como
resourcemanager.projects.get/list
, siempre deben concederse como un par. - Si tu rol personalizado incluye los permisos
folders.list
yfolders.get
, también debe incluirprojects.list
yprojects.get
. - Ten en cuenta que el permiso
setIamPolicy
para los recursos de organización, carpeta y proyecto permite al usuario conceder todos los demás permisos, por lo que debe asignarse con cuidado.
Ver el acceso de un recurso de organización
Para ver qué roles se han concedido a un usuario en un recurso de una organización, puedes obtener la política de permisos de ese recurso. Puedes ver la política de permitidos de un recurso de organización mediante la Google Cloud consola, la CLI de Google Cloud o el método getIamPolicy()
.
Consola
Para ver los roles concedidos a nivel de recurso de organización mediante la Google Cloud consola, sigue estos pasos:
Ve a la página Gestionar recursos de la Google Cloud consola:
En la lista desplegable Organización, selecciona el recurso de tu organización.
Marca la casilla del recurso de la organización.
En el panel de información de la derecha, en Permisos, haz clic para desplegar un rol y mostrar todos los miembros que lo tienen.
gcloud
Obtén la política de permiso del recurso de organización con el comando get-iam-policy:
gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json >
[FILENAME.JSON]
El comando muestra la política de permiso, que es similar a la siguiente:
bindings:
- members:
- user:testuser1@gcp-test.com
role: roles/editor
- members:
- user:admin@gcp-test.com
role:roles/resourcemanager.organizationAdmin
- members:
- user:testuser2@gcp-test.com
role: roles/resourcemanager.projectCreator
etag": "BwU1aRxWk30="
API
El siguiente fragmento de código devuelve la política de permiso del recurso de la organización https://cloudresourcemanager.googleapis.com/v3/organizations/12345
.
Solicitud:
POST
https://cloudresourcemanager.googleapis.com/v3/organizations/12345:getIamPolicy
Respuesta:
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKHHiQ="
}
Python
El método
getIamPolicy()
te permite obtener una política de permiso que se haya definido anteriormente.
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
resource=flags.organizationId, body={}).execute()
print json.dumps(policy, indent=2)
Conceder acceso a un recurso de organización
Los administradores de la organización pueden asignar roles de gestión de identidades y accesos a los miembros del equipo para que puedan acceder a los recursos y las APIs de la organización. Puedes conceder roles a una dirección de correo de una cuenta de usuario, a un grupo de Google, a una cuenta de servicio o a un dominio de G Suite. Puedes usar la Google Cloud consola, la CLI de gcloud o el método setIamPolicy()
para asignar roles.
Consola
Para definir el control de acceso a nivel de recurso de organización mediante la Google Cloud consola, sigue estos pasos:
Ve a la página Gestionar recursos de la Google Cloud consola:
En la lista desplegable Organización, selecciona el recurso de tu organización.
Marca la casilla del recurso de la organización. Si no tienes ningún recurso de carpeta, el recurso de organización no se mostrará. Para continuar, consulta las instrucciones para conceder roles en la página Gestión de identidades y accesos.
Si el panel de información de la derecha está oculto, haz clic en la opción Mostrar panel de información de la esquina superior derecha.
En la pestaña Permisos del panel de información, haz clic en Añadir miembro.
En el campo Miembros nuevos, introduce los miembros del equipo que quieras añadir. Puedes designar una dirección de correo de una cuenta de usuario, un grupo de Google, una cuenta de servicio o un dominio de G Suite.
En la lista desplegable Selecciona un rol, elige el rol que quieras asignar a los miembros del equipo.
Haz clic en Añadir.
gcloud
Para definir la política de permiso de un recurso de la organización con el comando gcloud
, sigue estos pasos:
Obtén la política de permiso del recurso de la organización con el comando
get-iam-policy
y genera la política en un archivo JSON:gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json > [FILENAME.JSON]
El contenido del archivo JSON será similar al siguiente:
{
"bindings": [
{
"members": [
"user:testuser1@gcp-test.com"
],
"role": "roles/editor"
},
{
"members": [
"user:admin@gcp-test.com",
],
"role": "roles/resourcemanager.organizationAdmin"
},
{
"members": [
"user:testuser2@gcp-test.com"
],
"role": "roles/resourcemanager.projectCreator"
},
],
"etag": "BwU1aRxWk30="
}
- Con un editor de texto, abre el archivo JSON y añade una entrada a la matriz de enlaces que defina el administrador de la organización. Por ejemplo, para convertir a
anotheradmin@gcp-test.com
en administrador de la organización, puedes modificar el ejemplo anterior de la siguiente manera:
{
"bindings": [
{
"members": [
"user:testuser1@gcp-test.com"
],
"role": "roles/editor"
},
{
"members": [
"user:admin@gcp-test.com",
"user:anotheradmin@gcp-test.com"
],
"role": "roles/resourcemanager.organizationAdmin"
},
{
"members": [
"user:testuser20@gcp-test.com"
],
"role": "roles/resourcemanager.projectCreator"
},
],
"etag": "BwU1aRxWk30="
}
- Actualiza la política de permiso del recurso de organización ejecutando el siguiente comando:
gcloud alpha organizations set-iam-policy [ORGANIZATION_ID] policy.json
API
Solicitud:
POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:setIamPolicy
{
"policy": {
"version": "0",
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKHHiQ="
}
}
Respuesta:
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:email1@gmail.com"
]
},
{
"role": "roles/resourcemanager.projectCreator",
"members": [
"user:email2@gmail.com",
"user:email3@gmail.com",
"serviceAccount:my-other-app@appspot.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKJUiQ="
}
El método setIamPolicy()
te permite asignar roles a los usuarios adjuntando una política de permiso al recurso de la organización. La política de permiso es una colección de vinculaciones que definen .
Lectura, modificación y escritura: un patrón habitual para actualizar los metadatos de un recurso, como la política de permiso, consiste en leer su estado actual, actualizar los datos localmente y, a continuación, enviar los datos modificados para escribirlos. Este patrón puede provocar un conflicto si dos o más procesos independientes intentan la secuencia simultáneamente. Por ejemplo, supongamos que hay dos propietarios de un proyecto y ambos intentan hacer cambios contradictorios en la política de permisos al mismo tiempo. En algunos casos, los cambios realizados por uno de los propietarios del proyecto podrían fallar. IAM resuelve este problema mediante una propiedad etag en las políticas de permiso. Esta propiedad se usa para verificar si la política de permiso ha cambiado desde la última solicitud. Cuando haces una solicitud con un valor de etag, este valor se compara con el valor de etag asociado a la política. Escribe la política de permiso solo si los valores de etag coinciden.
Cuando actualices una política de permitidos, primero obtén la política de permitidos con getIamPolicy()
, actualízala y, a continuación, escribe la política de permitidos actualizada con setIamPolicy()
. Utilice el valor de etag al definir la política allow solo si la política allow correspondiente de GetPolicyResponse
contiene un valor de etag.
Python
El método
setIamPolicy()
te permite adjuntar una política de permiso a un recurso. El método setIamPolicy
usa un SetIamPolicyRequest
, que contiene una política de permiso que se va a definir y el recurso al que se adjunta la política de permiso. Devuelve la política de
permisos resultante. Se recomienda seguir el patrón de lectura, modificación y escritura al actualizar una política de permiso con setIamPolicy()
.
A continuación, se muestra un ejemplo de código para definir una política de permiso para un recurso de organización:
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
resource=flags.organizationId, body={}).execute()
admin_binding = next(
(binding
for binding in policy['bindings']
if binding['role'] == 'roles/resourcemanager.organizationAdmin'),
None)
# Add an empty Organization Administrator binding if not present.
if not admin_binding:
admin_binding = {
'role': 'roles/resourcemanager.organizationAdmin',
'members': []
}
policy['bindings'].append(admin_binding)
# Add the new Admin (if necessary).
new_admin = 'user:' + flags.adminEmail
if new_admin not in admin_binding['members']:
admin_binding['members'].append(new_admin)
policy = crm.organizations().setIamPolicy(
resource=flags.organizationId,
body={
'resource': flags.organizationId,
'policy': policy
}).execute()
print json.dumps(policy, indent=2)
Restringir la visibilidad de los proyectos a los usuarios
Los usuarios pueden ver todos los proyectos a los que tienen acceso en la consola Google Cloud y en las consultas de búsqueda, independientemente de si están o no en el recurso de organización seleccionado por el usuario. Puede usar el servicio de políticas de la organización para restringir el conjunto de proyectos que se devuelven en las consultas y en la Google Cloud consola. Se puede usar para restringir el acceso de los usuarios a los proyectos de tu dominio.
La restricción de la política de organización constraints/resourcemanager.accessBoundaries
es una restricción de lista que se aplica al recurso de tu organización. La restricción acepta una lista de IDs de recursos de organización, que definen el conjunto de recursos de organización que hacen que sus recursos sean visibles para los usuarios en una consulta o en la Google Cloud consola.
Los proyectos aparecen en No organization
si el usuario no tiene el permiso resourcemanager.organizations.get
en el recurso de la organización principal del proyecto. Esto puede dar la impresión de que un proyecto que no forma parte del recurso de tu organización no está asociado a ningún recurso de organización. Si usas la restricción resourcemanager.accessBoundaries
para inhabilitar un recurso de organización, los proyectos que pertenezcan a ese recurso de organización no aparecerán en las consultas ni en la consola de Google Cloud . Los proyectos que aún no se hayan migrado a un recurso de organización no se verán si se aplica esta restricción.
Te recomendamos que migres los proyectos que estén por debajo de No organization
a tu recurso de organización antes de aplicar esta restricción. Para obtener información sobre cómo migrar proyectos a un recurso de organización, consulta el artículo Mover un proyecto.
Para obtener información sobre cómo definir una política de la organización, consulta Usar restricciones.
Conceder acceso condicional
Algunos roles de gestión de identidades y accesos, como el de administrador de políticas de la organización (roles/orgpolicy.policyAdmin
), solo se pueden conceder en un recurso de organización.
Debido a la herencia de políticas, este rol se hereda normalmente en todos los recursos de la organización.
Para tener más control sobre los recursos en los que se concede el rol, puedes usar condiciones de gestión de identidades y accesos. Si usas etiquetas con condiciones, puedes conceder acceso a los recursos solo si tienen la etiqueta especificada. Por ejemplo, la siguiente política de permisos
concede el rol Administrador de políticas de la organización solo en los recursos que
tienen la etiqueta environment: dev
y no en ningún otro recurso:
{
"bindings": [
{
"members": [
"group:my-group@example.com"
],
"role": "roles/orgpolicy.policyAdmin",
"condition": {
"title": "Dev_environment_only",
"description": "Only granted in the development environment",
"expression":
"resource.matchTag('123456789012/env', 'dev')"
}
}
],
"etag": "BwWKmjvelug=",
"version": 3
}
Probar permisos
Puedes probar los permisos de gestión de identidades y accesos de un usuario en un recurso de una organización con el método testIamPermissions()
. Este método toma la URL del recurso y el conjunto de permisos que quieres probar como parámetros de entrada, y devuelve el subconjunto de estos permisos a los que tiene acceso el usuario.
Normalmente, no invocas testIamPermission()
si usas la consolaGoogle Cloud directamente para gestionar los permisos. testIamPermissions()
se ha diseñado para integrarse con tu software propietario, como una interfaz gráfica de usuario personalizada. Por ejemplo, la consola usa Google Cloud
testIamPermissions()
internamente para determinar qué interfaz de usuario debe estar disponible para el usuario que ha iniciado sesión.
API
Puedes usar el método
testIamPermissions()
para comprobar qué permisos de los que se han proporcionado tiene la persona que llama para el recurso en cuestión. Este método toma un nombre de recurso y un conjunto de permisos como parámetros, y devuelve el subconjunto de permisos que tiene el llamador.
A continuación, se muestra un fragmento de código de ejemplo para probar los permisos de un recurso de organización:
Request:
POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:testIamPermissions
{
"permissions": [
"resourcemanager.organizations.get",
"resourcemanager.organizations.setIamPolicy"
]
}
Response:
{
"permissions": [
"resourcemanager.organizations.get"
]
}
Python
crm = discovery.build(
'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
response = crm.organizations().testIamPermissions(
resource=flags.organizationId,
body={
'resource': flags.organizationId,
'permissions': [
'resourcemanager.organizations.setIamPolicy',
'resourcemanager.projects.patch'
]
}).execute()
print json.dumps(response, indent=2)