Cuando veas una política de administración de identidades y accesos (IAM), es posible que veas nombres de funciones que incluyen la string withcond
, seguida de un valor de hash. Por ejemplo, es posible que veas el nombre de una función como roles/iam.serviceAccountAdmin_withcond_2b17cc25d2cd9e2c54d8
.
En esta página, se explica cuándo y por qué puede que veas la string withcond
en una política de IAM. También se recomiendan acciones que debes realizar si ves esta string.
Versiones de políticas y vinculaciones de funciones condicionales
Una política de IAM se puede representar de varias formas diferentes. Cada forma se conoce como una versión de política.
En una política de IAM que usa la versión 1
, puede que algunas vinculaciones de funciones contengan la string withcond
seguida de un valor de hash en el nombre de una función:
{
"bindings": [
{
"members": [
"user:dana@example.com"
],
"role": "roles/iam.serviceAccountAdmin_withcond_2b17cc25d2cd9e2c54d8"
}
],
"etag": "BwUjMhCsNvY=",
"version": 1
}
Mediante este formato, se indica que la vinculación de la función es condicional. En otras palabras, la función se otorga solo si se cumplen condiciones específicas.
Las políticas de la versión 1
no muestran estas condiciones. Si ves la string withcond
y un valor de hash, la vinculación de la función incluye una condición que no puedes ver.
Solución: Especifica la versión 3 de la política
Para asegurarte de que puedes ver y actualizar toda la política de IAM, incluidas sus condiciones, siempre debes especificar la versión 3
de la política en tus solicitudes. Para especificar la versión 3
de la política, debes completar las tareas de las siguientes secciones.
Actualiza la herramienta de gcloud
Si usas la herramienta de línea de comandos de gcloud
, ejecuta gcloud version
para verificar el número de la versión. En el resultado, se incluye una string similar a Google Cloud SDK 279.0.0
.
Si el número de la versión es inferior a 263.0.0, ejecuta gcloud components update
para actualizar la herramienta de gcloud
. En la versión 263.0.0 y en las posteriores, la herramienta de gcloud
especifica de forma automática una versión de la política que admite condiciones.
Actualiza las bibliotecas cliente
Si tu aplicación usa una biblioteca cliente, sigue estos pasos:
Busca el nombre y el número de la versión de la biblioteca cliente y, luego, revisa la lista de bibliotecas cliente que admiten versiones de políticas.
Si ya usas una versión reciente de la biblioteca cliente que admite versiones de políticas, no necesitas actualizar tu biblioteca cliente. Avanza al siguiente paso.
Si usas una versión anterior de la biblioteca cliente y una versión posterior admite versiones de políticas, actualízala a la versión más reciente.
Si usas una biblioteca cliente que no admite versiones de políticas, puedes agregar otra biblioteca cliente que sí las admita en tu aplicación. Usa esa biblioteca cliente para trabajar con políticas de IAM. Como alternativa, puedes usar la API de REST de IAM directamente.
Actualiza cualquier código de tu aplicación que obtenga y establezca políticas de IAM:
- Cuando obtengas una política, siempre especifica la versión
3
en la solicitud. Cuando configures una política, siempre establece el campo
version
de la política en3
y, además, incluye el campoetag
en la solicitud.
- Cuando obtengas una política, siempre especifica la versión
Actualiza las llamadas a la API de REST
Si tu aplicación usa directamente la API de REST de IAM, actualiza cualquier código que obtenga y establezca políticas de IAM:
- Cuando obtengas una política, siempre especifica la versión
3
en la solicitud. Cuando configures una política, siempre establece el campo
version
de la política en3
y, además, incluye el campoetag
en la solicitud.
Actualiza herramientas de administración para las políticas de IAM
Si guardas copias locales de tus políticas de IAM, por ejemplo, si las almacenas en un sistema de control de versión y las tratas como código, asegúrate de que todas las herramientas que uses cumplan con estos criterios:
- Todas las solicitudes deben especificar la versión
3
de la política. - Todas las solicitudes que usas para actualizar una política deben incluir el campo
etag
en la solicitud.
Si una herramienta no cumple con estos criterios, verifica si existe una versión actualizada de la herramienta.
Además, asegúrate de que las herramientas de administración conserven las asignaciones de funciones condicionales, en lugar de agregar una asignación duplicada de funciones que no incluya una condición. Por ejemplo, considera la siguiente situación:
Otorgas la función de creador de cuentas de servicio (
roles/iam.serviceAccountCreator
) al usuariovikram@example.com
en la carpetamy-folder
. La política de IAM para la carpeta es similar a este ejemplo:{ "bindings": [ { "members": [ "user:vikram@example.com" ], "role": "roles/iam.serviceAccountCreator" } ], "etag": "BuFmmMhCsNY=", "version": 1 }
Usas una herramienta para recuperar la política de IAM y almacenarla en un sistema de control de versión.
Agregas una condición para que
vikram@example.com
pueda crear cuentas de servicio solo durante la semana laboral normal, en función de la fecha y la hora de Berlín, Alemania. La política de IAM actualizada es similar al siguiente ejemplo:{ "bindings": [ { "members": [ "user:vikram@example.com" ], "role": "roles/iam.serviceAccountCreator", "condition": { "title": "work_week_only", "expression": "request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5" } } ], "etag": "BwWcR/B3tNk=", "version": 3 }
Usas una herramienta para recuperar la política de IAM actualizada. La herramienta no especifica una versión de la política cuando la solicita, por lo que recibes una política de versión
1
con un nombre de función modificado:{ "bindings": [ { "members": [ "user:vikram@example.com" ], "role": "roles/iam.serviceAccountCreator_withcond_a75dc089e6fa084bd379" } ], "etag": "BwWcR/B3tNk=", "version": 1 }
En este punto, puede que la herramienta de administración decida que desapareció la vinculación de vikram@example.com
a la función roles/iam.serviceAccountCreator
y que se debería restablecer la vinculación de la función original a la política:
Evita las vinculaciones adicionales de las funciones sin condiciones.
{
"bindings": [
{
"members": [
"user:vikram@example.com"
],
"role": "roles/iam.serviceAccountCreator_withcond_a75dc089e6fa084bd379"
},
{
"members": [
"user:vikram@example.com"
],
"role": "roles/iam.serviceAccountCreator"
}
],
"etag": "BwWd3HjhKxE=",
"version": 1
}
Este cambio no es correcto. Le otorga la función roles/iam.serviceAccountCreator
a vikram@example.com
sin importar el día de la semana. Como resultado, la condición de la primera vinculación de la función no tiene efecto.
Si tus herramientas de administración intentan realizar este tipo de cambio, no debes aprobarlo. En su lugar, debes actualizar tus herramientas de administración para especificar la versión 3
de la política en las solicitudes.
¿Qué sigue?
- Obtén más información sobre las políticas de IAM.
- Descubre cómo especificar una versión de la política cuando obtienes una política o la estableces.
- Comprende cómo otorgar acceso de forma condicional mediante las Condiciones de IAM.