Configura el Acceso al SO

El Acceso al SO te permite usar funciones de IAM de Compute Engine para administrar el acceso SSH a instancias de Linux. Además, es una alternativa para administrar de forma manual el acceso a instancias mediante la administración y eliminación de llaves SSH en los metadatos.

En este tema, se cubren los pasos básicos para configurar el servicio Acceso al SO. Cuando configuras el Acceso al SO, puede agregar una capa de seguridad mediante la autenticación de dos factores. Para obtener más información, consulta la página Cómo configurar el Acceso al SO con autenticación de dos factores.

Para configurar el Acceso al SO y conectarte a tus instancias, usa el siguiente proceso:

  1. Habilita las características de Acceso al SO en tu proyecto o en instancias individuales.
  2. Otorga las funciones de IAM necesarias a los miembros de tu proyecto, a los miembros de tu organización o a ti mismo.
  3. De manera opcional, completa cualquiera de los siguientes pasos:
  4. Conéctate a las instancias.
  5. Revisa los comportamientos de acceso esperados.

Antes de comenzar

Limitaciones

  • Por el momento, el Acceso al SO no es compatible con Google Kubernetes Engine (GKE). Los nodos del clúster de GKE usan llaves SSH de metadatos incluso cuando el Acceso al SO está habilitado.

  • Las familias de imágenes de Windows Server y SQL Server aún no son compatibles con el Acceso al SO.

Habilita o inhabilita el Acceso al SO

Antes de que puedas administrar el acceso a instancias con las funciones de IAM, debes habilitar la función de Acceso al SO mediante la configuración de un par clave-valor de metadatos en tu proyecto o en los metadatos de tu instancia: enable-oslogin=TRUE. Para inhabilitar el Acceso al SO, establece el valor de los metadatos en FALSE. Por ejemplo, puedes habilitar la característica en todo el proyecto con enable-oslogin=TRUE a nivel de proyecto, pero establecer enable-oslogin=FALSE en instancias específicas que aún no pueden usarla.

Puedes aplicar el valor de metadatos enable-oslogin en tus proyectos o instancias mediante una de las siguientes opciones:

Console

Configura enable-oslogin en los metadatos de todo el proyecto para que se aplique a todas las instancias del proyecto:

  1. En Google Cloud Console, ve a la página Metadatos.

    Ir a la página de Metadatos

  2. Haz clic en Editar.
  3. Agrega una entrada de metadatos en la que la clave sea enable-oslogin y el valor sea TRUE. También puedes configurar el valor como FALSE para inhabilitar la función.
  4. Haz clic en Guardar para aplicar los cambios.

En las VM que no ejecutan CoreOS, este cambio se aplica de forma instantánea; no necesitas reiniciar tu instancia. En las distribuciones de CoreOS, reinicia la instancia para que el cambio se efectúe. Para reiniciar, primero detén y, luego, inicia la operación en tus instancias.

Configura enable-oslogin en los metadatos de una instancia existente:

  1. En Google Cloud Console, ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Haz clic en el nombre de la instancia en la que deseas establecer el valor de los metadatos.
  3. En la parte superior de la página de detalles de la instancia, haz clic en Editar para editar la configuración de la instancia.
  4. En Metadatos personalizados, agrega una entrada de metadatos en la que la clave sea enable-oslogin y el valor sea TRUE. También puedes configurar el valor en FALSE para excluir la instancia de la función.
  5. En la parte inferior de la página de detalles de la instancia, haz clic en Guardar para aplicar los cambios en la instancia.

En todos los sistemas operativos, excepto CoreOS, este cambio se aplica de forma instantánea; no necesitas reiniciar tu instancia. En las distribuciones de CoreOS, reinicia la instancia para que el cambio se efectúe. Para reiniciar, primero detén y, luego, inicia la operación en tus instancias.

Configura enable-oslogin en los metadatos cuando crees una instancia:

console true

gcloud

Configura enable-oslogin en los metadatos de todo el proyecto para que se aplique a todas las instancias del proyecto:

Usa el comando project-info add-metadata en la herramienta de línea de comandos de gcloud y configura oslogin=TRUE para habilitar el Acceso al SO:

    gcloud compute project-info add-metadata \
        --metadata enable-oslogin=TRUE
    

También puedes establecer enable-oslogin en FALSE para inhabilitar el Acceso al SO.

En las VM que no ejecutan CoreOS, este cambio se aplica de forma instantánea; no necesitas reiniciar tu instancia. En las distribuciones de CoreOS, reinicia la instancia para que el cambio se efectúe.

Configura enable-oslogin en los metadatos de una instancia existente:

Usa el comando instances add-metadata en la herramienta de línea de comandos de gcloud y configura oslogin=TRUE para habilitar el Acceso al SO. Reemplaza instance-name por el nombre de tu instancia.

    gcloud compute instances add-metadata instance-name \
        --metadata enable-oslogin=TRUE
    

También puedes establecer enable-oslogin en FALSE para excluir tu instancia del uso del Acceso al SO.

En todos los sistemas operativos, excepto CoreOS, este cambio se aplica de forma instantánea; no necesitas reiniciar tu instancia. En las distribuciones de CoreOS, reinicia la instancia para que el cambio se efectúe.

Configura enable-oslogin en los metadatos cuando crees una instancia:

Usa el comando instances create en la herramienta de línea de comandos de gcloud y configura oslogin=TRUE para habilitar el Acceso al SO. Reemplaza instance-name por el nombre de tu instancia.

    gcloud compute instances create instance-name \
        --metadata enable-oslogin=TRUE
    

También puedes establecer enable-oslogin en FALSE para excluir tu instancia del uso del Acceso al SO.

Tu instancia debe tener los valores de metadatos necesarios y la versión más reciente del entorno de invitado instalada. Si tienes instancias que ejecutan imágenes personalizadas que importaste, instala el entorno de invitado en esas instancias para habilitar el Acceso al SO.

Después de habilitar el Acceso al SO en las instancias de tu proyecto, otorga a los usuarios permiso para conectarse a esas instancias.

Configura las funciones de Acceso al SO en las cuentas de usuario

Otorga funciones de IAM de Acceso al SO

Después de habilitar el Acceso al SO en una o más instancias de tu proyecto, esas instancias aceptarán conexiones solo de cuentas de usuario que tengan las funciones de IAM necesarias en tu organización o proyecto:

Por ejemplo, puedes otorgar acceso a la instancia a los usuarios mediante el siguiente proceso:

  1. Otorga las funciones de acceso a instancias necesarias para el usuario.

  2. Si eres un administrador de la organización y deseas permitir que miembros fuera de la organización accedan a tus instancias, otorga roles/compute.osLoginExternalUser a esos usuarios a nivel de la organización.

Los usuarios no pueden ver detalles ni las direcciones IP externas de tus instancias, a menos que les proporciones esos datos de forma directa. Para ver los detalles de tus instancias, los usuarios necesitan funciones de IAM adicionales. Por ejemplo, la función roles/compute.viewer permite que los usuarios vean todos los recursos de tu proyecto, incluidos los detalles de las instancias.

Otorga acceso SSH a una cuenta de servicio

Puedes usar las funciones de Acceso al SO para permitir que las cuentas de servicio establezcan conexiones SSH con tus instancias. Esto es útil para las siguientes tareas:

Puedes otorgar acceso SSH a tus cuentas de servicio mediante el siguiente proceso:

  1. Crea una cuenta de servicio.
  2. Otorga a tu cuenta de servicio las funciones de Acceso al SO necesarias. Las cuentas de servicio requieren las mismas funciones que las cuentas de usuario. Si deseas aprender a configurar funciones y permisos para cuentas de servicio, consulta la página Cómo conceder funciones a cuentas de servicio.
  3. Otorga credenciales predeterminadas de la aplicación a tu cuenta de servicio para que pueda autorizar solicitudes a las API correspondientes. Otorga credenciales predeterminadas de la aplicación mediante una de las siguientes opciones:

Después de otorgar acceso SSH a tus cuentas de servicio, puedes configurar tus apps para crear llaves SSH y establecer conexiones SSH con otras instancias en tus redes de VPC. Lee el instructivo Conecta aplicaciones a instancias mediante SSH si deseas ver una app de ejemplo para la cuenta de servicio SSH.

Revoca funciones de IAM de Acceso al SO

Si deseas revocar el acceso del usuario a las instancias que estén habilitadas para usar el Acceso al SO, quita las funciones del usuario de esa cuenta de usuario. Para obtener información sobre cómo quitar una función de IAM a un usuario, consulta la página Cómo otorgar, cambiar y revocar el acceso a los recursos.

Cuando se revoca el acceso de un usuario, este seguirá teniendo llaves SSH públicas asociadas a su cuenta, pero esas claves ya no funcionarán en las instancias de VM.

Conéctate a instancias

Después de configurar las funciones necesarias, conéctate a una instancia con herramientas de Compute Engine. Compute Engine genera de manera automática llaves SSH y las asocia a tu cuenta de usuario.

Como alternativa, si creas tus propias llaves SSH y agregas las claves públicas a tu cuenta de usuario, puedes conectarte a instancias con herramientas de terceros. La instancia obtiene la clave pública de tu cuenta de usuario y permite que te conectes a la instancia si proporcionas el nombre de usuario correcto y la llave SSH privada correspondiente.

Después de conectarte a tu instancia, revisa los comportamientos de acceso esperados.

Comportamientos de acceso esperados

  • En algunas instancias 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.

  • Si un nombre de usuario no es configurado por un administrador de G Suite, Acceso al SO generará un nombre de usuario de Linux predeterminado. Para hacerlo, combinará el nombre de usuario y el dominio del correo electrónico asociado con su perfil de Google. Esta regla garantiza que los nombres no se repitan. Por ejemplo, si el correo electrónico de usuario asociado con el perfil de Google es user@example.com, entonces el nombre de usuario que se genera es user_example_com.

    Este nombre de usuario generado se basa en dominios asociados con una cuenta de G Suite. Si un usuario es de una organización independiente de G Suite, el nombre de usuario generado tendrá el prefijo ‘ext_’. Por ejemplo, si user@example.com accede a una VM en una organización diferente, entonces el nombre de usuario generado es ext_user_example_com.

  • Cuando accedes a una instancia mediante el comando gcloud compute ssh, el mensaje de acceso tendrá el siguiente formato para un usuario user que pertenece al dominio example.com:

    Using OS Login user user_example_com instead of default user user

    Este mensaje confirma que el usuario está accediendo con un perfil de Acceso al SO.

Agrega llaves SSH a una cuenta de usuario

Puedes asociar Llaves SSH públicas con los siguientes tipos de cuenta de usuario:

Puedes usar la herramienta de línea de comandos de gcloud, o la API de Acceso al SO, para agregar llaves SSH a tu propia cuenta. De forma alternativa, si eres un administrador de dominio para una organización, puedes usar la API de Directory para agregar llaves SSH a la cuenta de usuario en tu organización.

gcloud

Los comandos gcloud compute os-login solo están disponibles en el SDK de Cloud versión 184 y posteriores.

Usa la herramienta de línea de comandos de gcloud para asociar llaves SSH públicas con una cuenta.

    gcloud compute os-login ssh-keys add \
        --key-file key-file-path \
        --ttl expire-time
    

Reemplaza lo siguiente:

  • key-file-path: la ruta a la llave SSH pública en la estación de trabajo local. Asegúrate de que la llave SSH pública tenga el formato correcto. Si usas PuTTYgen en sistemas Linux para generar tus claves públicas, debes usar el formato public-openssh.
  • expire-time: una marca opcional con la que se establece un tiempo de vencimiento para la llave SSH pública. Por ejemplo, puedes especificar 30m y la llave SSH caducará después de 30 minutos. En esta marca, se usan las siguientes unidades:
    • s para los segundos
    • m para los minutos
    • h para las horas
    • d para los días. Establece el valor en 0 si no deseas indicar un tiempo de vencimiento.

API de Acceso al SO

Usa la API de Acceso al SO para asociar las Llaves SSH públicas con una cuenta:

    POST https://oslogin.googleapis.com/v1/users/account-email:importSshPublicKey

    {
     "key": "ssh-key",
     "expirationTimeUsec": "expiration-timestamp"
    }
    

Reemplaza lo siguiente:

  • account-email: la dirección de correo electrónico que representa tu cuenta de usuario administrada.
  • ssh-key: la clave pública que deseas aplicar a la cuenta. Asegúrate de que la llave SSH pública tenga el formato correcto. Si usas PuTTYgen en sistemas Linux para generar tus claves públicas, debes usar el formato public-openssh.
  • expiration-timestamp: el tiempo de vencimiento de la clave, en microsegundos y desde el ciclo de entrenamiento.

API de Directory

Si eres un administrador de dominio para una organización, puedes usar la referencia de la API de Directory a fin de agregar llaves SSH a la cuenta de otro usuario de tu organización. Por ejemplo, crea una solicitud PUT para el método directory.users.update con una o más entradas SSH sshPublicKeys:

    PUT https://www.googleapis.com/admin/directory/v1/users/user-id-key

    {
     "sshPublicKeys": [
      {
       "key": "ssh-key",
       "expirationTimeUsec": "expiration-timestamp"
      },
      {
       "key": "ssh-key",
       "expirationTimeUsec": "expiration-timestamp"
      }
     ]
    }
    

Reemplaza lo siguiente:

  • user-id-key: Un ID inmutable para el usuario.
  • ssh-key: una clave pública que deseas aplicar a la cuenta. Asegúrate de que la llave SSH pública tenga el formato correcto. Si usas PuTTYgen en sistemas Linux para generar tus claves públicas, debes usar el formato public-openssh.
  • expiration-timestamp: el tiempo de vencimiento de una clave, en microsegundos y desde el ciclo de entrenamiento.

A fin de quitar todas las claves de una cuenta, especifica "sshPublicKeys": null como cuerpo y reemplaza user-id-key por un ID inmutable para el usuario:

    PUT https://www.googleapis.com/admin/directory/v1/users/user-id-key

    {
      "sshPublicKeys": null
    }
    

Después de agregar tus claves a tu cuenta, puedes conectarte a instancias con herramientas de terceros y con el nombre de usuario asociado a tu cuenta. El administrador de tu organización puede cambiar este nombre de usuario. Para encontrar el nombre de usuario para tu cuenta, ejecuta el comando gcloud compute os-login describe-profile:

    gcloud compute os-login describe-profile
    
    name: account-email
    posixAccounts:
    ⋮
      username: user-name

Reemplaza lo siguiente:

  • account-email: la dirección de correo electrónico que representa tu cuenta de usuario administrada.
  • user-name: el nombre de usuario para establecer conexiones SSH. De forma predeterminada, esto se genera de tu account-email.

Próximos pasos