Soluciona problemas de políticas de la organización para cuentas de servicio

El servicio de políticas de la organización tiene varias restricciones predefinidas y administradas que pueden afectar a las cuentas de servicio de tu organización. En esta página, se explica qué errores generan esas políticas de la organización y los pasos que puedes seguir para resolverlos.

Soluciona problemas relacionados con la creación de claves de cuentas de servicio inhabilitadas

Si se aplica la restricción iam.disableServiceAccountKeyCreation a tu organización, no podrás crear claves para ninguna cuenta de servicio en tu organización. Para obtener más información sobre esta restricción, consulta Cómo inhabilitar la creación de claves de cuentas de servicio.

Error de creación de claves

Si intentas crear una clave de cuenta de servicio, pero la restricción iam.disableServiceAccountKeyCreation bloquea la acción, recibirás el siguiente mensaje de error:

Console

En la consola de Google Cloud, aparece un diálogo con el encabezado Se inhabilitó la creación de claves de cuenta de servicio. El diálogo indica que la restricción iam.disableServiceAccountKeyCreation se aplica a tu organización.

gcloud

ERROR: (gcloud.iam.service-accounts.keys.create) FAILED_PRECONDITION: Key
creation is not allowed on this service account.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: Key creation is not allowed on this service account.
    subject: projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com
    type: constraints/iam.disableServiceAccountKeyCreation

REST

{
  "error": {
    "code": 400,
    "message": "Key creation is not allowed on this service account.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/iam.disableServiceAccountKeyCreation",
            "subject": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com",
            "description": "Key creation is not allowed on this service account."
          }
        ]
      }
    ]
  }
}

Resolución recomendada para el error de creación de claves de la cuenta de servicio

Si una política de la organización te impide crear una clave de cuenta de servicio, te recomendamos que hagas lo siguiente:

  1. Evalúa si se necesita una clave de cuenta de servicio.

    No recomendamos usar claves de cuenta de servicio para la autenticación. Esto se debe a que las claves de cuenta de servicio pueden convertirse en un riesgo para la seguridad si no se administran de forma adecuada, lo que aumenta la vulnerabilidad a amenazas como filtración de credenciales, elevación de privilegios, divulgación de información y no repudio.

    En la mayoría de los casos, debes usar una alternativa más segura para autenticarte en lugar de usar una clave de cuenta de servicio.

  2. Si se necesita una clave de cuenta de servicio para tu caso de uso, inhabilita la restricción iam.disableServiceAccountKeyCreation para tu proyecto.

Para inhabilitar la restricción de la política de la organización, desactiva la aplicación de la restricción o exime tu proyecto de la aplicación:

  • Para desactivar la aplicación de la restricción para toda la organización, haz lo siguiente:

    1. Asegúrate de tener el rol de administrador de políticas de la organización (roles/orgpolicy.policyAdmin) a nivel de la organización. Este rol solo está disponible para otorgar en organizaciones y no aparece en la lista de roles de los proyectos.

      Si deseas obtener información para otorgar roles a nivel de la organización, consulta Administra el acceso a proyectos, carpetas y organizaciones.

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

    3. En el selector de proyectos, selecciona la organización para la que deseas inhabilitar la restricción iam.disableServiceAccountKeyCreation.

    4. En el campo Filtro, ingresa iam.disableServiceAccountKeyCreation. Luego, en la lista de políticas, haz clic en Inhabilitar la creación de claves de cuentas de servicio.

    5. Haz clic en Administrar política.

    6. En la sección Fuente de la política, asegúrate de que esté seleccionada la opción Anular la política del elemento superior.

    7. En Aplicación, desactiva la aplicación de esta restricción de la política de la organización.

    8. Haz clic en Establecer política.

  • Para eximir tu proyecto de la aplicación forzosa, haz lo siguiente:

    1. Asegúrate de tener el rol de administrador de etiquetas (roles/resourcemanager.tagAdmin) y el rol de administrador de políticas de la organización (roles/orgpolicy.policyAdmin) a nivel de la organización. Si deseas obtener información para otorgar roles a nivel de la organización, consulta Administra el acceso a proyectos, carpetas y organizaciones.
    2. A nivel de la organización, crea una clave y un valor de etiqueta que usarás para definir si un recurso debe estar exento de la política de la organización. Recomendamos crear una etiqueta con la clave disableServiceAccountKeyCreation y los valores enforced y not_enforced.

      Para aprender a crear claves y valores de etiqueta, consulta Crea y define una etiqueta nueva.

    3. Adjunta la etiqueta disableServiceAccountKeyCreation a la organización y configúrala con el valor enforced. Todos los recursos de la organización heredan este valor de etiqueta, a menos que se reemplace por un valor de etiqueta diferente.

      Para obtener información sobre cómo adjuntar etiquetas a los recursos, consulta Adjunta etiquetas a los recursos.

    4. Para cada cuenta de servicio que desees eximir de la política de la organización, adjunta la etiqueta disableServiceAccountKeyCreation y establece su valor en not_enforced. Configurar un valor de etiqueta para una cuenta de servicio de esta manera anula el valor de la etiqueta heredado de la organización.
    5. Crea o actualiza la política de la organización que impide la creación de claves de cuentas de servicio para que no aplique la restricción para los recursos exentos. Esta política debe tener las siguientes reglas:

      • Configura la restricción iam.disableServiceAccountKeyCreation para que no se aplique en ningún recurso con la etiqueta disableServiceAccountKeyCreation: not_enforced. La condición en esta regla debería verse de la siguiente manera:

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
        
      • Configura la restricción iam.disableServiceAccountKeyCreation para que se aplique en todos los demás recursos.

Soluciona problemas relacionados con la creación de cuentas de servicio inhabilitadas

Si se aplica la restricción iam.disableServiceAccountCreation a tu organización, no podrás crear cuentas de servicio en ningún proyecto de tu organización. Para obtener más información sobre esta restricción, consulta Cómo inhabilitar la creación de cuentas de servicio.

Error de creación de la cuenta de servicio

Si intentas crear una cuenta de servicio, pero la restricción iam.disableServiceAccountCreation bloquea la acción, recibirás el siguiente mensaje de error:

Console

En la consola de Google Cloud, aparece un diálogo con el encabezado Falló la creación de la cuenta de servicio. El diálogo indica que se produjo un error en la acción que intentas realizar. Vuelve a intentarlo.

gcloud

ERROR: (gcloud.iam.service-accounts.create) FAILED_PRECONDITION: Service account
creation is not allowed on this project.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: Service account creation is not allowed on this project.
    subject: projects/PROJECT_ID/serviceAccounts/?configvalue=
    type: constraints/iam.disableServiceAccountCreation

REST

{
  "error": {
    "code": 400,
    "message": "Service account creation is not allowed on this project.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/iam.disableServiceAccountCreation",
            "subject": "projects/PROJECT_ID/serviceAccounts/?configvalue=",
            "description": "Service account creation is not allowed on this project."
          }
        ]
      }
    ]
  }
}

Resolución recomendada para el error de creación de la cuenta de servicio

Si una política de la organización te impide crear una cuenta de servicio, te recomendamos que hagas lo siguiente:

  1. Evalúa si se necesita una cuenta de servicio.

    Revisa Elige cuándo usar las cuentas de servicio para confirmar que se necesita una cuenta de servicio para tu caso de uso.

  2. Si se necesita una cuenta de servicio para tu caso de uso, inhabilita la restricción iam.disableServiceAccountCreation para tu proyecto.

Para inhabilitar la restricción de la política de la organización, desactiva la aplicación de la restricción o exime tu proyecto de la aplicación:

  • Para desactivar la aplicación de la restricción para toda la organización, haz lo siguiente:

    1. Asegúrate de tener el rol de administrador de políticas de la organización (roles/orgpolicy.policyAdmin) a nivel de la organización. Este rol solo está disponible para otorgar en organizaciones y no aparece en la lista de roles de los proyectos.

      Si deseas obtener información para otorgar roles a nivel de la organización, consulta Administra el acceso a proyectos, carpetas y organizaciones.

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

    3. En el selector de proyectos, selecciona la organización para la que deseas inhabilitar la restricción iam.disableServiceAccountCreation.

    4. En el campo Filtro, ingresa iam.disableServiceAccountCreation. Luego, en la lista de políticas, haz clic en Inhabilitar la creación de cuentas de servicio.

    5. Haz clic en Administrar política.

    6. En la sección Fuente de la política, asegúrate de que esté seleccionada la opción Anular la política del elemento superior.

    7. En Aplicación, desactiva la aplicación de esta restricción de la política de la organización.

    8. Haz clic en Establecer política.

  • Para eximir tu proyecto de la aplicación forzosa, haz lo siguiente:

    1. Asegúrate de tener el rol de administrador de etiquetas (roles/resourcemanager.tagAdmin) y el rol de administrador de políticas de la organización (roles/orgpolicy.policyAdmin) a nivel de la organización. Si deseas obtener información para otorgar roles a nivel de la organización, consulta Administra el acceso a proyectos, carpetas y organizaciones.
    2. A nivel de la organización, crea una clave y un valor de etiqueta que usarás para definir si un recurso debe estar exento de la política de la organización. Recomendamos crear una etiqueta con la clave disableServiceAccountCreation y los valores enforced y not_enforced.

      Para aprender a crear claves y valores de etiqueta, consulta Crea y define una etiqueta nueva.

    3. Adjunta la etiqueta disableServiceAccountCreation a la organización y configúrala con el valor enforced. Todos los recursos de la organización heredan este valor de etiqueta, a menos que se reemplace por un valor de etiqueta diferente.

      Para obtener información sobre cómo adjuntar etiquetas a los recursos, consulta Adjunta etiquetas a los recursos.

    4. Para cada proyecto o carpeta que desees eximir de la política de la organización, adjunta la etiqueta disableServiceAccountCreation y establece su valor en not_enforced. Configurar un valor de etiqueta para un proyecto o carpeta de esta manera anula el valor de la etiqueta heredado de la organización.
    5. Crea o actualiza la política de la organización que impide la creación de cuentas de servicio para que no aplique la restricción para los recursos exentos. Esta política debe tener las siguientes reglas:

      • Configura la restricción iam.disableServiceAccountCreation para que no se aplique en ningún recurso con la etiqueta disableServiceAccountCreation: not_enforced. La condición en esta regla debería verse de la siguiente manera:

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountCreation', 'not_enforced')"
        
      • Configura la restricción iam.disableServiceAccountCreation para que se aplique en todos los demás recursos.

Soluciona problemas relacionados con la asignación de roles a cuentas de servicio predeterminadas

Las cuentas de servicio predeterminadas se crean automáticamente cuando usas ciertos servicios de Google Cloud. Tienen los siguientes identificadores:

  • Cuenta de servicio predeterminada del servicio de App Engine: PROJECT_ID@appspot.gserviceaccount.com
  • Cuenta de servicio predeterminada de Compute Engine: PROJECT_NUMBER-compute@developer.gserviceaccount.com

A todas las cuentas de servicio predeterminadas se les otorga automáticamente el rol de Editor (roles/editor) cuando se crean, a menos que una política de la organización inhabilite ese comportamiento. Hay dos restricciones de la política de la organización que impiden que se otorgue el rol de Editor a las cuentas de servicio predeterminadas:

  • iam.automaticIamGrantsForDefaultServiceAccounts: Es una restricción predefinida que evita que se otorguen roles automáticamente a las cuentas de servicio predeterminadas. Esta restricción no te impide otorgar más adelante el rol de editor a las cuentas de servicio predeterminadas.
  • constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts: Es una restricción administrada que evita que los roles de editor y propietario (roles/owner) se otorguen a las cuentas de servicio predeterminadas.

Error de otorgamiento de roles básicos a cuentas de servicio

Si se aplica la restricción iam.automaticIamGrantsForDefaultServiceAccounts o constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts a tu proyecto, es posible que las cargas de trabajo de tu proyecto que usan las cuentas de servicio predeterminadas encuentren errores de permisos insuficientes. Para obtener información sobre qué roles otorgar a una cuenta de servicio predeterminada, consulta Recomendación para otorgar roles a cuentas de servicio predeterminadas.

La restricción iam.automaticIamGrantsForDefaultServiceAccounts no genera errores por sí sola. Sin embargo, debido a esta restricción, es posible que una carga de trabajo que use la cuenta de servicio predeterminada no tenga los permisos que necesita.

Además, si se aplica la restricción constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts a tu proyecto, verás un mensaje de error como el siguiente si intentas otorgar el rol de propietario o editor a una cuenta de servicio predeterminada:

Console

En la consola de Google Cloud, aparece un diálogo con el encabezado Error de actualización de la política de IAM. El diálogo indica que el administrador de políticas de la organización restringió los cambios que intentas realizar en tu política de IAM y, luego, enumera las restricciones que bloquean la actualización. Las restricciones que se enumeran incluyen la restricción customConstraints/custom.cantGrantProjectIamAdmin.

gcloud

ERROR: (gcloud.projects.set-iam-policy) FAILED_PRECONDITION: Operation denied by
org policy on resource 'RESOURCE_ID':
["constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts":
"When this constraint is enforced, it prevents anyone from granting the Editor
role (roles/editor) or the Owner role (roles/owner) to the Compute Engine and
App Engine default service accounts, at any time. To learn more about default
service accounts, see
https://cloud.google.com/iam/help/service-accounts/default. Enforcing this
constraint prevents the default service accounts from automatically being
granted the Editor role (roles/editor). This might cause permission issues for
services that use these service accounts. To learn which roles to grant to each
service account, see
https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default."].

REST

{
  "error": {
    "code": 400,
    "message": "Operation denied by org policy on resource
    'RESOURCE_ID':
    [\"constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts\":
    \"When this constraint is enforced, it prevents anyone from granting the
    Editor role (roles/editor) or the Owner role (roles/owner) to the Compute
    Engine and App Engine default service accounts, at any time. To learn more
    about default service accounts, see
    https://cloud.google.com/iam/help/service-accounts/default.\n Enforcing this
    constraint prevents the default service accounts from automatically being
    granted the Editor role (roles/editor). This might cause permission issues
    for services that use these service accounts. To learn which roles to grant
    to each service account, see
    https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.\"].",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "CUSTOM_ORG_POLICY_VIOLATION",
        "domain": "googleapis.com",
        "metadata": {
          "customConstraints": "constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts",
          "resource": "projects/PROJECT_ID"
        }
      }
    ]
  }
}

Resolución recomendada para otorgar roles a las cuentas de servicio predeterminadas

Si una política de la organización te impide otorgar el rol de Editor o Propietario a una cuenta de servicio predeterminada, debes encontrar un rol menos permisivo para otorgarle a la cuenta de servicio. El rol que necesita la cuenta de servicio depende del servicio que usas y de las tareas que deseas realizar.

Revisa la siguiente tabla para determinar qué rol otorgar a qué cuenta de servicio predeterminada, según el servicio que uses:

Servicio Cuenta de servicio predeterminada Rol que se otorgará
App Engine Cuenta de servicio predeterminada de App Engine (PROJECT_ID@appspot.gserviceaccount.com) Rol de la cuenta de Cloud Build (roles/cloudbuild.builds.builder)
Compute Engine Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Los roles que necesita la cuenta de servicio predeterminada dependen de la tarea que desees realizar. Para saber qué roles son necesarios, revisa la documentación de la tarea que deseas realizar o consulta Elige roles predefinidos.

Cuando decidas qué rol otorgar, sigue las prácticas recomendadas que se describen en la página Cuentas de servicio de la documentación de Compute Engine.

Cloud Build Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com) Rol de la cuenta de servicio de Cloud Build (roles/cloudbuild.builds.builder)
Cloud Deploy Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com) Para ver qué roles otorgar a esta cuenta de servicio, busca la guía de inicio rápido de Cloud Deploy que corresponda a tu caso de uso y, luego, otorga los roles que se describen en esa guía. Para obtener una lista de las guías de inicio rápido de Cloud Deploy, consulta Guías de inicio rápido en la documentación de Cloud Deploy.
Funciones de Cloud Run y Cloud Functions Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Para implementar funciones: Rol de cuenta de Cloud Build (roles/cloudbuild.builds.builder)

Para obtener más información, consulta Cuenta de servicio personalizada para Cloud Build.

Cloud Run Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Los roles que necesita la cuenta de servicio predeterminada dependen de la tarea que desees realizar. Para saber qué roles son necesarios, revisa la documentación de la tarea que deseas realizar o consulta Elige roles predefinidos.

Para obtener detalles sobre los roles de Cloud Run, consulta Control de acceso con IAM en la documentación de Cloud Run.

Google Kubernetes Engine Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Rol de la cuenta de servicio predeterminada de nodos de Kubernetes Engine (roles/container.defaultNodeServiceAccount)

Para obtener más información, consulta Usa cuentas de servicio de IAM con privilegios mínimos.

Workflows Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Los roles que necesita la cuenta de servicio predeterminada dependen de la tarea que desees realizar. Para determinar qué roles son necesarios, revisa la documentación de la tarea que deseas realizar o consulta Elige roles predefinidos.

Sigue las prácticas recomendadas que se describen en la página Otorga permiso a un flujo de trabajo para acceder a recursos de Google Cloud en la documentación de Workflows.