Configura el Acceso al SO con autenticación de dos factores

En este tema, se cubren los pasos básicos para configurar el Acceso al SO con autenticación de dos factores.

Si usas Acceso al SO para administrar el acceso a tus instancias, puedes agregar un nivel adicional de seguridad mediante la autenticación de dos factores, también conocida como 2FA. Para obtener más información sobre los otros beneficios de usar el Acceso al SO, consulta Acceso al SO.

Para usar el Acceso al SO con autenticación 2FA en tus instancias, completa los siguientes pasos:

  1. Instala o actualiza el entorno invitado.
  2. Si eres administrador de una organización, consulta Administra el Acceso al SO en una organización (opcional).
  3. Habilita 2FA en tu dominio o Cuenta de Google.
  4. Habilita 2FA en tu proyecto o instancia.
  5. Otorga las funciones de IAM necesarias a los miembros de tu proyecto, a los miembros de tu organización o a ti mismo.
  6. Agrega llaves SSH personalizadas a las cuentas de usuario para los miembros del proyecto, los miembros de la organización o para ti mismo (opcional). Por otro lado, Compute Engine puede generar estas claves de forma automática cuando te conectas a instancias.
  7. Conéctate a las instancias.
  8. Revisa los comportamientos de acceso esperados.

Para restringir aún más el acceso a las VM, también puedes configurar pares de claves SSH respaldados por hardware. Para obtener más información, consulta SSH con llaves de seguridad.

Después de configurar el Acceso al SO con 2FA, puedes usar los registros de auditoría para supervisar las sesiones de autenticación.

Antes de comenzar

Limitaciones

  • OS Login no es compatible con Google Kubernetes Engine (GKE). Los nodos del clúster de GKE siguen usando claves SSH de metadatos cuando Acceso al SO está habilitado.

  • En la actualidad, las imágenes de Fedora CoreOS no son compatibles con el Acceso al SO. Para administrar el acceso de las instancias a las VM creadas mediante estas imágenes, usa el sistema de encendido Fedora CoreOS.

  • Las imágenes de Windows Server y SQL Server no son compatibles con Acceso al SO.

Métodos compatibles o tipos de verificación

Acceso al SO admite los siguientes métodos de 2FA o tipos de verificación:

Paso 1: Instala o actualiza el entorno invitado

Tu instancia debe tener instalada la versión más reciente del entorno invitado. La mayoría de las imágenes públicas ya tienen instalada la versión más reciente.

Si tienes instancias que ejecutan imágenes personalizadas que importaste, instala el entorno invitado en esas VM.

Si no tienes el más reciente, actualiza tu entorno invitado.

Paso 2: Revisa cómo administrar el Acceso al SO en una organización (opcional)

Si eres administrador de la organización, puedes configurar algunas opciones, como habilitar el Acceso al SO a nivel de la organización. Consulta Administra el Acceso al SO en una organización.

Paso 3: Habilita 2FA en tu dominio o Cuenta de Google

Antes de poder habilitar la autenticación de dos factores para tu proyecto o instancia, primero debes habilitar 2FA en tu dominio o Cuenta de Google. Asegúrate de habilitar 2FA en el dominio que contiene el proyecto o las instancias, o de hacerlo para el usuario que posee el proyecto o las instancias.

Como práctica recomendada de seguridad, se requiere la autenticación de dos factores en las cuentas de usuario de la organización. Habilitar la autenticación de dos factores del Acceso al SO no bloquea el acceso a los usuarios que no tienen configurada la autenticación de dos factores.

Un administrador de G Suite puede habilitar la autenticación de dos factores para un dominio, o un usuario individual de Google puede habilitar la autenticación de dos factores en el nivel de la cuenta de usuario.

Dominio

Un administrador de G Suite debe habilitar la autenticación de dos factores para un dominio.

Si quieres habilitar 2FA para un dominio, consulta la página sobre cómo proteger tu empresa con la verificación en dos pasos en la guía de administrador de G Suite.

Cuenta de usuario

Si un administrador de G Suite no administra tus Cuentas de usuario, puedes configurar 2FA para Cuentas de Google individuales.

Si quieres configurar 2FA para una Cuenta de Google individual, consulta Verificación en dos pasos de Google.

Paso 4: Habilita 2FA en tu proyecto o instancia

Después de habilitar la autenticación de dos factores en el nivel de dominio o Cuenta de usuario, puedes habilitar instancias individuales o un proyecto para que usen 2FA de Acceso al SO.

Una instancia o proyecto debe tener Acceso al SO habilitado para usar 2FA de Acceso al SO.

Puedes configurar Acceso al SO y 2FA de Acceso al SO durante la creación de la instancia o la configuración del proyecto. También puedes configurar 2FA de Acceso al SO en una instancia o un proyecto existentes que ya tengan Acceso al SO habilitado.

Si quieres configurar tu proyecto o instancia para que use la autenticación de dos factores del Acceso al SO, configura enable-oslogin-2fa=TRUE y enable-oslogin=TRUE en los metadatos del proyecto o la instancia.

Console

Puedes aplicar los valores de metadatos en tus proyectos o VM mediante una de las siguientes opciones:

  • Opción 1: Configura enable-oslogin-2fa=TRUE y enable-oslogin=TRUE en los metadatos de la instancia cuando crees una instancia.

    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 Crear instancia.
    3. En la página Crear una instancia nueva, completa las propiedades que quieras para tu instancia.
    4. En la sección Metadatos, agrega las siguientes entradas de metadatos:

      • enable-oslogin y el valor es TRUE.
      • enable-oslogin-2fa y el valor es TRUE.
    5. Haz clic en Crear para crear la instancia.

  • Opción 2: Configura enable-oslogin-2fa y enable-oslogin=TRUE en los metadatos de todo el proyecto para que la configuración se aplique a todas las instancias del proyecto.

    1. Ve a la página Metadatos.

      Ir a la página de Metadatos

    2. Haz clic en Editar.
    3. En la sección Metadatos, agrega las siguientes entradas de metadatos:

      • enable-oslogin y el valor es TRUE.
      • enable-oslogin-2fa y el valor es TRUE.
    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.

  • Opción 3: Configura enable-oslogin-2fa y enable-oslogin=TRUE en los metadatos de una instancia existente.

    1. 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 configurar 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 las siguientes entradas de metadatos:

      • enable-oslogin y el valor es TRUE.
      • enable-oslogin-2fa y el valor es TRUE.
    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 manera 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.

gcloud

Puedes aplicar los valores de metadatos en tus proyectos o VM mediante una de las siguientes opciones:

  • Opción 1: Configura enable-oslogin-2fa=TRUE y enable-oslogin=TRUE en los metadatos de la instancia cuando crees una instancia.

    Reemplaza instance-name por el nombre de tu instancia.

    gcloud compute instances create instance-name \
        --metadata enable-oslogin=True,enable-oslogin-2fa=True
    
  • Opción 2: Configura enable-oslogin-2fa=TRUE y enable-oslogin=TRUE en los metadatos de todo el proyecto para que se apliquen a todas las instancias del proyecto.

    gcloud compute project-info add-metadata \
        --metadata enable-oslogin=True,enable-oslogin-2fa=True
    
  • Opción 3: Configura enable-oslogin-2fa=TRUE y enable-oslogin=TRUE en los metadatos de una instancia existente.

    Reemplaza instance-name por el nombre de tu instancia.

    gcloud compute instances add-metadata \
        --metadata enable-oslogin=True,enable-oslogin-2fa=True instance-name
    

Paso 5: Configura las funciones del 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 del proyecto, esas VM solo aceptan conexiones de cuentas de usuario que tienen las funciones de IAM necesarias en la organización o el proyecto.

Para permitir el Acceso al SO a estas VM, debes otorgar las funciones necesarias al usuario. Si quieres hacerlo, sigue estos pasos:

  1. Otorga una de las siguientes funciones de acceso a la instancia.

    Puedes otorgar estas funciones de acceso a instancias a nivel de la instancia mediante el comando gcloud compute instances add-iam-policy-binding.

  2. Si en tu instancia de VM se usa una cuenta de servicio, cada usuario se debe configurar para que tenga la función roles/iam.serviceAccountUser en la cuenta de servicio. Para obtener información sobre cómo agregar el acceso de un usuario a una cuenta de servicio, consulta Administra el robo de identidad de cuentas de servicio.

  3. Además de otorgar una función de acceso a instancias, debes otorgar la función roles/compute.osLoginExternalUser si quieres que los usuarios que están fuera de tu organización puedan acceder a las VM. Un administrador de la organización debe otorgar esta función a nivel de la organización. Para obtener más información, consulta Otorga acceso a instancias a usuarios fuera de tu organización.

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 Otorga 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 al SO

Si quieres 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 sobre 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.

Paso 6: Agrega llaves SSH a una cuenta de usuario (opcional)

Si deseas conectarte a las VM mediante herramientas de terceros, debes agregar las llaves SSH a tu cuenta de usuario. Si te conectas a tus instancias mediante otras opciones, como la herramienta de línea de comandos de gcloud o SSH desde el navegador, puedes omitir este paso, ya que Compute Engine genera estas claves de forma automática.

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

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 quieres indicar que no hay 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 Directorio

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

Para quitar todas las claves de una cuenta, especifica "sshPublicKeys": null como el 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 las claves a tu cuenta, puedes conectarte a instancias mediante herramientas de terceros y 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 actual de la cuenta, ejecuta el comando gcloud compute os-login describe-profile:

Por ejemplo, el resultado podría parecerse al siguiente:

name: '314159265358979323846'
posixAccounts:
- gid: '27182818'
  homeDirectory: /home/user_example_com
  ⋮
  uid: '27182818'
  username: user_example_com
⋮

Paso 7: Conéctate a instancias

Cuando te conectas a una VM, tienes 3 opciones principales:

Si te conectas a una VM mediante la herramienta de línea de comandos de gcloud o una conexión SSH desde el navegador, Compute Engine genera claves SSH y las asocia a tu cuenta de usuario de forma automática.

Si te conectas a una instancia mediante una herramienta de terceros, debes agregar las claves públicas a tu cuenta de usuario. La VM obtiene la clave pública de tu cuenta de usuario y te permite conectarte a la instancia si proporcionas el nombre de usuario correcto y la llave SSH coincidente.

Cuando te conectes a tu instancia, recibirás un mensaje basado en el método de 2FA o tipo de verificación seleccionado.

  • Para el Autenticador de Google, verás el siguiente mensaje:

    "Enter your one-time password:"

  • Para la verificación de mensajes de texto o llamadas telefónicas, verás el siguiente mensaje:

    "A security code has been sent to your phone. Enter code to continue:"

  • Para el mensaje telefónico, verás el siguiente mensaje:

    A login prompt has been sent to your enrolled device:"

    Para el método de mensaje telefónico, acepta los mensajes en tu teléfono o tablet a fin de continuar. Para otros métodos, ingresa tu código de seguridad o contraseña de un solo uso.

Paso 8: 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 administrador de G Suite no configura un nombre de usuario, el Acceso al 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.

    De manera opcional, las organizaciones de G Suite pueden cambiar su configuración predeterminada a fin de quitar el sufijo de dominio de los nombres de usuario recién generados. 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. Para obtener más información, consulta Administra la API del Acceso al SO.

    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 mediante el comando gcloud compute ssh, el mensaje de acceso tiene 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.

Visualiza los registros de auditoría de 2FA de Acceso al SO

Compute Engine proporciona registros de auditoría para hacer un seguimiento de las solicitudes de autenticación de dos factores. La autenticación de dos factores tiene dos tipos de solicitudes:

  • StartSession. Inicia una sesión de autenticación nueva. En una llamada StartSession, un cliente declara sus capacidades al servidor y obtiene información sobre la primera verificación. Una llamada StartSession muestra lo siguiente:

    • ID de sesión. Este ID de sesión se pasa a todas las llamadas posteriores ContinueSession.
    • Información sobre la verificación o el método de 2FA que se usó en esta sesión de autenticación nueva.
  • ContinueSession. Continúa una sesión de autenticación existente. Si se usa el ID de sesión proporcionado, la API de ContinueSession puede realizar una de las dos acciones siguientes:

    • Aceptar la respuesta a una verificación o método y, luego, autenticar, rechazar o requerir verificaciones adicionales del usuario
    • Cambiar a un tipo de verificación diferente al propuesto en un comienzo por el servidor en la ronda anterior de llamadas a la API Si un cliente elige completar un tipo de verificación diferente (por ejemplo, el Autenticador de Google en lugar de un mensaje telefónico), el cliente puede solicitar este tipo de verificación en una llamada al servidor con un request.challengeId del tipo deseado.

Para ver los registros, debes tener permisos del Visor de registros o ser un visor o editor de proyecto.

  1. Ve a la página Registros en Cloud Console.

    Ir a la página Registros

  2. Expande el menú desplegable y selecciona Audited Resource.
  3. En la barra de búsqueda, escribe oslogin.googleapis.com y presiona Intro.
  4. Aparecerá una lista de registros de auditoría en la que se describen las solicitudes de autenticación de dos factores. Expande cualquiera de las entradas para obtener más información:

    Registros de auditoría para la autenticación de dos factores.

En cualquiera de los registros de auditoría, puedes hacer lo siguiente:

  1. Expandir la propiedad protoPayload

    Métricas del registro de auditoría para la autenticación de dos factores.

  2. Puedes buscar methodName para ver la actividad a la que se aplica este registro (ya sea una solicitud StartSession o ContinueSession). Por ejemplo, si este registro realiza el seguimiento a una solicitud StartSession, el nombre del método sería "google.cloud.oslogin.OsLoginService.v1.StartSession". Del mismo modo, un registro ContinueSession sería "google.cloud.oslogin.OsLoginService.v1.ContinueSession". Se registra una entrada de registro de auditoría para cada solicitud de inicio y continuación de sesión.

Existen diferentes propiedades de registro de auditoría para distintos tipos de registro. Por ejemplo, los registros de auditoría relacionados con StartSession tienen propiedades que son específicas del inicio de sesión, mientras que los registros de auditoría para ContinueSession tienen su propio conjunto de propiedades. Existen ciertas propiedades de registro de auditoría que también se comparten entre ambos tipos de registro.

Todos los registros de auditoría de autenticación de dos factores

Propiedad Valor
serviceName oslogin.googleapis.com
resourceName Una string que contiene el número de proyecto. Este número de proyecto indica a qué solicitud de acceso pertenece el registro de auditoría. Por ejemplo, projects/myproject12345.
severity El nivel de gravedad del mensaje de registro. Por ejemplo, INFO o WARNING.
request.email La dirección de correo electrónico del usuario que autentica la llamada a la API.
request.numericProjectId El número de proyecto del proyecto de Google Cloud.
response.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.StartOrContinueSessionResponse
response.sessionId Una string de ID que identifica la sesión de forma exclusiva. Este ID de sesión se pasa a la siguiente llamada a la API en la secuencia.
response.authenticationStatus El estado de la sesión. Por ejemplo, Authenticated, Challenge required o Challenge pending.
response.challenges El conjunto de verificaciones que puedes intentar para pasar en esta ronda de autenticación. Como máximo, se inicia una de estas verificaciones con un estado de READY. Las otras se dan como opciones que el usuario puede especificar como alternativa a la verificación principal propuesta.

Registros de auditoría de StartSession

Propiedad Valor
methodName google.cloud.oslogin.OsLoginService.v1.StartSession
request.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.StartSessionRequest
request.supportedChallengeTypes La lista de tipos de desafío o métodos de 2FA entre los que puedes elegir.

Registros de auditoría de ContinueSession

Propiedad Valor
methodName google.cloud.oslogin.OsLoginService.v1.ContinueSession
request.sessionId Una string de ID que identifica de forma exclusiva la sesión anterior. Este ID de sesión se pasa desde la llamada a la API anterior en la secuencia.
request.@type type.googleapis.com/google.cloud.oslogin.OsLoginService.v1.ContinueSessionRequest
request.challengeId Una string de ID que identifica qué verificación iniciar o ejecutar. Este ID debe pertenecer a un tipo de verificación que muestra la llamada response.challenges en una respuesta de la API anterior.
request.action La acción por realizar.

Próximos pasos