Resource Manager proporciona restricciones que se pueden usar en las políticas de la organización para limitar el uso de las cuentas de servicio de la administración de identidades y accesos (IAM).
Muchas de estas restricciones determinan si se pueden crear o configurar cuentas de servicio y otros recursos de maneras específicas. Estas restricciones no son retroactivas, es decir, no afectan a las cuentas de servicio creadas y configuradas con anterioridad.
Antes de comenzar
Debes tener permiso para modificar las políticas de la organización a fin de establecer restricciones. Por ejemplo, la función orgpolicy.policyAdmin
tiene permiso para configurar restricciones en la política de la organización. Lee la sección sobre cómo usar restricciones para obtener más información sobre la administración de las políticas a nivel de organización.
Restricciones booleanas
Las siguientes restricciones son tipos de restricciones booleanas, que se establecen como verdaderas o falsas.
Inhabilita las asignaciones de funciones automáticas a las cuentas de servicio predeterminadas
Algunos servicios de Google Cloud crean automáticamente cuentas de servicio predeterminadas. Cuando se crea una cuenta de servicio predeterminada, se le otorga la función Editor (roles/editor
) en tu proyecto de forma automática.
Para mejorar la seguridad, te recomendamos que inhabilites la función de otorgamiento automático de funciones. Usa la restricción booleana iam.automaticIamGrantsForDefaultServiceAccounts
para inhabilitar la asignación de función automática.
Inhabilita la creación de cuentas de servicio
Puedes usar la restricción booleana iam.disableServiceAccountCreation
para inhabilitar la creación de cuentas de servicio nuevas. Esto te permite centralizar la administración de las cuentas de servicio sin restringir los demás permisos que tienen los desarrolladores en los proyectos.
Si aplicas esta restricción en un proyecto, algunos servicios de Google Cloud no podrán crear automáticamente cuentas de servicio predeterminadas. Como resultado, si el proyecto ejecuta cargas de trabajo que necesitan actuar en nombre de una cuenta de servicio, es posible que el proyecto no contenga una cuenta de servicio que la carga de trabajo pueda usar. Para solucionar este problema, puedes habilitar que se actúe en nombre de las cuentas de servicio en todos los proyectos. Cuando habilitas esta función, puedes crear cuentas de servicio en un proyecto centralizado y, luego, conectar las cuentas de servicio a los recursos en otros proyectos.
Para obtener más información sobre cómo organizar las cuentas de servicio, consulta Dónde crear cuentas de servicio.
Inhabilitar la creación de claves de cuentas de servicio
Puedes usar la restricción booleana iam.disableServiceAccountKeyCreation
para inhabilitar la creación de claves de cuentas de servicios externas nuevas. Esto te permite controlar el uso de credenciales a largo plazo no administradas de las cuentas de servicio. Cuando se configura esta restricción, no se pueden crear credenciales administradas por el usuario en las cuentas de servicio de los proyectos que afecta la restricción.
Inhabilitar la carga de claves de cuentas de servicio
Puedes usar la restricción booleana iam.disableServiceAccountKeyUpload
para inhabilitar la carga de claves públicas externas a las cuentas de servicio. Cuando se establece esta restricción, los usuarios no pueden subir claves públicas a cuentas de servicio en proyectos afectados por la restricción.
Inhabilita la conexión de cuentas de servicio a los recursos en otros proyectos
Cada cuenta de servicio está ubicada en un proyecto. Puedes usar la restricción booleana iam.disableCrossProjectServiceAccountUsage
para evitar que las cuentas de servicio de un proyecto se conecten a recursos de otros proyectos.
Si quieres permitir que se usen cuentas de servicio entre proyectos, consulta Habilita la actuación en nombre de cuentas de servicio en todos los proyectos.
Restringe la eliminación de retenciones del proyecto cuando se usan cuentas de servicio en varios proyectos
Cuando permites que las cuentas de servicio de un proyecto se conecten a recursos en otros proyectos, IAM agrega una retención de proyecto que te impide borrarlo. De forma predeterminada, cualquiera que tenga el permiso resourcemanager.projects.updateLiens
en el proyecto puede borrar la retención.
Si aplicas la restricción booleana iam.restrictCrossProjectServiceAccountLienRemoval
, los principales pueden borrar la retención solo si tienen el permiso resourcemanager.projects.updateLiens
en la organización.
Recomendamos aplicar esta restricción si alguno de tus proyectos permite la actuación en nombre de cuentas de servicio en todos los proyectos.
Inhabilita la creación de clústeres de Workload Identity
Puedes usar la restricción booleana iam.disableWorkloadIdentityClusterCreation
para exigir que los nuevos clústeres de Google Kubernetes Engine tengan la función Workload Identity inhabilitada en el momento de su creación. Si deseas controlar estrictamente el acceso a la cuenta de servicio en tu organización, puedes inhabilitar la función Workload Identity, además de la creación de la cuenta de servicio y la creación de la clave de la cuenta de servicio.
Los clústeres existentes de GKE con la función Workload Identity habilitada no se verán afectados y continuarán funcionando normalmente.
Aplica una restricción booleana
Console
Si quieres configurar una política de la organización que aplique una restricción para restringir el uso de la cuenta de servicio, sigue estos pasos:
En la consola de Google Cloud, ve a la página Políticas de la organización.
En el selector de proyectos, selecciona la organización para la que deseas restringir el uso de la cuenta de servicio.
Haz clic en una de las restricciones booleanas de uso de la cuenta de servicio que se enumeran en esta página.
Haz clic en Administrar política.
En Se aplica a, selecciona Anular la política del superior.
Haz clic en Agregar una regla.
En Aplicación, selecciona Activado.
Para aplicar la política, haz clic en Establecer política.
gcloud
Las políticas se pueden establecer a través de Google Cloud CLI.
Para restringir el uso de la cuenta de servicio, ejecuta el siguiente comando:
gcloud resource-manager org-policies enable-enforce \ --organization 'ORGANIZATION_ID' \ BOOLEAN_CONSTRAINT
En el que BOOLEAN_CONSTRAINT es la restricción booleana que quieres aplicar.
Para inhabilitar la aplicación, se puede emitir el mismo comando con el
Comandodisable-enforce
Para obtener información sobre el uso de restricciones en las políticas de la organización, consulta la página sobre cómo usar restricciones.
Ejemplo de una política con restricción booleana
En el siguiente fragmento de código, se muestra una política de la organización que aplica la restricción booleana iam.disableServiceAccountCreation
, que evita que se creen cuentas de servicio:
name: organizations/012345678901/policies/iam.disableServiceAccountCreation
spec:
rules:
- enforce: true
Enumera restricciones
Las siguientes restricciones son tipos de restricciones de lista, que se establecen como una lista de valores.
Extiende la vida útil de los tokens de acceso de OAuth 2.0
Puedes crear un token de acceso de OAuth 2.0 que proporciona credenciales de corta duración para una cuenta de servicio.
De forma predeterminada, el ciclo de vida máximo de un token de acceso es de 1 hora (3,600 segundos).
Sin embargo, puedes extender la duración máxima a 12 horas. Para ello, identifica las cuentas de servicio que requieren una duración de tokens extendida y, luego, agrégalas a una política de la organización que incluya la restricción de lista constraints/iam.allowServiceAccountCredentialLifetimeExtension
.
Limita la vida útil de las claves de cuentas de servicio
Una clave de cuenta de servicio te permite autenticar una solicitud como una cuenta de servicio. De forma predeterminada, las claves de las cuentas de servicio nunca se vencen. Puedes cambiar este valor predeterminado estableciendo una hora de vencimiento para todas claves recién creadas en tu proyecto, organización o carpeta.
Para establecer un plazo de vencimiento, usa la restricción de lista constraints/iam.serviceAccountKeyExpiryHours
para especificar la cantidad de horas durante las cuales una clave recién creada es válida. Después de este período, la clave de la cuenta de servicio vence
dejar de usarla.
Esta restricción de lista acepta los siguientes valores ALLOW
, pero no acepta valores DENY
. Como práctica recomendada, usa el plazo de vencimiento más corto que cubra tus necesidades:
1h
: 1 hora8h
: 8 horas24h
: 24 horas (1 día)168h
: 168 horas (7 días)336h
: 336 horas (14 días)720h
: 720 horas (30 días)1440h
: 1,440 horas (60 días)2160h
: 2,160 horas (90 días)
La restricción constraints/iam.serviceAccountKeyExpiryHours
no se puede combinar con una política superior. Para aplicar esta restricción, debes reemplazar o inherits la política superior.
Especifica los proveedores de identidad externos permitidos
Si usas la federación de identidades de cargas de trabajo, que permite que las identidades externas accedan a los recursos de Google Cloud, puedes especificar qué proveedores de identidad externos están permitidos. De forma predeterminada, se permiten todos los proveedores. Para establecer un límite, usa la
Restricción de lista constraints/iam.workloadIdentityPoolProviders
para especificar URIs
para los proveedores permitidos, utilizando los siguientes formatos:
Amazon Web Services (AWS):
https://sts.amazonaws.com
Para limitar las cuentas de AWS permitidas, usa el Restricción de lista
constraints/iam.workloadIdentityPoolAwsAccounts
como se describe en esta página.Microsoft Azure:
https://sts.windows.net/azure-tenant-id
Otros proveedores de identidad que admiten OpenID Connect (OIDC): Usa el URI de la entidad emisora de tu proveedor de identidad.
Especifica las cuentas de AWS permitidas
Si usas la federación de identidades de cargas de trabajo, que permite que las identidades externas accedan a los recursos de Google Cloud, puedes especificar qué cuentas de AWS pueden acceder a tus recursos. De forma predeterminada, las cargas de trabajo
de cualquier cuenta de AWS puedan acceder a tus recursos de Google Cloud. Para
qué cuentas de AWS se permiten, usa el
Restricción de lista constraints/iam.workloadIdentityPoolAwsAccounts
para especificar una
lista de IDs de cuentas permitidos.
Inhabilita automáticamente las claves de cuenta de servicio expuestas
En ocasiones, Google Cloud detecta que se modificó una clave de cuenta de servicio
expuestos, por ejemplo, podrían detectar una clave en un repositorio público. Para especificar lo que hace Google Cloud con estas claves, usa la restricción de lista iam.serviceAccountKeyExposureResponse
.
Esta restricción de lista acepta los siguientes valores de ALLOW
: no acepta
DENY
valores.
DISABLE_KEY
: Si Google Cloud detecta una clave expuesta, la inhabilitará automáticamente. También crea un evento de registros de auditoría de Cloud y envía una notificación sobre la clave expuesta a los propietarios del proyecto y a los contactos de seguridad.WAIT_FOR_ABUSE
: Google Cloud no inhabilitará las claves expuestas de forma proactiva. Sin embargo, Google Cloud podría inhabilitar las claves expuestas si se usan de formas que afectan negativamente a la plataforma. Independientemente de si la clave expuesta está inhabilitada, Google Cloud crea un evento de registros de auditoría de Cloud y envía una notificación sobre la clave expuesta a los propietarios del proyecto y a los contactos de seguridad.
Los eventos de Registros de auditoría de Cloud se crean cuando Google Cloud detecta clave filtrada o inhabilita una clave.
Cuando Google Cloud detecta que se filtró una clave, se crea un evento de abuso en los registros de eventos de abuso.
Cuando Google Cloud inhabilita una clave, los registros de auditoría contienen acción de la principal
gcp-compromised-key-response@system.gserviceaccount.com
.
Te recomendamos que establezcas esta restricción en DISABLE_KEY
. Configurar esta restricción en WAIT_FOR_ABUSE
aumenta el riesgo de que se usen de forma inadecuada las claves filtradas.
Si decides establecer la restricción en WAIT_FOR_ABUSE
, te recomendamos que te suscribas a los eventos de registros de auditoría de Cloud, revises la información de contacto de seguridad en Contactos esenciales y te asegures de que tus contactos de seguridad respondan a las notificaciones de forma oportuna.
La restricción iam.serviceAccountKeyExposureResponse
no se puede combinar con un
superior. Para aplicar esta restricción, debes reemplazar la política superior.
Establece una restricción de lista
Console
Para establecer una política de la organización que contenga una restricción de lista, haz lo siguiente:
En la consola de Google Cloud, ve a la página Políticas de la organización.
En el selector de proyectos, selecciona el recurso para el que deseas configurar la política de la organización.
En la página Políticas de la organización, selecciona una restricción de la lista. Aparecerá la página Detalles de la política para esa restricción.
Para actualizar la política de la organización de este recurso, haz clic en Administra la política.
En Aplicación de la política, selecciona una opción de aplicación:
- Para combinar y evaluar las políticas de la organización, selecciona Combinar con superior. Para obtener más información sobre la herencia y la jerarquía de recursos, consulta Comprende la evaluación de jerarquías.
- Para anular las políticas heredadas de un recurso superior, selecciona Reemplazar.
Haz clic en Agregar una regla.
En Valores de la política, selecciona Personalizar.
En Tipo de política, selecciona Permitir.
En Valores personalizados, ingresa el primer valor para la restricción de lista.
- Si deseas agregar más valores, haz clic en Agregar valor para crear más filas y agrega un valor a cada fila.
Cuando termines de agregar valores, haz clic en Listo.
Para aplicar la política, haz clic en Establecer política.
gcloud
Las políticas se pueden establecer a través de Google Cloud CLI:
gcloud resource-manager org-policies allow \ CONSTRAINT_NAME \ VALUE_1 [VALUE_N ...] \ --organization=ORGANIZATION_ID \
Reemplaza los siguientes valores:
CONSTRAINT_NAME
: Es el nombre de la restricción de lista. Por ejemplo,constraints/iam.allowServiceAccountCredentialLifetimeExtension
VALUE_1
,VALUE_N...
: Valores para la restricción de lista.
Para obtener información sobre el uso de restricciones en las políticas de la organización, consulta la página sobre cómo usar restricciones.
Ejemplo de una política con restricción de lista
En el siguiente fragmento de código, se muestra una política de la organización que aplica la restricción de lista iam.allowServiceAccountCredentialLifetimeExtension
, que extiende la vida útil máxima de los tokens de acceso de OAuth 2.0 para las cuentas de servicio enumeradas:
name: organizations/012345678901/policies/iam.allowServiceAccountCredentialLifetimeExtension
spec:
rules:
- values:
allowedValues:
- SERVICE_ACCOUNT_ADDRESS
Mensajes de error
Inhabilita la creación de cuentas de servicio
Si iam.disableServiceAccountCreation
se aplica de forma forzosa, la creación de una cuenta de servicio generará el siguiente error:
FAILED_PRECONDITION: Service account creation is not allowed on this project.
Inhabilita la creación de claves de cuentas de servicio
Si iam.disableServiceAccountKeyCreation
se aplica de forma forzosa, la creación de una cuenta de servicio generará el siguiente error:
FAILED_PRECONDITION: Key creation is not allowed on this service account.
Inhabilita la creación de clústeres de Workload Identity
Si se aplica iam.disableWorkloadIdentityClusterCreation
de forma forzosa, la creación de un clúster de GKE con la función Workload Identity habilitada fallará con el error:
FAILED_PRECONDITION: Workload Identity is disabled by the organization policy constraints/iam.disableWorkloadIdentityClusterCreation. Contact your administrator to enable this feature.
Soluciona problemas conocidos
Cuentas de servicio predeterminadas
La aplicación de la restricción iam.disableServiceAccountCreation
evitará la creación de cuentas de servicio en el proyecto. Esta limitación también afecta los servicios de Google Cloud que crean cuentas de servicio predeterminadas en el proyecto de forma automática cuando se habilitan. Estos son algunos de los servicios que se ven afectados:
- Compute Engine
- GKE
- App Engine
- Dataflow
Si se aplica la restricción iam.disableServiceAccountCreation
, se producirá un error cuando se intenten habilitar estos servicios, debido a que no se pueden crear sus cuentas de servicio predeterminadas.
Para solucionar este problema, sigue estos pasos:
- Quita la restricción
iam.disableServiceAccountCreation
de forma temporal. - Habilita los servicios que deseas.
- Crea cualquier otra cuenta de servicio que desees.
- Por último, vuelve a aplicar la restricción.