Identity and Access Management (IAM) te permite proporcionar acceso detallado a recursos específicos de Cloud de Confiance by S3NS y, al mismo tiempo, evitar el acceso no deseado a otros recursos. Si aplicas el principio de privilegio mínimo, otorgas solo los permisos necesarios para tus cargas de trabajo.
IAM controla quién (usuarios) tiene qué acceso (roles) a qué recursos a través de políticas de permisos, que vinculan roles específicos a los usuarios. Para administrar el acceso en toda tu jerarquía de recursos, puedes configurar roles de IAM y políticas de permisos a nivel de la organización con la API de Cloud Resource Manager. También puedes definir políticas de denegación para evitar que las principales usen permisos específicos. Para obtener más información, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Permisos y roles
Para controlar el acceso a los recursos, Cloud de Confiance by S3NS exige que las cuentas que realizan solicitudes a la API
tengan los roles de IAM adecuados. Los roles de IAM
incluyen permisos que permiten a los usuarios realizar acciones específicas en
los recursos deCloud de Confiance . Por ejemplo, el permiso
resourcemanager.organizations.get permite que un usuario obtenga detalles
sobre el recurso de su organización.
No se otorgan permisos a los usuarios directamente, sino funciones, que incluyen uno o más permisos.
Puedes otorgar una o más funciones en el mismo recurso.
Usa roles predefinidos
En la siguiente tabla, se enumeran los roles que puedes otorgar para acceder a las propiedades de un recurso de organización, la descripción de lo que hace el rol y los permisos agrupados en él.
| Rol | Permisos |
|---|---|
Administrador de la organización( Tiene acceso para administrar las políticas de IAM y ver las políticas de la organización de carpetas, proyectos y organizaciones. Recursos de nivel más bajo en los que puedes otorgar esta función:
|
|
Visualizador de la organización( Proporciona acceso para ver una organización. Recursos de nivel más bajo en los que puedes otorgar esta función:
|
|
Administrador de políticas de la organización( Proporciona acceso para definir qué restricciones quiere poner una organización en los ajustes de los recursos de la nube mediante la configuración de políticas de la organización. Recursos de nivel más bajo en los que puedes otorgar esta función:
|
|
Navegador( Acceso de lectura para navegar en la jerarquía de un proyecto, incluida la carpeta, la organización y la política de permisos. esta función no incluye el permiso para ver los recursos del proyecto Recursos de nivel más bajo en los que puedes otorgar este rol:
|
|
Crea funciones personalizadas
Además de los roles predefinidos que se describen en este tema, también puedes crear roles personalizados, que son colecciones de permisos que adaptas a tus necesidades. Cuando crees un rol personalizado para usarlo con Resource Manager, ten en cuenta los siguientes puntos:- Los permisos list y get, como
resourcemanager.projects.get/list, siempre se deben otorgar como un par. - Cuando tu rol personalizado incluye los permisos
folders.listyfolders.get, también debe incluirprojects.listyprojects.get. - Ten en cuenta que el permiso
setIamPolicypara los recursos de organización, carpeta y proyecto permite que el usuario otorgue todos los demás permisos, por lo que se debe asignar con cuidado.
Visualiza el acceso existente a un recurso de organización
Puedes ver qué roles se le otorgan a un usuario para un recurso de organización si
obtienes la política de permisos de ese recurso. Puedes ver la política de permisos de un
recurso de organización con la consola de Cloud de Confiance , Google Cloud CLI
o el método getIamPolicy().
Console
Para ver los roles otorgados a nivel del recurso de organización con la consola de Cloud de Confiance , sigue estos pasos:
Ve a la página Administrar recursos en la consola de Cloud de Confiance :
En el menú desplegable Organización, selecciona tu recurso de organización.
Selecciona la casilla de verificación del recurso de organización.
En el Panel de información, en Permisos, haz clic en Expandir un rol y muestra todos los miembros que tienen ese rol.
gcloud
Obtén la política de permisos del recurso de la organización con el comando get-iam-policy:
gcloud organizations get-iam-policy \
ORGANIZATION_ID --format json > \
FILENAME.JSON
El comando genera como resultado la política de permisos, 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
En el siguiente fragmento de código, se devuelve la política de permisos para el 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.s3ns-system.iam.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKHHiQ="
}
Python
El método
getIamPolicy()
te permite obtener una política de permisos que se estableció con anterioridad.
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)
Otorga acceso a un recurso de organización
Los administradores de la organización pueden otorgar roles de IAM a los miembros del equipo
para que puedan acceder a los recursos y las APIs de una organización. Puedes otorgar
roles a un correo electrónico de cuenta de usuario, un Grupo de Google, una cuenta de servicio o un dominio de
G Suite. Puedes usar la consola de Cloud de Confiance , gcloud CLI o
el método
setIamPolicy()
para otorgar roles.
Console
Para configurar el control de acceso a nivel del recurso de organización con la consola de Cloud de Confiance , sigue estos pasos:
Ve a la página Administrar recursos en la consola de Cloud de Confiance :
En el menú desplegable Organización, selecciona tu recurso de organización.
Selecciona la casilla de verificación del recurso de organización. Si no tienes un recurso de carpeta, el recurso de organización no es visible. Si quieres continuar, consulta las instrucciones para otorgar funciones que están en la página de Cloud IAM.
Si el Panel de información ubicado a la derecha está oculto, haz clic en Mostrar panel de información en la esquina superior derecha.
En el Panel de información, en la pestaña Permisos, haz clic en Agregar miembro.
En el campo Miembros nuevos, ingresa los miembros del equipo que deseas agregar. Puedes especificar un correo electrónico de cuenta de usuario, un Grupo de Google, una cuenta de servicio o un dominio de G Suite.
En el menú desplegable Seleccionar un rol, elige el rol que deseas otorgar a los miembros del equipo.
Haz clic en Agregar.
gcloud
Para establecer la política de permisos de un recurso de organización con el comando gcloud, sigue estos pasos:
Obtén la política de permisos para el recurso de la organización con el comando
get-iam-policyy genera la política en un archivo JSON:gcloud organizations get-iam-policy \ ORGANIZATION_ID \ --format json > FILENAME.JSONEl contenido del archivo JSON es 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="
}
- Abre el archivo JSON en un editor de texto. Luego, agrega una entrada nueva al array
bindingspara definir un administrador de la organización. Por ejemplo, para convertir aanotheradmin@gcp-test.comen administrador de la organización, cambia 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 permisos del recurso de organización con el siguiente comando:
gcloud 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.s3ns-system.iam.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.s3ns-system.iam.gserviceaccount.com"
]
}
]
"etag": "BwUjHYKJUiQ="
}
El método setIamPolicy() te permite otorgar roles a los usuarios adjuntando una
política de permisos al recurso de la organización. La política de permisos es una colección
de vinculaciones que definen
Lectura, modificación y escritura: Un patrón común para actualizar los metadatos de un recurso,
como la política de permisos, implica leer su estado actual, actualizar los datos
de forma local y, luego, enviar los datos modificados para su escritura. Este patrón puede
generar un conflicto si dos o más procesos independientes intentan la
secuencia en simultáneo. Por ejemplo, si dos propietarios del proyecto intentan realizar cambios conflictivos en la política de permisos
de forma simultánea, es posible que los cambios de uno de ellos fallen. IAM resuelve este problema con una propiedad etag
en las políticas de permisos. Esta propiedad verifica si la
política de permisos cambió desde la última solicitud. Cuando realizas una solicitud
con un valor etag, el sistema compara el valor etag de la solicitud con el
valor etag existente asociado a la política. Escribe la política de permisos
solo si los valores de etag coinciden.
Cuando actualices una política de permisos, primero debes obtenerla con
getIamPolicy(), actualizarla y, luego, escribir la política de permisos actualizada
con setIamPolicy(). Cuando configures la política de permisos, usa el valor de etag solo si la política de permisos correspondiente en GetPolicyResponse
contiene un valor de etag.
Python
El método setIamPolicy() te permite adjuntar una política de permisos a un recurso. El método setIamPolicy
toma un SetIamPolicyRequest, que contiene una política de permisos que se
establecerá y el recurso al que se adjunta la política de permisos. Muestra la política de permisos resultante. Te recomendamos que sigas el
patrón de lectura-modificación-escritura
cuando actualices una política de permisos con setIamPolicy().
Aquí tienes un código de muestra para establecer una política de permisos 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)
Restringe la visibilidad de los proyectos para los usuarios
Los usuarios pueden ver todos los proyectos a los que tienen acceso en la consola de Cloud de Confiance y en las consultas de búsqueda, independientemente de si están o no en el recurso de organización seleccionado por el usuario. Puedes 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 consola de Cloud de Confiance . Esto te permite restringir a los usuarios para que vean proyectos solo dentro de tu dominio.
La restricción de la política de la 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 la organización, que definen el conjunto de recursos de la organización que
hacen que sus recursos sean visibles para los usuarios en una consulta o en la consola de Cloud de Confiance .
Los proyectos aparecen en No organization si el usuario no tiene el
permiso resourcemanager.organizations.get en el recurso de la organización superior
del proyecto. Esto puede hacer que un proyecto que no forma parte
de tu recurso de organización parezca no estar asociado con ningún recurso de organización.
Si usas la restricción resourcemanager.accessBoundaries para inhabilitar un
recurso de organización, los proyectos que pertenecen a ese recurso de organización no
aparecen en las consultas ni en la consola de Cloud de Confiance . Los proyectos que aún no se migraron a un recurso de organización no son visibles si aplicas esta restricción.
Te recomendamos que migres los proyectos que están en No organization al recurso de tu organización antes de aplicar esta restricción. Para obtener información sobre
cómo mover proyectos a un recurso de organización, consulta
Traslada un proyecto.
Para obtener información sobre cómo configurar una política de la organización, consulta Usa restricciones.
Otorgar acceso condicional
Algunos roles de IAM, como el de administrador de políticas de la organización
(roles/orgpolicy.policyAdmin), solo se pueden otorgar en un recurso de organización.
Debido a la herencia de políticas, todos los recursos de la organización suelen heredar este rol.
Para tener más control sobre los recursos en los que se otorga el rol, puedes usar
las condiciones de IAM. El uso de etiquetas con
condiciones te permite otorgar acceso a los recursos solo si tienen la
etiqueta especificada. Por ejemplo, la siguiente política de permisos
otorga el rol de administrador de políticas de la organización solo en los recursos que
tienen la etiqueta environment: dev y no lo otorga en ningún otro recurso:
{
"bindings": [
{
"members": [
"{dynamic print variables.examples.principal_group_api}"
],
"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
}
Prueba los permisos
Puedes probar los permisos de IAM en un usuario para un recurso de organización con el método testIamPermissions(). Este método toma la URL del recurso y el conjunto de permisos que se probarán. Muestra el subconjunto de estos permisos a los que
el usuario puede acceder.
Por lo general, no invocas testIamPermissions() si usas la
consola deCloud de Confiance para administrar los permisos directamente. testIamPermissions() está
diseñado para integrarse con tu software propio, como una interfaz gráfica de usuario
personalizada. Por ejemplo, la consola de Cloud de Confiance usa
testIamPermissions() de forma interna para determinar qué IU está disponible para
el usuario que accedió.
API
Puedes usar el método testIamPermissions() a fin de verificar cuál de los permisos otorgados tiene el emisor para un recurso dado. Este método toma el nombre de un recurso y un conjunto de permisos como parámetros y muestra el subconjunto de permisos que tiene el emisor.
Aquí hay un código de muestra 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)