Resource Manager proporciona restricciones que se pueden usar en las políticas de organización para limitar el uso de las cuentas de servicio de Gestión de Identidades y Accesos (IAM).
Muchas de estas restricciones determinan si se pueden crear o configurar cuentas de servicio y otros recursos de formas específicas. Estas restricciones no son retroactivas, por lo que no afectan a las cuentas de servicio creadas y configuradas anteriormente.
Antes de empezar
Para poder establecer restricciones, debes tener permiso para modificar las políticas de organización. Por ejemplo, el rol
orgpolicy.policyAdmin
tiene permiso para definir restricciones de política de la organización. Consulta la página Usar restricciones para obtener más información sobre cómo gestionar políticas a nivel de organización.
Restricciones gestionadas
Las siguientes restricciones son tipos de restricciones gestionadas, que se definen como verdaderas o falsas. Las restricciones gestionadas se basan en la plataforma de políticas de organización personalizadas.
Para saber cómo crear políticas de organización que apliquen restricciones gestionadas, consulta el artículo Usar restricciones gestionadas en una política de organización.
Evitar que se asignen los roles Propietario y Editor a las cuentas de servicio predeterminadas
Algunos servicios crean automáticamente cuentas de servicio predeterminadas. Google Cloud Cuando se crea una cuenta de servicio predeterminada, se le asigna automáticamente el rol Editor (roles/editor
) en tu proyecto. También puede ocurrir que alguien decida asignar un rol con muchos privilegios, como el de editor o propietario (roles/owner
), a una cuenta de servicio predeterminada más adelante.
Los roles Editor y Propietario son roles básicos con muchos privilegios. No debes concederlos a ningún principal en producción, incluidas las cuentas de servicio predeterminadas.
Para evitar que se concedan los roles Editor o Propietario a las cuentas de servicio predeterminadas, usa la restricción iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts
gestionada. Esta restricción impide que se concedan los roles Editor o Propietario a las cuentas de servicio predeterminadas, ya sea de forma automática o manual.
Inhabilitar creación de cuentas de servicio
Puedes usar la restricción gestionada iam.managed.disableServiceAccountCreation
para inhabilitar la creación de cuentas de servicio. De esta forma, puedes centralizar la gestión de las cuentas de servicio sin restringir los demás permisos que tienen tus 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. Por lo tanto, si el proyecto ejecuta cargas de trabajo que necesitan suplantar la identidad 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 la suplantación de identidad de cuentas de servicio en varios proyectos. Cuando habilitas esta función, puedes crear cuentas de servicio en un proyecto centralizado y, a continuación, vincularlas a recursos de otros proyectos.
Para obtener más información sobre cómo organizar las cuentas de servicio, consulta el artículo Dónde crear cuentas de servicio.
Inhabilitar la creación de claves de API vinculadas a cuentas de servicio
Puedes usar la restricción gestionada iam.managed.disableServiceAccountApiKeyCreation
para inhabilitar la creación de claves de API vinculadas a cuentas de servicio.
Si se define esta restricción, los usuarios no podrán crear claves de API vinculadas a cuentas de servicio en proyectos afectados por la restricción.
Esta restricción se aplica de forma predeterminada.
Inhabilitar creación de claves de cuentas de servicio
Puedes usar la restricción iam.managed.disableServiceAccountKeyCreation
gestionada
para inhabilitar la creación de claves de cuentas de servicio externas y claves HMAC de Cloud Storage. De esta forma, puedes controlar el uso de credenciales a largo plazo no gestionadas para cuentas de servicio. Cuando se define esta restricción, no se pueden crear credenciales gestionadas por el usuario para cuentas de servicio en proyectos afectados por la restricción.
Inhabilitar la subida de claves de cuentas de servicio
Puedes usar la restricción iam.managed.disableServiceAccountKeyUpload
gestionada para inhabilitar la subida de claves públicas externas a cuentas de servicio. Cuando se define esta restricción, los usuarios no pueden subir claves públicas a cuentas de servicio en proyectos afectados por la restricción.
Restricciones gestionadas (versión antigua) con reglas booleanas
Las siguientes restricciones son tipos de restricciones gestionadas antiguas con reglas booleanas, que se definen como verdaderas o falsas.
Inhabilitar la concesión automática de roles 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 asigna automáticamente el rol Editor (roles/editor
) en tu proyecto.
Para mejorar la seguridad, le recomendamos que inhabilite la concesión automática de roles. Usa la restricción iam.automaticIamGrantsForDefaultServiceAccounts
legacy managed
para inhabilitar la concesión automática de roles.
Inhabilitar creación de cuentas de servicio
.Puedes usar la iam.disableServiceAccountCreation
restricción gestionada antigua
para inhabilitar la creación de cuentas de servicio. De esta forma, puedes centralizar la gestión de las cuentas de servicio sin restringir los demás permisos que tienen tus 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. Por lo tanto, si el proyecto ejecuta cargas de trabajo que necesitan suplantar la identidad 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 la suplantación de identidad de cuentas de servicio en varios proyectos. Cuando habilitas esta función, puedes crear cuentas de servicio en un proyecto centralizado y, a continuación, vincularlas a recursos de otros proyectos.
Para obtener más información sobre cómo organizar las cuentas de servicio, consulta el artículo Dónde crear cuentas de servicio.
Inhabilitar creación de claves de cuentas de servicio
Puedes usar la iam.disableServiceAccountKeyCreation
restricción gestionada antigua
para inhabilitar la creación de claves de cuentas de servicio externas y claves HMAC de Cloud Storage. De esta forma, puedes controlar el uso de credenciales a largo plazo no gestionadas para cuentas de servicio. Cuando se define esta restricción, no se pueden crear credenciales gestionadas por el usuario para cuentas de servicio en proyectos afectados por la restricción.
Inhabilitar la subida de claves de cuentas de servicio
.Puedes usar la iam.disableServiceAccountKeyUpload
restricción gestionada antigua para inhabilitar la subida de claves públicas externas a cuentas de servicio. Cuando se define esta restricción, los usuarios no pueden subir claves públicas a cuentas de servicio en proyectos afectados por la restricción.
Inhabilitar la vinculación de cuentas de servicio a recursos de otros proyectos
Cada cuenta de servicio se encuentra en un proyecto. Puedes usar la restricción gestionada antigua iam.disableCrossProjectServiceAccountUsage
para evitar que las cuentas de servicio de un proyecto se vinculen a recursos de otros proyectos.
Si quieres permitir que se usen cuentas de servicio en varios proyectos, consulta el artículo sobre cómo habilitar la suplantación de identidad de cuentas de servicio en varios proyectos.
Restringir la eliminación de retenciones de proyectos cuando se usan cuentas de servicio en varios proyectos
Cuando permites que las cuentas de servicio de un proyecto se vinculen a recursos de otros proyectos, Gestión de identidades y accesos añade un lien de proyecto que te impide eliminar el proyecto. De forma predeterminada, cualquier usuario que tenga el permiso resourcemanager.projects.updateLiens
en el proyecto puede eliminar la retención.
Si aplicas la restricción gestionada iam.restrictCrossProjectServiceAccountLienRemoval
antigua, las entidades solo podrán eliminar la retención si tienen el permiso resourcemanager.projects.updateLiens
en la organización.
Te recomendamos que apliques esta restricción si alguno de tus proyectos permite la suplantación de cuentas de servicio entre proyectos.
Inhabilitar la creación de clústeres de Workload Identity
Puedes usar la restricción gestionada antigua iam.disableWorkloadIdentityClusterCreation
para requerir que todos los clústeres nuevos de Google Kubernetes Engine tengan la función Workload Identity inhabilitada en el momento de su creación. Si quieres controlar el acceso a las cuentas de servicio de tu organización, puedes inhabilitar Workload Identity, además de la creación de cuentas de servicio y de claves de cuentas de servicio.
Los clústeres de GKE en los que esta función ya esté habilitada no se verán afectados y seguirán funcionando con normalidad.
Configurar una restricción gestionada (método antiguo) con reglas booleanas
Consola
Para definir una política de organización que aplique una restricción para limitar el uso de cuentas de servicio, sigue estos pasos:
En la Google Cloud consola, ve a la página Políticas de la organización.
En el selector de proyectos, selecciona la organización para la que quieras restringir el uso de cuentas de servicio.
Haga clic en una de las restricciones de uso de la cuenta de servicio que se indican en esta página.
Haz clic en Gestionar política.
En Se aplica a, selecciona Anular política del recurso superior.
Haz clic en Añadir regla.
En Implementación obligatoria, selecciona Activada.
Para aplicar la política, haz clic en Definir política.
gcloud
Las políticas se pueden definir mediante 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' \ CONSTRAINT_NAME
Donde CONSTRAINT_NAME es la restricción que quieres aplicar.
Para inhabilitar la aplicación, se puede usar el mismo comando con el
Comandodisable-enforce
Para obtener información sobre cómo usar restricciones en las políticas de organización, consulta Usar restricciones.
Ejemplo de restricción gestionada (versión antigua) con reglas booleanas
El siguiente fragmento de código muestra una política de la organización que aplica la restricción gestionada antigua iam.disableServiceAccountCreation
, que impide que se creen cuentas de servicio:
name: organizations/012345678901/policies/iam.disableServiceAccountCreation
spec:
rules:
- enforce: true
Restricciones gestionadas (versión antigua) con reglas de lista
Las siguientes restricciones son tipos de restricciones gestionadas antiguas con reglas de lista, que se definen como una lista de valores.
Ampliar la duración de los tokens de acceso de OAuth 2.0
Puedes crear un token de acceso de OAuth 2.0 que proporcione credenciales de corta duración para una cuenta de servicio.
De forma predeterminada, el tiempo de vida máximo de un token de acceso es de 1 hora (3600 segundos).
Sin embargo, puedes ampliar el tiempo de vida máximo a 12 horas. Para ello, identifica las cuentas de servicio cuyos tokens de acceso necesitan un tiempo de vida mayor y, a continuación, añádelas a una política de organización que incluya la restricción constraints/iam.allowServiceAccountCredentialLifetimeExtension
legacy managed.
Limitar el tiempo de vida de las claves de cuentas de servicio
Una clave de cuenta de servicio te permite autenticar una solicitud como cuenta de servicio. De forma predeterminada, las claves de cuenta de servicio no caducan nunca. Para cambiar este valor predeterminado, puedes definir un tiempo de vencimiento para todas las claves que se creen en tu proyecto, carpeta u organización.
Para definir una hora de vencimiento, usa la restricción gestionada antigua constraints/iam.serviceAccountKeyExpiryHours
para especificar el número de horas durante las que es válida una clave recién creada. Transcurrido ese tiempo, la clave de la cuenta de servicio caducará y ya no podrás usarla.
Esta restricción gestionada antigua acepta los siguientes valores de ALLOW
, pero no los de DENY
. Te recomendamos que uses el tiempo de vencimiento más corto que se ajuste a 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
: 1440 horas (60 días)2160h
: 2160 horas (90 días)
La restricción constraints/iam.serviceAccountKeyExpiryHours
no se puede combinar
con una política superior. Para aplicar esta restricción, debe sustituir o heredar la política principal.
Especificar proveedores de identidades 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 identidades externos están permitidos. De forma predeterminada, se permiten todos los proveedores. Para definir un límite, usa la restricción gestionada antigua constraints/iam.workloadIdentityPoolProviders
para especificar URIs de los proveedores permitidos con los siguientes formatos:
Amazon Web Services (AWS):
https://sts.amazonaws.com
Para limitar las cuentas de AWS permitidas, usa la
constraints/iam.workloadIdentityPoolAwsAccounts
restricción gestionada antigua, tal como se describe en esta página.Microsoft Azure:
https://sts.windows.net/azure-tenant-id
Otros proveedores de identidades que admiten OpenID Connect (OIDC): usa el URI del emisor de tu proveedor de identidades.
Especificar las cuentas de AWS permitidas
Si usas la federación de identidades de carga de trabajo, que permite que las identidades externas accedan a los recursos de Google Cloud , puedes especificar qué cuentas de AWS tienen permiso para acceder a tus recursos. De forma predeterminada, las cargas de trabajo de cualquier cuenta de AWS pueden acceder a tus recursos Google Cloud . Para limitar las cuentas de AWS permitidas, usa la
restricción gestionada antigua constraints/iam.workloadIdentityPoolAwsAccounts
para
especificar una lista de IDs de cuenta permitidos.
Inhabilitar automáticamente las claves de cuenta de servicio expuestas
Google Cloud detecta ocasionalmente que se ha expuesto una clave de cuenta de servicio concreta. Por ejemplo, puede detectar una clave en un repositorio público. Para especificar qué hace Google Cloud con estas claves, usa la restricción gestionada antigua iam.serviceAccountKeyExposureResponse
. Entre las claves que se monitorizan se incluyen las claves de cuenta de servicio de larga duración y las claves de API vinculadas a una cuenta de servicio.
Esta restricción gestionada antigua acepta los siguientes valores de ALLOW
, pero no los de DENY
.
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á de forma proactiva las claves expuestas. Sin embargo, Google Cloud puede inhabilitar las claves expuestas si se usan de formas que afecten negativamente a la plataforma. Independientemente de si la clave expuesta está inhabilitada, Google Cloud crea un evento de Cloud Audit Logs y envía una notificación sobre la clave expuesta a los propietarios del proyecto y a los contactos de seguridad.
Cuando Google Cloud detecta una clave expuesta o inhabilita una clave expuesta, también hace lo siguiente:
Genera eventos de registros de auditoría de Cloud.
Cuando Google Cloud detecta que se ha expuesto 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 la acción de inhabilitación por parte del principal
gcp-compromised-key-response@system.gserviceaccount.com
.
Define el campo
extendedStatus.value
de la clave expuesta o inhabilitada. El campo de estado ampliado incluye la ubicación en la que se detectó la fuga.
Te recomendamos que definas esta restricción como DISABLE_KEY
. Si se asigna el valor WAIT_FOR_ABUSE
a esta restricción, aumenta el riesgo de que se haga un uso inadecuado de las claves expuestas.
Si decides definir la restricción en WAIT_FOR_ABUSE
, te recomendamos que te suscribas a los eventos de Cloud Audit Logs, que revises tu información de contacto de seguridad en Contactos esenciales y que te asegures de que tus contactos de seguridad responden a las notificaciones de forma oportuna.
La restricción iam.serviceAccountKeyExposureResponse
no se puede combinar con una política principal. Para aplicar esta restricción, debe sustituir la política principal.
Definir una restricción gestionada (método antiguo) con reglas de lista
Consola
Para definir una política de organización que contenga una restricción gestionada antigua, sigue estos pasos:
En la Google Cloud consola, ve a la página Políticas de la organización.
En el selector de proyectos, selecciona el recurso para el que quieras definir la política de la organización.
En la página Políticas de organización, selecciona una restricción de la lista. Se mostrará la página Detalles de la política de esa restricción.
Para actualizar la política de la organización de este recurso, haz clic en Gestionar política.
En Implementación de la política, selecciona una opción:
- Para combinar y evaluar las políticas de tu organización, selecciona Combinar con la principal. Para obtener más información sobre la herencia y la jerarquía de recursos, consulta Información sobre la evaluación jerárquica.
- Para anular las políticas heredadas de un recurso superior, seleccione Reemplazar.
Haz clic en Añadir regla.
En Valores de la política, selecciona Personalizado.
En Tipo de política, selecciona Permitir.
En Valores personalizados, introduce el primer valor de la restricción gestionada antigua.
- Si quiere añadir más valores, haga clic en Añadir valor para crear más filas y añada un valor a cada una de ellas.
Cuando haya terminado de añadir valores, haga clic en Hecho.
Para aplicar la política, haz clic en Definir política.
gcloud
Las políticas se pueden definir mediante Google Cloud CLI:
gcloud resource-manager org-policies allow \ CONSTRAINT_NAME \ VALUE_1 [VALUE_N ...] \ --organization=ORGANIZATION_ID \
Sustituye los siguientes valores:
CONSTRAINT_NAME
: nombre de la restricción gestionada antigua. Por ejemplo,constraints/iam.allowServiceAccountCredentialLifetimeExtension
.VALUE_1
,VALUE_N...
: Valores de la restricción gestionada antigua.
Para obtener información sobre cómo usar restricciones en las políticas de organización, consulta Usar restricciones.
Ejemplo de restricción gestionada (antigua) con reglas de lista
En el siguiente fragmento de código se muestra una política de la organización que aplica la restricción iam.allowServiceAccountCredentialLifetimeExtension
legacy managed
(gestión antigua),
que amplía la duración máxima de los tokens de acceso de OAuth 2.0 de las cuentas de servicio incluidas en la lista:
name: organizations/012345678901/policies/iam.allowServiceAccountCredentialLifetimeExtension
spec:
rules:
- values:
allowedValues:
- SERVICE_ACCOUNT_ADDRESS
Aplicar restricciones de forma condicional mediante etiquetas
Las etiquetas se pueden usar para incluir o excluir recursos etiquetados de la implementación obligatoria de las políticas de la organización. Después de crear una etiqueta y asociarla a una cuenta de servicio, puedes añadir una condición a la política para incluir o excluir de forma condicional las cuentas de servicio etiquetadas de la aplicación.
Para obtener más información sobre cómo usar etiquetas con políticas de organización, consulta el artículo Configurar una política de organización con etiquetas.
Mensajes de error
Inhabilitar creación de cuentas de servicio
Si se aplica iam.disableServiceAccountCreation
, no se podrá crear una cuenta de servicio y se mostrará el siguiente error:
FAILED_PRECONDITION: Service account creation is not allowed on this project.
Inhabilitar la creación de claves de API vinculadas a cuentas de servicio
Si se aplica iam.managed.disableServiceAccountApiKeyCreation
, no se podrá crear una clave de API
vinculada a una cuenta de servicio y se mostrará el siguiente error:
FAILED_PRECONDITION: Operation denied by org policy: ["constraints/iam.managed.disableServiceAccountApiKeyCreation": "When enforced, disables creation of API Keys bound to service accounts."]
Inhabilitar creación de claves de cuentas de servicio
Si se aplica iam.disableServiceAccountKeyCreation
, no se podrá crear una cuenta de servicio y se mostrará el siguiente error:
FAILED_PRECONDITION: Key creation is not allowed on this service account.
Inhabilitar la creación de clústeres de Workload Identity
Si se aplica iam.disableWorkloadIdentityClusterCreation
, no se podrá crear un clúster de GKE con Workload Identity habilitado y se mostrará el siguiente error:
FAILED_PRECONDITION: Workload Identity is disabled by the organization policy constraints/iam.disableWorkloadIdentityClusterCreation. Contact your administrator to enable this feature.
Solucionar problemas conocidos
Cuentas de servicio predeterminadas
Si aplicas la restricción iam.disableServiceAccountCreation
, no se podrán crear cuentas de servicio en ese proyecto. Esta limitación también afecta a losGoogle Cloud servicios que, cuando se habilitan, crean automáticamente cuentas de servicio predeterminadas en el proyecto, como los siguientes:
- Compute Engine
- GKE
- App Engine
- Dataflow
Si se aplica la restricción iam.disableServiceAccountCreation
, no se podrán habilitar estos servicios porque no se pueden crear sus cuentas de servicio predeterminadas.
Para solucionar este problema, sigue estos pasos:
- Quita temporalmente la restricción
iam.disableServiceAccountCreation
. - Habilita los servicios que quieras.
- Crea las cuentas de servicio que quieras.
- Por último, vuelve a aplicar la restricción.