Soluciona problemas de acceso al SO

En este documento, se describe cómo solucionar problemas de Acceso al SO mediante el servidor de metadatos. Para obtener información sobre la configuración de Acceso al SO o si quieres obtener instrucciones paso a paso, consulta Configura Acceso al SO.

Puedes consultar el servidor de metadatos desde una instancia de Compute Engine. Para obtener más información, consulta la sección sobre cómo almacenar y recuperar metadatos de instancias.

Antes de empezar

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

    Selecciona la pestaña que corresponda a la forma en que planeas usar las muestras de esta página:

    Console

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud , no necesitas configurar la autenticación.

    gcloud

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

      gcloud init

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  • Configura una región y una zona predeterminadas.
  • REST

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

      Instala Google Cloud CLI.

      Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

    Para obtener más información, consulta Autentícate para usar REST en la documentación de autenticación de Google Cloud .

Mensajes de error comunes:

Los siguientes son ejemplos de errores comunes que pueden surgir cuando usas Acceso al SO.

No se puede encontrar el nombre del grupo

En algunas instancias de procesamiento que usan el Acceso al 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 tus instancias de procesamiento.

Error en la obtención de grupos

Es posible que veas registros similares a los siguientes cuando crees instancias de procesamiento:

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 Acceso al SO. Ignora estos mensajes.

Precondición con errores

Es posible que veas un error similar al siguiente cuando te conectes a la instancia de procesamiento con SSH:

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

Este error se produce cuando el Acceso al SO intenta generar un nombre de usuario que ya existe dentro de una organización. Esto es común cuando se borra una cuenta de usuario y se crea un usuario nuevo con la misma dirección de correo electrónico poco después. Cuando se borra una cuenta de usuario, pueden pasar hasta 48 horas para que se quite la información POSIX del usuario.

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

Se superó el límite de tamaño del perfil de Acceso al SO

Es posible que veas uno de los siguientes errores cuando te conectes a una instancia de procesamiento de Linux con SSH o uses SCP para transferir archivos:

ERROR: (gcloud.compute.ssh) FAILED_PRECONDITION: 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 resolver estos errores, haz lo siguiente:

  1. Verifica el tamaño de tu perfil de Acceso al SO. Para verificar el tamaño de tu perfil, expórtalo a un archivo JSON temporal y comprueba el tamaño del archivo ejecutando el siguiente comando:

    gcloud compute os-login describe-profile --format="json" | wc
    

    Si el tamaño se acerca a 32 KiB o lo supera, debes quitar las llaves SSH que no se usen.

  2. Revisa tu perfil de Acceso al SO para identificar las claves SSH que no se usen:

    gcloud compute os-login describe-profile
    

    El resultado es similar a lo siguiente:

    name: '00000000000000'
    posixAccounts:
    ...
    sshPublicKeys:
     ...:
       fingerprint: ...
       key: |
         ssh-rsa AAAAB3NzaC1yc2...
       name: ...
     ...
    
  3. Quita las claves sin usar con el comando gcloud compute os-login ssh-keys remove:

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

    Reemplaza KEY por la huella digital de la clave o la cadena completa de la clave pública SSH.

Para evitar que este problema ocurra en el futuro, agrega una hora de vencimiento para las claves SSH. Las claves vencidas se quitan automáticamente de tu perfil de acceso 48 horas después de su vencimiento o cuando agregas una clave nueva a tu perfil.

Código de respuesta HTTP: 429

Es posible que veas el siguiente error cuando intentes conectarte a una instancia de procesamiento con 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 de 100 consultas por segundo por instancia de procesamiento. Este límite no se puede ajustar. Para resolver este problema, espera unos segundos y, luego, vuelve a intentar la conexión.

Para evitar este problema en el futuro, 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 por lotes para reducir las conexiones SSH y las consultas de metadatos de Acceso al SO.

Entradas de metadatos predeterminados de Acceso al SO

Compute Engine define un conjunto de entradas de metadatos predeterminados que proporcionan información sobre el Acceso al 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.

Relativo a http://metadata.google.internal/computeMetadata/v1/
Entrada de metadatos Descripción
project/attributes/enable-oslogin Comprueba si el Acceso al SO está habilitado en el proyecto Google Cloud actual.
instance/attributes/enable-oslogin Comprueba si el Acceso al SO está habilitado en la instancia de procesamiento actual.
oslogin/users/ Recupera información de perfil para los usuarios del Acceso al SO. Puedes pasar parámetros de consulta como username, uid, pagesize y pagetoken.
oslogin/authorize/

Recupera la configuración de permisos de nivel administrativo o de acceso para un usuario del Acceso al SO.

Para verificar un permiso, debes especificar el parámetro de consulta policy. El valor del parámetro de política debe establecerse en login (para verificar el permiso de acceso) o adminLogin (para verificar el acceso sudo).

Comprueba si el Acceso al SO está configurado

Usa la consola Google Cloud o Google Cloud CLI para consultar los metadatos y determinar si el Acceso al SO está habilitado. El Acceso al SO se habilita cuando la clave de metadatos enable-oslogin se configura como TRUE en los metadatos del proyecto o la instancia. Si se configuran los metadatos de la instancia y del proyecto, el valor establecido en los metadatos de la instancia tiene prioridad.

Visualiza los usuarios del Acceso al SO

Para ver la información del perfil de varios usuarios, puedes especificar el parámetro pagesize. Reemplaza pagesize por el valor numérico requerido.

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

El resultado puede contener un token de página, que se puede usar en llamadas posteriores para enumerar más usuarios.

Por ejemplo, para configurar pagesize en 1, ejecuta el siguiente comando:

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

Para obtener el siguiente usuario, establece pagesize en 1 y pagetoken en el token de página del resultado del comando anterior.

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

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

Visualiza un usuario específico del Acceso al SO

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

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

Reemplaza USERNAME por el nombre de usuario del usuario que deseas consultar.

Por ejemplo, puedes realizar una solicitud para buscar el usuario user_example_com. El siguiente comando y el resultado muestran el formato agregado para mejorar la legibilidad.

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

El resultado es 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 recuperar la información de perfil.

Para recuperar las claves SSH de un usuario, también puedes ejecutar /usr/bin/google_authorized_keys USERNAME. Si no se muestran claves, es posible que el usuario no tenga los permisos necesarios para acceder a la instancia de procesamiento.

Verifica los permisos de acceso

Para ver los permisos de nivel administrativo y de acceso, debes proporcionar los parámetros de consulta policy=login&email=LOGIN_NAME.

  1. Consulta el perfil del 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, toma nota del name.

  3. Ejecuta el siguiente comando de 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 acceso para el usuario user_example_com que se vio 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 acceder a la instancia de procesamiento:

{"success":true}

Cómo verificar si tu instancia de procesamiento tiene una cuenta de servicio

Puedes consultar el servidor de metadatos para encontrar la cuenta de servicio asociada con tu instancia de procesamiento. Accede a tu instancia de procesamiento y ejecuta el siguiente comando:

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

El resultado es similar a lo siguiente:

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

Si no se encuentra una cuenta de servicio, el resultado está en blanco.

¿Qué sigue?