Solucionar problemas de OS Login


En este documento se describe cómo solucionar problemas de inicio de sesión del SO mediante el servidor de metadatos. Para obtener información sobre cómo configurar OS Login o instrucciones detalladas, consulta Configurar OS Login.

Puedes consultar el servidor de metadatos desde una instancia de máquina virtual (VM). Para obtener más información, consulta Almacenar y obtener metadatos de instancias.

Antes de empezar

  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Mensajes de error habituales

A continuación se muestran ejemplos de errores habituales que pueden surgir al usar el inicio de sesión del SO.

No se encuentra el nombre del grupo

En algunas máquinas virtuales que usan Inicio de sesión del SO, es posible que recibas el siguiente mensaje de error después de establecer la conexión:

/usr/bin/id: cannot find name for group ID 123456789

Ignora este mensaje de error. Este error no afecta a tus VMs.

Failure getting groups

Es posible que veas registros similares a los siguientes al crear máquinas virtuales:

Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Refreshing group entry cache
Dec 10 22:31:05 instance-1 google_oslogin_nss_cache[381]: oslogin_cache_refresh[381]: Failure getting groups, quitting

Estos registros indican que tu organización no tiene configurados grupos de Linux de inicio de sesión con SO. Ignora estos mensajes.

No se cumple la condición previa

Es posible que veas un error similar al siguiente cuando te conectes a la VM mediante SSH:

ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: The specified username or UID is not unique within given system ID.

Este error se produce cuando Inicio de sesión del SO intenta generar un nombre de usuario que ya existe en una organización. Esto suele ocurrir cuando se elimina una cuenta de usuario y, poco después, se crea una nueva con la misma dirección de correo. Una vez que se elimina una cuenta de usuario, se tarda hasta 48 horas en eliminar la información POSIX del usuario.

Para solucionar este problema, haz una de las siguientes acciones:

Argumento no válido

Es posible que veas errores similares a los siguientes cuando te conectes a una VM mediante SSH o uses SCP para transferir archivos:

ERROR: (gcloud.compute.ssh) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.
ERROR: (gcloud.compute.scp) INVALID_ARGUMENT: Login profile size exceeds 32 KiB. Delete profile values to make additional space.

Para solucionar estos errores, siga estos pasos:

  1. Para ver tu perfil de OS Login, ejecuta el comando gcloud compute os-login describe-profile:

    gcloud compute os-login describe-profile
    

    El resultado es similar al siguiente:

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  2. Revisa el resultado para identificar las claves SSH que no se utilicen.

  3. Quita las claves que no utilices del resultado con el comando gcloud compute os-login ssh-keys remove:

    gcloud compute os-login ssh-keys remove --key=KEY
    

    Sustituye KEY por la huella digital de la clave o la cadena de la clave.

Para evitar que se produzca este problema en el futuro, añade un tiempo de vencimiento a las claves SSH. Las claves caducadas se eliminan automáticamente de tu perfil de inicio de sesión 48 horas después de su caducidad o cuando añades una nueva clave a tu perfil.

Código de respuesta HTTP: 429

Es posible que veas el siguiente error al intentar conectarte a una VM mediante SSH:

Failed to validate organization user USERNAME has login permission, got HTTP response code: 429

Este problema se debe al límite de frecuencia del servidor de metadatos, que es de 100 consultas por segundo por instancia de máquina virtual. Este límite no se puede ajustar. Para solucionar este problema, espera unos segundos y vuelve a intentar la conexión.

Para evitar que vuelva a ocurrir, prueba lo siguiente:

  • Implementa un mecanismo de reintento en el código de la aplicación. Para obtener más información, consulta:
  • Reutilizar las conexiones SSH existentes.
  • Envía comandos en lotes para reducir las conexiones SSH y las consultas de metadatos de inicio de sesión del SO.

Entradas de metadatos predeterminadas de OS Login

Compute Engine define un conjunto de entradas de metadatos predeterminadas que proporcionan información de inicio de sesión del SO. El servidor siempre define y establece los metadatos predeterminados. Las claves de metadatos predeterminadas distinguen entre mayúsculas y minúsculas.

En la siguiente tabla se describen las entradas que puedes consultar.

En relación con http://metadata.google.internal/computeMetadata/v1/
Entrada de metadatos Descripción
project/attributes/enable-oslogin Comprueba si el inicio de sesión del SO está habilitado en el Google Cloud proyecto actual.
instance/attributes/enable-oslogin Comprueba si OS Login está habilitado en la VM actual.
oslogin/users/ Obtiene información del perfil de los usuarios que inician sesión en el SO. Puede enviar parámetros de consulta como username, uid, pagesize y pagetoken.
oslogin/authorize/

Obtiene la configuración de permisos de nivel de inicio de sesión o de administrador de un usuario de inicio de sesión del SO.

Para comprobar un permiso, debe especificar el parámetro de consulta policy. El valor del parámetro de política debe ser login (para comprobar si se tiene permiso de inicio de sesión) o adminLogin (para comprobar si se tiene acceso sudo).

Comprobar si OS Login está configurado

Usa la Google Cloud consola o Google Cloud CLI para consultar los metadatos y determinar si OS Login está habilitado. OS Login se habilita cuando la clave de metadatos enable-oslogin se define como TRUE en los metadatos del proyecto o de la instancia. Si se definen los metadatos de la instancia y del proyecto, tiene prioridad el valor definido en los metadatos de la instancia.

Ver usuarios de OS Login

Para ver la información de perfil de varios usuarios, debe especificar los parámetros pagesize y pagetoken. Sustituye pagesize y pagetoken por el valor numérico que corresponda.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=PAGE_SIZE&
pagetoken=PAGE_TOKEN" -H "Metadata-Flavor: Google"

Por ejemplo, para definir pagesize como 1 y pagetoken como 0, ejecuta el siguiente comando:

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?pagesize=1&pagetoken=0" -H "Metadata-Flavor: Google"

En la mayoría de las distribuciones, también puedes ejecutar el comando de Unix getent passwd para obtener las entradas de contraseñas de los usuarios de la organización.

Ver un usuario específico de OS Login

Para ver la información del perfil de un usuario específico en tu VM, ejecuta el siguiente comando:

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=USERNAME" -H "Metadata-Flavor: Google"

Sustituye USERNAME por el nombre de usuario del usuario cuya información quieras consultar.

Por ejemplo, puedes hacer una solicitud para buscar al usuario user_example_com. El siguiente comando y su resultado muestran el formato añadido para mejorar la legibilidad.

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"

El resultado debería ser similar al siguiente:

{
    "loginProfiles": [{
        "name": "12345678912345",
        "posixAccounts": [{
            "primary": true,
            "username": "user_example_com",
            "uid": "123451",
            "gid": "123451",
            "homeDirectory": "/home/user_example_com",
            "operatingSystemType": "LINUX"
        }],
        "sshPublicKeys": {
            "204c4b4fb...": {
                "key": "ssh-rsa AAAAB3Nz...",
                "fingerprint": "204c4b4fb..."
            }
        }
    }]
}

En la mayoría de las distribuciones, también puedes ejecutar comandos de Unix, como getent passwd username o getent passwd uid, para obtener información del perfil.

Para obtener las claves SSH de un usuario, también puedes ejecutar /usr/bin/google_authorized_keys USERNAME. Si no se devuelve ninguna clave, es posible que el usuario no tenga los permisos necesarios para iniciar sesión en la VM.

Comprobando los permisos de inicio de sesión

Para ver los permisos de nivel de inicio de sesión y de administrador, debes proporcionar los parámetros de consulta policy=login&email=LOGIN_NAME.

  1. Consulta el perfil de usuario para obtener el valor del campo name:

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/users?username=user_example_com" -H "Metadata-Flavor: Google"
  2. En el resultado, anota el name.

  3. Ejecuta el siguiente comando login con el valor de name:

    curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=LOGIN_NAME" -H "Metadata-Flavor: Google"
    

Por ejemplo, puedes consultar los permisos de inicio de sesión del usuario user_example_com que se ha visto en la sección anterior:

curl "http://metadata.google.internal/computeMetadata/v1/oslogin/authorize?policy=login&email=12345678912345" -H "Metadata-Flavor: Google"

El resultado del comando indica que el usuario está autorizado para iniciar sesión en la VM:

{"success":true}

Comprobar si tu máquina virtual tiene una cuenta de servicio

Puedes consultar el servidor de metadatos para encontrar la cuenta de servicio asociada a tu VM. En tu máquina virtual, ejecuta el siguiente comando:

curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"

El resultado debería ser similar al siguiente:

12345-sa@developer.gserviceaccount.com/
default/

Si no se encuentra ninguna cuenta de servicio, el resultado estará en blanco.

Siguientes pasos