Configura el acceso a SO

El acceso a SO te permite usar funciones de IAM de Compute Engine para administrar el acceso SSH a instancias de Linux y es una alternativa para administrar, de forma manual, el acceso a la instancia mediante la administración de Llaves SSH en los metadatos.

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

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

  1. Habilita las características de acceso a 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 pasos siguientes:
  4. Conéctate a las instancias.
  5. Revisa los comportamientos de acceso esperados.

Antes de comenzar

Limitaciones

  • Por el momento, el acceso a 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 a SO está habilitado.

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

Habilita o inhabilita el acceso a SO

Antes de que puedas administrar el acceso a instancias con las funciones de IAM, debes habilitar la función de acceso a 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 a 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 los valores de metadatos enable-oslogin en los 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. Ve a la página de 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, realiza una parada y, luego, inicia la operación en tus instancias.

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

  1. Ve a la página de 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, realiza una parada y, luego, inicia la operación en tus instancias.

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

  1. En GCP Console, ve a la página VM Instances.

    Ir a la página Instancias de VM

  2. Haz clic en Crear instancia.
  3. En la página Crear una instancia nueva, llena las propiedades que quieras para tu instancia.
  4. En la sección Metadatos, 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 excluir la instancia de la función.
  5. Haz clic en Crear para crear la instancia.

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

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

También puedes establecer enable-oslogin en FALSE para inhabilitar el acceso a 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 a SO:

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 a 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 metadatos de instancia 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 a SO:

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 a 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 a SO.

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

Configura las funciones de acceso a SO en cuentas de usuario

Otorga funciones de IAM de OS Login

Después de habilitar el acceso a 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 al usuario. Los usuarios deben tener las siguientes funciones:

  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 ese usuario a nivel de la organización.

Los usuarios no pueden ver detalles de tus instancias ni las direcciones IP externas de esas instancias a menos que les proporciones esos detalles 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 a los usuarios ver todos los recursos de tu proyecto, incluidos los detalles de la instancia.

Concede acceso SSH a una cuenta de servicio

Puedes usar las funciones de acceso a 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 las funciones de acceso a SO necesarias a tu cuenta de servicio. Las cuentas de servicio requieren las mismas funciones que las cuentas de usuario. Si quieres aprender a configurar funciones y permisos para cuentas de servicio, consulta la página sobre 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 quieres ver una app de ejemplo para la cuenta de servicio SSH.

Revoca funciones de IAM de acceso a SO

Si quieres revocar el acceso del usuario a las instancias que estén habilitadas para usar el acceso a 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 sobre cómo otorgar, cambiar y revocar el acceso a los recursos.

Cuando se revoque el acceso de un usuario, el usuario seguirá teniendo Llaves SSH públicas asociadas con su cuenta, pero estas 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 automáticamente 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 a 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 administrador de G Suite no configura un nombre de usuario, el acceso a SO genera un nombre de usuario de Linux predeterminado. Para hacerlo, combina el nombre de usuario y el dominio del correo electrónico asociado con el perfil de Google del usuario. 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 tiene 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 con el comando gcloud compute ssh, aparece el siguiente mensaje:

    Using OS Login user [user_example_com] instead of default user [user]

    Con este mensaje, se confirma que estás accediendo con tu perfil de acceso a SO.

Agrega Llaves SSH a una cuenta de usuario

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

Puede usar la herramienta de línea de comandos de gcloud, o la API de acceso a 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 Directorio 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 Cloud SDK 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]

en la que:

  • [KEY_FILE_PATH] es la ruta a una Llave SSH pública en la estación de trabajo local. Asegúrate de que la Llave SSH pública tiene el formato correcto. Si usas PuTTYgen en sistemas Linux para generar tus claves públicas, debes usar el formato public-openssh.
  • [EXPIRE_TIME] es una marca opcional para establecer 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. Las unidades válidas para esta marca son s para los segundos, m para los minutos, h para las horas o d para los días. Puedes establecer el valor en 0 para indicar que no hay tiempo de vencimiento.

API de acceso a SO

Usa la API de acceso a 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]"
}

en la que:

  • [ACCOUNT_EMAIL] es la dirección de correo electrónico que representa tu cuenta de usuario administrada.
  • [SSH_KEY] es la clave pública que deseas aplicar a la cuenta. Asegúrate de que la Llave SSH pública tiene el formato correcto. Si usas PuTTYgen en sistemas Linux para generar tus claves públicas, debes usar el formato public-openssh.
  • [EXPIRATION_TIMESTAMP] es el tiempo de vencimiento de la clave en microsegundos desde el ciclo de entrenamiento.

API de Directorio

Si eres un administrador de dominio para una organización, puedes usar la referencia de la API de Directorio para 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]"
  }
 ]
}

en la que:

  • [USER_ID_KEY] es un ID inmutable para el usuario.
  • [SSH_KEY] es la clave pública que deseas aplicar a la cuenta. Asegúrate de que la Llave SSH pública tiene el formato correcto. Si usas PuTTYgen en sistemas Linux para generar tus claves públicas, debes usar el formato public-openssh.
  • [EXPIRATION_TIMESTAMP] es el tiempo de vencimiento de la clave en microsegundos desde el ciclo de entrenamiento.

Para quitar todas las claves de una cuenta, especifica "sshPublicKeys": null como el cuerpo:

PUT https://www.googleapis.com/admin/directory/v1/users/[USER_ID_KEY]

{
  "sshPublicKeys": null
}

en el que [USER_ID_KEY] es un ID inmutable para el usuario.

Después de agregar tus claves a tu cuenta, puedes conectarte a instancias con herramientas de terceros y el nombre de usuario asociado con 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]
⋮

en el que:

  • [ACCOUNT_EMAIL] es la dirección de correo electrónico que representa tu cuenta de usuario administrada.
  • [USER_NAME] es el nombre del usuario para establecer conexiones SSH. De forma predeterminada, esto se genera de tu [ACCOUNT_EMAIL].

Qué sigue

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Compute Engine