Restringe el uso de las cuentas de servicio

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 boolean constraint, 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 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.

Inhabilita 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:

  1. En la consola de Google Cloud, ve a la página Políticas de la organización.

    Ir a Políticas de la organización

  2. En el selector de proyectos, selecciona la organización para la que deseas restringir el uso de la cuenta de servicio.

  3. Haz clic en una de las restricciones booleanas de uso de la cuenta de servicio que se enumeran en esta página.

  4. Haz clic en Administrar política.

  5. En Se aplica a, selecciona Anular la política del superior.

  6. Haz clic en Agregar una regla.

  7. En Aplicación, selecciona Activado.

  8. 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

disable-enforce
bq load.

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

Restricciones de lista

Las siguientes restricciones son tipos de restricción 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 el ciclo de vida 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 cuentas de servicio nunca vencen. Puedes cambiar este valor predeterminado si configuras una hora de vencimiento para todas las claves recién creadas en tu proyecto, organización o carpeta.

Si quieres establecer una hora de vencimiento, usa la restricción de lista constraints/iam.serviceAccountKeyExpiryHours para especificar la cantidad de horas durante las que será válida una clave recién creada. Después de este período, la clave de la cuenta de servicio vencerá y ya no podrás usarla.

Esta restricción de lista acepta los siguientes valores de ALLOW; no acepta valores de DENY. Como práctica recomendada, utiliza el hora de vencimiento más corto que se adapte a tus necesidades:

  • 1h: 1 hora
  • 8h: 8 horas
  • 24h: 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 heredar la política superior.

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, todos los proveedores están permitidos. Si quieres establecer un límite, usa la restricción de lista 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 que se permiten, usa la restricción de la 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 para 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 pueden acceder a tus recursos de Google Cloud. Para limitar las cuentas de AWS que se permiten, usa la restricción de lista constraints/iam.workloadIdentityPoolAwsAccounts a fin de especificar una lista de ID de cuentas permitidos.

Inhabilita automáticamente las claves de cuenta de servicio expuestas

En ocasiones, Google Cloud detecta que una clave de cuenta de servicio específica se expuso; por ejemplo, puede 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 valores de DENY.

  • DISABLE_KEY: Si Google Cloud detecta una clave expuesta, la inhabilitará automáticamente.
  • WAIT_FOR_ABUSE: Google Cloud no inhabilitará las claves expuestas de forma proactiva. Sin embargo, es posible que Google Cloud inhabilite las claves expuestas si se usan de formas que afecten de manera negativa a la plataforma.

Cuando Google Cloud inhabilita una clave, los registros de auditoría contienen la gcp-compromised-key-response@system.gserviceaccount.com principal.

Te recomendamos que establezcas esta restricción en DISABLE_KEY. Establecer esta restricción en WAIT_FOR_ABUSE aumenta el riesgo de que las claves filtradas se usen de forma inadecuada.

Si decides establecer la restricción en WAIT_FOR_ABUSE, te recomendamos que 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 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:

  1. En la consola de Google Cloud, ve a la página Políticas de la organización.

    Ir a Políticas de la organización

  2. Haz clic en la lista desplegable Organización en la parte superior de la página y, luego, selecciona tu organización.

  3. Haz clic en la restricción que deseas agregar.

  4. Haz clic en Administrar política.

  5. En Se aplica a, selecciona Anular la política del superior.

  6. En Aplicación de la política, selecciona Combinar con superior para combinar esta política con las políticas existentes de tu jerarquía.

  7. Haz clic en Agregar una regla.

  8. En Valores de la política, selecciona Personalizar.

  9. En Tipo de política, selecciona Permitir.

  10. En Valores personalizados, ingresa el primer valor de la restricción de lista.

    1. Si deseas agregar más valores, haz clic en Nuevo valor de la política para crear más filas y agrega un valor a cada fila.
  11. 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:

  1. Quita la restricción iam.disableServiceAccountCreation de forma temporal.
  2. Habilita los servicios que deseas.
  3. Crea cualquier otra cuenta de servicio que desees.
  4. Por último, vuelve a aplicar la restricción.