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 administración de identidades y accesos.

Cuando configuras estas restricciones, se aplican en las creaciones y modificaciones futuras de las cuentas de servicio. Estas restricciones no son retroactivas y no afectarán 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.

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

Establece una restricción booleana

Console

Si deseas establecer una política de la organización que incluya una restricción para restringir el uso de la cuenta de servicio, haz lo siguiente:

  1. Ve a la página Políticas de la organización en Google Cloud Console.

    Ir a la página Políticas de la organización

  2. Haz clic en la lista desplegable Organización, en la parte superior de la página. Luego, selecciona tu organización.
  3. Haz clic en una de las restricciones booleanas de uso de la cuenta de servicio enumeradas anteriormente.
  4. Haz clic en el botón Editar.
  5. En Se aplica a, selecciona Personalizar.
  6. En Aplicación, selecciona Activado.
  7. Haz clic en Guardar. Aparecerá una notificación para confirmar que se actualizó la política.

gcloud

Las políticas se pueden configurar mediante la herramienta de línea de comandos de gcloud.

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 política, se puede emitir el mismo comando con el siguiente

disable-enforce
comando:

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:

resource: "organizations/842463781240"
policy {
  constraint: "constraints/iam.disableServiceAccountCreation"
  etag: "\a\005L\252\122\321\946\334"
  boolean_policy {
  enforced: true
  }
}

Enumerar restricciones

Las siguientes restricciones son tipos de restricción de lista, que se configuran como verdadero o falso.

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. Con este fin, identifica las cuentas de servicio que necesitan una vida útil prolongada para tokens de acceso y, luego, agrega estas cuentas de servicio a una política de la organización que incluya la restricción de lista constraints/iam.allowServiceAccountCredentialLifetimeExtension.

Establece una restricción de listas

Console

A fin de configurar una política de la organización que extienda la vida útil máxima de los tokens de acceso de OAuth 2.0 para una cuenta de servicio, haz lo siguiente:

  1. Ve a la página Políticas de la organización en Google Cloud Console.

    Ir a la página Políticas de la organización

  2. Haz clic en la lista desplegable Organización, en la parte superior de la página. Luego, selecciona tu organización.
  3. Haz clic en la restricción constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  4. Haz clic en el botón Editar.
  5. En Se aplica a, selecciona Personalizar.
  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. En Valores de la política, selecciona Personalizar.
  8. En Tipo de política, selecciona Permitir.
  9. En Valores personalizados, ingresa la dirección de correo electrónico de una cuenta de servicio para la que deseas extender la vida útil de los tokens de acceso de OAuth 2.0.
    1. Si deseas agregar más direcciones, haz clic en Nuevo valor de la política para crear más filas y agrega una dirección a cada fila.
  10. Haga clic en Guardar. Una notificación confirma que se actualizó la política.

gcloud

Las políticas se pueden configurar mediante la herramienta de línea de comandos de gcloud.

Para configurar una política de la organización que extienda la vida útil máxima de los tokens de acceso de OAuth 2.0 para una cuenta de servicio, ejecuta el siguiente comando:

gcloud resource-manager org-policies allow \
    constraints/iam.allowServiceAccountCredentialLifetimeExtension \
    SERVICE_ACCOUNT_ADDRESS [SERVICE_ACCOUNT_ADDRESS ...] \
    --organization 'ORGANIZATION_ID' \

En el ejemplo anterior, SERVICE_ACCOUNT_ADDRESS es la lista de direcciones de correo electrónico de la cuenta de servicio a la que deseas proporcionar tokens de acceso extendido.

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:

resource: "organizations/842463781240"
policy {
  constraint: "constraints/iam.allowServiceAccountCredentialLifetimeExtension"
  etag: "\a\005L\252\122\321\946\334"
  listPolicy {
    allowedValues:
      - <var>SERVICE_ACCOUNT_ADDRESS</var>
  }
  updateTime: <var>CURRENT_TIME</var>
}

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.