Solucionar errores de políticas de organización de cuentas de servicio

El servicio de políticas de la organización tiene varias restricciones predefinidas y gestionadas 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 qué pasos puede seguir para resolverlos.

Roles obligatorios

Para obtener los permisos que necesitas para solucionar problemas de políticas de la organización, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de políticas de la organización (roles/orgpolicy.policyAdmin) en la organización. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.

Solucionar problemas 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 de tu organización. Para obtener más información sobre esta restricción, consulta el artículo Inhabilitar la creación de claves de cuentas de servicio.

Error al crear la clave

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

Consola

En la consola de Trusted Cloud , aparece un cuadro de diálogo con el título La creación de claves de cuenta de servicio está inhabilitada. En el cuadro de diálogo se indica que la restricción iam.disableServiceAccountKeyCreation se aplica en 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.?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.
    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.?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.",
            "description": "Key creation is not allowed on this service account."
          }
        ]
      }
    ]
  }
}

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

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

  1. Determina si se necesita una clave de cuenta de servicio.

    No recomendamos usar claves de cuentas de servicio para la autenticación. Esto se debe a que las claves de las cuentas de servicio pueden convertirse en un riesgo para la seguridad si no se gestionan correctamente, lo que aumenta la vulnerabilidad a amenazas como la filtración de credenciales, la apropiación de privilegios, la divulgación de información y el no repudio.

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

  2. Si necesitas una clave de cuenta de servicio para tu caso práctico, inhabilita la restricción iam.disableServiceAccountKeyCreation en tu proyecto.

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

  • Para desactivar la aplicación de la restricción en toda tu organización, sigue estos pasos:

    1. Asegúrate de que tienes el rol Administrador de políticas de la organización (roles/orgpolicy.policyAdmin) a nivel de organización. Esta función solo se puede asignar en organizaciones y no aparece en la lista de funciones de los proyectos.

      Para saber cómo asignar roles a nivel de organización, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

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

      Ir a Políticas de organización

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

    4. En el campo Filter, introduce iam.disableServiceAccountKeyCreation. A continuación, en la lista de políticas, haz clic en Inhabilitar la creación de claves de cuenta de servicio.

    5. Haz clic en Gestionar política.

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

    7. En Implementación, desactiva la implementación de esta restricción de política de organización.

    8. Haz clic en Definir política.

  • Para eximir tu proyecto de la aplicación de la política, haz lo siguiente:

    1. Asegúrate de que tienes el rol Administrador de etiquetas (roles/resourcemanager.tagAdmin) y el rol Administrador de políticas de organización (roles/orgpolicy.policyAdmin) a nivel de organización. Para saber cómo asignar roles a nivel de organización, consulta Gestionar el acceso a proyectos, carpetas y organizaciones.
    2. A nivel de organización, cree una clave y un valor de etiqueta que utilizará para definir si un recurso debe estar exento de la política de organización. Te recomendamos que crees una etiqueta con la clave disableServiceAccountKeyCreation y los valores enforced y not_enforced.

      Para saber cómo crear claves y valores de etiquetas, consulta el artículo Crear y definir una etiqueta.

    3. Asigne la etiqueta disableServiceAccountKeyCreation a la organización y defina su valor como enforced. Todos los recursos de la organización heredan este valor de etiqueta, a menos que se sobrescriba con otro valor.

      Para saber cómo adjuntar etiquetas a los recursos, consulta Adjuntar etiquetas a recursos.

    4. En cada cuenta de servicio que quieras excluir de la política de la organización, añade la etiqueta disableServiceAccountKeyCreation y asigna el valor not_enforced. Si asignas un valor de etiqueta a una cuenta de servicio de esta forma, se anula el valor de etiqueta heredado de la organización.
    5. Crea o actualiza la política de organización que impide la creación de claves de cuentas de servicio para que no se aplique la restricción a los recursos exentos. Esta política debe incluir las siguientes reglas:

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

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

Solucionar problemas al crear una cuenta de servicio inhabilitada

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 el artículo Inhabilitar la creación de cuentas de servicio.

Error al crear la cuenta de servicio

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

Consola

En la consola Trusted Cloud , aparece un cuadro de diálogo con el título No se ha podido crear la cuenta de servicio. En el cuadro de diálogo se indica que no se ha podido realizar la acción. Inténtalo de nuevo.

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 organización te impide crear una cuenta de servicio, te recomendamos que hagas lo siguiente:

  1. Evalúa si necesitas una cuenta de servicio.

    Consulta la sección Elegir cuándo usar cuentas de servicio para confirmar si necesitas una cuenta de servicio para tu caso práctico.

  2. Si necesitas una cuenta de servicio para tu caso práctico, inhabilita la restricción iam.disableServiceAccountCreation en tu proyecto.

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

  • Para desactivar la aplicación de la restricción en toda tu organización, sigue estos pasos:

    1. Asegúrate de que tienes el rol Administrador de políticas de la organización (roles/orgpolicy.policyAdmin) a nivel de organización. Esta función solo se puede asignar en organizaciones y no aparece en la lista de funciones de los proyectos.

      Para saber cómo asignar roles a nivel de organización, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

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

      Ir a Políticas de organización

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

    4. En el campo Filter, introduce iam.disableServiceAccountCreation. A continuación, en la lista de políticas, haz clic en Inhabilitar la creación de cuentas de servicio.

    5. Haz clic en Gestionar política.

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

    7. En Implementación, desactiva la implementación de esta restricción de política de organización.

    8. Haz clic en Definir política.

  • Para eximir tu proyecto de la aplicación de la política, haz lo siguiente:

    1. Asegúrate de que tienes el rol Administrador de etiquetas (roles/resourcemanager.tagAdmin) y el rol Administrador de políticas de organización (roles/orgpolicy.policyAdmin) a nivel de organización. Para saber cómo asignar roles a nivel de organización, consulta Gestionar el acceso a proyectos, carpetas y organizaciones.
    2. A nivel de organización, cree una clave y un valor de etiqueta que utilizará para definir si un recurso debe estar exento de la política de organización. Te recomendamos que crees una etiqueta con la clave disableServiceAccountCreation y los valores enforced y not_enforced.

      Para saber cómo crear claves y valores de etiquetas, consulta el artículo Crear y definir una etiqueta.

    3. Asigne la etiqueta disableServiceAccountCreation a la organización y defina su valor como enforced. Todos los recursos de la organización heredan este valor de etiqueta, a menos que se sobrescriba con otro valor.

      Para saber cómo adjuntar etiquetas a los recursos, consulta Adjuntar etiquetas a recursos.

    4. En cada proyecto o carpeta que quieras excluir de la política de la organización, añade la etiqueta disableServiceAccountCreation y asigna el valor not_enforced. Si asignas un valor de etiqueta a un proyecto o una carpeta de esta forma, se anula el valor de 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 se aplique la restricción a los recursos exentos. Esta política debe incluir las siguientes reglas:

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

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

Solucionar problemas al conceder roles a cuentas de servicio predeterminadas

La cuenta de servicio predeterminada de Compute Engine se crea automáticamente en tu proyecto cuando usas determinados Trusted Cloud servicios. Esta cuenta de servicio tiene el identificador PROJECT_NUMBER-compute@.

Todas las cuentas de servicio predeterminadas reciben automáticamente el rol Editor (roles/editor) cuando se crean, a menos que se aplique la restricción de la política de organización iam.automaticIamGrantsForDefaultServiceAccounts en tu proyecto. Esta restricción impide que se conceda automáticamente el rol Editor a las cuentas de servicio predeterminadas.

Error al conceder roles básicos a cuentas de servicio

Si se aplica la restricción iam.automaticIamGrantsForDefaultServiceAccounts a tu proyecto, es posible que las cargas de trabajo de tu proyecto que usen las cuentas de servicio predeterminadas tengan errores de permisos insuficientes. Para saber qué roles debes conceder a una cuenta de servicio predeterminada, consulta Resolución recomendada para conceder roles a cuentas de servicio predeterminadas.

La restricción iam.automaticIamGrantsForDefaultServiceAccounts no provoca 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.

Resolución recomendada para conceder roles a cuentas de servicio predeterminadas

Si una política de la organización te impide conceder el rol Editor o Propietario a una cuenta de servicio predeterminada, debes buscar un rol con menos permisos para concederlo a la cuenta de servicio. El rol que necesita la cuenta de servicio depende del servicio que estés usando y de las tareas que quieras llevar a cabo.

Consulta la siguiente tabla para determinar qué rol debes asignar a la cuenta de servicio predeterminada de Compute Engine en función del servicio que utilices:

Servicio Cuenta de servicio predeterminada Rol que asignar
Compute Engine Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@)

Los roles que necesita la cuenta de servicio predeterminada dependen de la tarea que quieras llevar a cabo. Para saber qué roles son necesarios, consulta la documentación de la tarea que quieras llevar a cabo o el artículo Buscar los roles predefinidos adecuados.

Cuando decidas qué rol asignar, 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@) Rol de cuenta de servicio de Cloud Build (roles/cloudbuild.builds.builder)
Cloud Deploy Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@) Para ver qué roles debes conceder a esta cuenta de servicio, busca la guía de inicio rápido de Cloud Deploy que corresponda a tu caso práctico y, a continuación, concede los roles que se describen en esa guía. Para ver 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.
Cloud Run Functions y Cloud Functions Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@)

Para desplegar 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@)

Los roles que necesita la cuenta de servicio predeterminada dependen de la tarea que quieras llevar a cabo. Para saber qué roles son necesarios, consulta la documentación de la tarea que quieras llevar a cabo o el artículo Buscar los roles predefinidos adecuados.

Para obtener información sobre los roles de Cloud Run, consulta el artículo Control de acceso con IAM de la documentación de Cloud Run.

Google Kubernetes Engine Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@)

Rol de cuenta de servicio de nodo predeterminado de Kubernetes Engine (roles/container.defaultNodeServiceAccount)

Para obtener más información, consulta Usar cuentas de servicio de IAM con el menor número de privilegios posible.

Flujos de trabajo Cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@)

Los roles que necesita la cuenta de servicio predeterminada dependen de la tarea que quieras llevar a cabo. Para saber qué roles son necesarios, consulta la documentación de la tarea que quieras llevar a cabo o el artículo Buscar los roles predefinidos adecuados.

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