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 administradas
Las siguientes restricciones son tipos de restricciones administradas, que se establecen como verdaderas o falsas. Las restricciones administradas se basan en la plataforma de políticas de la organización personalizadas.
Para obtener información sobre cómo crear políticas de la organización que apliquen restricciones administradas, consulta Usa restricciones administradas en una política de la organización.
Evita que se otorguen los roles de propietario y editor 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 automáticamente el rol de editor (roles/editor
) en tu proyecto. También es posible que alguien decida otorgar un rol con muchos privilegios, como el rol de editor o el rol de propietario (roles/owner
), a una cuenta de servicio predeterminada en un momento posterior.
Los roles de Editor y Propietario son roles básicos con muchos privilegios. No debes otorgarlos a ninguna principal en producción, incluidas las cuentas de servicio predeterminadas.
Para evitar que las cuentas de servicio predeterminadas reciban los roles de editor o propietario, usa la restricción administrada iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts
. Esta restricción evita que las cuentas de servicio predeterminadas reciban los roles de Editor o Propietario, ya sea de forma automática o manual.
Inhabilita la creación de cuentas de servicio
Puedes usar la restricción administrada iam.managed.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 Cloudno 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 la organización de cuentas de servicio, consulta Dónde crear cuentas de servicio.
Inhabilita la creación de claves de API vinculadas a cuentas de servicio
Puedes usar la restricción administrada iam.managed.disableServiceAccountApiKeyCreation
para inhabilitar la creación de claves de API vinculadas a cuentas de servicio.
Cuando se establece esta restricción, los usuarios no pueden 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 la creación de claves de cuentas de servicio
Puedes usar la restricción administrada iam.managed.disableServiceAccountKeyCreation
para inhabilitar la creación de claves de cuentas de servicio externas nuevas y claves HMAC de Cloud Storage. 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 administrada iam.managed.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.
Restricciones administradas (heredadas) con reglas booleanas
Las siguientes restricciones son tipos de restricciones administradas heredadas con reglas 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 de 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 iam.automaticIamGrantsForDefaultServiceAccounts
heredada administrada para inhabilitar la asignación de rol automática.
Inhabilita la creación de cuentas de servicio
Puedes usar la restricción administrada heredada 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 Cloudno 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 la organización de 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 heredada administrada iam.disableServiceAccountKeyCreation
para inhabilitar la creación de claves de cuentas de servicio externas nuevas y claves HMAC de Cloud Storage. 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 administrada heredada 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 administrada heredada 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 heredada administrada 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 heredada administrada 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 federación de identidades para cargas de trabajo para GKE habilitada no se verán afectados y seguirán funcionando normalmente.
Cómo establecer una restricción administrada (heredada) con reglas booleanas
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 de uso de la cuenta de servicio que se indican en esta página.
Haz clic en Administrar política.
En Se aplica a, selecciona Anular la política del elemento 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 configurar 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' \ CONSTRAINT_NAME
Aquí, CONSTRAINT_NAME es la restricción que deseas 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 restricción administrada (heredada) con reglas booleanas
En el siguiente fragmento de código, se muestra una política de la organización que aplica la restricción heredada administrada iam.disableServiceAccountCreation
, que evita que se creen cuentas de servicio:
name: organizations/012345678901/policies/iam.disableServiceAccountCreation
spec:
rules:
- enforce: true
Restricciones administradas (legado) con reglas de listas
Las siguientes restricciones son tipos de restricciones administradas heredadas con reglas 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 de acceso extendida y, luego, agrégalas a una política de la organización que incluya la restricción heredada administrada 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 vencen. Puedes cambiar este valor predeterminado si estableces un hora de vencimiento para todas las claves recién creadas en tu proyecto, organización o carpeta.
Para establecer un hora de vencimiento, usa la restricción administrada heredada 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 y ya no se puede usar.
Esta restricción administrada heredada acepta los siguientes valores de ALLOW
, pero no los de DENY
. Como práctica recomendada, usa el hora de vencimiento más corto que satisfaga 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 principal. Para aplicar esta restricción, debes reemplazar o heredar la política principal.
Especifica los proveedores de identidad externos permitidos
Si usas la federación de identidades para 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 administrada heredada constraints/iam.workloadIdentityPoolProviders
para especificar los 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 administrada heredada, 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 Workload Identity, 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 pueden acceder a tus recursos de Google Cloud . Para limitar las cuentas de AWS permitidas, usa la restricción administrada heredada constraints/iam.workloadIdentityPoolAwsAccounts
para especificar una lista de IDs de cuentas permitidas.
Inhabilita automáticamente las claves de cuentas de servicio expuestas
Google Cloud detecta ocasionalmente que se expuso una clave de cuenta de servicio en particular; por ejemplo, podría detectar una clave en un repositorio público. Para especificar qué hace Google Cloud con estas claves, usa la restricción administrada heredadaiam.serviceAccountKeyExposureResponse
. Las claves que se supervisan incluyen claves de cuenta de servicio de larga duración y claves de API vinculadas a una cuenta de servicio.
Esta restricción administrada heredada acepta los siguientes valores de ALLOW
, pero no acepta valores 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 aún puede 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.
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 expuso 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 del principal
gcp-compromised-key-response@system.gserviceaccount.com
.
Establece el campo
extendedStatus.value
de la clave expuesta o inhabilitada. El campo de estado extendido incluye la ubicación en la que se detectó la fuga.
Te recomendamos que establezcas esta restricción en DISABLE_KEY
. Establecer esta restricción en WAIT_FOR_ABUSE
aumenta el riesgo de que se haga un uso inadecuado de las claves expuestas.
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 tu información de contacto de seguridad en Contactos esenciales y te asegures de que tus contactos de seguridad respondan a las notificaciones de manera oportuna.
La restricción iam.serviceAccountKeyExposureResponse
no se puede combinar con una política principal. Para aplicar esta restricción, debes reemplazar la política principal.
Cómo establecer una restricción administrada (heredada) con reglas de lista
Console
Para establecer una política de la organización que contenga una restricción heredada administrada, 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.
Si deseas actualizar la política de la organización para este recurso, haz clic en Administrar 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 de la restricción heredada administrada.
- 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 configurar 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 administrada heredada. Por ejemplo,constraints/iam.allowServiceAccountCredentialLifetimeExtension
VALUE_1
,VALUE_N...
: Valores para la restricción administrada heredada.
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 restricción administrada (heredada) 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 heredada administrada 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
Cómo aplicar restricciones de forma condicional con etiquetas
Las etiquetas se pueden usar para incluir o excluir recursos etiquetados de la aplicación de la política de la organización. Después de crear una etiqueta y conectarla a una cuenta de servicio, puedes agregar una condición a la política para incluir o excluir de forma condicional las cuentas de servicio etiquetadas de la aplicación de la política.
Para obtener más detalles sobre el uso de etiquetas con políticas de la organización, consulta Configura una política de la organización con etiquetas.
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 API vinculadas a cuentas de servicio
Si iam.managed.disableServiceAccountApiKeyCreation
se aplica de forma forzosa, la creación de una clave de API vinculada a una cuenta de servicio generará 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 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 a los servicios deGoogle Cloud 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
, 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.