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 máquina virtual (VM). Para obtener más información, consulta la sección sobre cómo almacenar y recuperar metadatos de instancias.

Antes de empezar

  • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Si deseas obtener más información, consulta Autentica 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 que usan 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 VMs.

Error en la obtención de grupos

Es posible que veas registros similares a los siguientes cuando crees VMs:

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 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 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:

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 resolver estos errores, haz lo siguiente:

  1. Para ver tu perfil de Acceso al SO, 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 usaron.

  3. Quita las claves sin usar del resultado mediante 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 string de clave.

Para evitar que se produzca este problema en el futuro, agrega un plazo de vencimiento para las claves SSH. Las claves vencidas se quitan de forma automática de tu perfil de acceso 48 horas después del vencimiento o cuando agregas una clave nueva a tu perfil.

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 actual de Google Cloud.
instance/attributes/enable-oslogin Comprueba si el Acceso al SO está habilitado en la VM 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 de Google Cloud o la CLI de Google Cloud para consultar los metadatos a fin de 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, debes especificar los parámetros pagesize y pagetoken. Reemplaza pagesize y pagetoken por el valor numérico requerido.

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

Por ejemplo, para configurar pagesize en 1 y pagetoken en 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 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 VM, 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 VM.

Comprueba 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 VM:

{"success":true}

Comprueba si tu VM tiene una cuenta de servicio

Puedes consultar el servidor de metadatos para encontrar la cuenta de servicio asociada con tu VM. En tu VM, ejecuta el siguiente comando:

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

El resultado es similar al siguiente:

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

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

¿Qué sigue?