Restringir claves SSH de máquinas virtuales


En este documento se describe cómo impedir que los usuarios accedan a instancias de máquinas virtuales quitando y bloqueando claves SSH de las VMs.

Antes de empezar

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

    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. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    REST

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

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

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Eliminar claves SSH

Puedes quitar claves SSH de VMs que usen OS Login y de VMs que usen claves SSH basadas en metadatos.

Eliminar claves SSH de VMs que usan OS Login

Las VMs que usan OS Login aceptan claves SSH asociadas a tu cuenta de Google. Puedes eliminar una clave pública SSH de tu cuenta de usuario mediante la CLI de Google Cloud o la API OS Login. Si eres administrador de tu organización, puedes quitar claves SSH de las cuentas de usuario mediante la API Directory. Compute Engine elimina automáticamente las claves caducadas de tu cuenta de Google.

gcloud

Para quitar una clave pública SSH de tu cuenta, sigue estos pasos:

  1. Si no sabes qué clave quieres eliminar, ejecuta el comando gcloud compute os-login describe-profile para ver todas las claves asociadas a tu cuenta:

    gcloud compute os-login describe-profile
    
  2. Copia el valor fingerprint de la clave que quieras eliminar.

  3. Elimina la clave de tu cuenta con el comando gcloud compute os-login ssh-keys remove:

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

    Sustituye KEY por la clave pública SSH que quieras quitar o por la huella digital de OS Login de la clave que quieras quitar.

REST

Para quitar una clave pública SSH de tu cuenta, sigue estos pasos:

  1. Si no sabes qué llave quieres quitar, usa el método users.getLoginProfile para ver todas las llaves asociadas a tu cuenta:

    GET https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/loginProfile
    

    Sustituye ACCOUNT_EMAIL por la dirección de correo asociada a tu cuenta.

  2. Copia el valor fingerprint de la clave que quieras eliminar.

  3. Quita la llave de tu cuenta con el método users.sshPublicKeys.delete:

    DELETE https://oslogin.googleapis.com/v1/users/ACCOUNT_EMAIL/sshPublicKeys/FINGERPRINT
    

    Haz los cambios siguientes:

    • ACCOUNT_EMAIL: la dirección de correo asociada a tu cuenta
    • FINGERPRINT: huella digital SHA-256 de la clave que se va a quitar

Quitar claves SSH de VMs que usan claves basadas en metadatos

Puede quitar una clave pública SSH de los metadatos de un proyecto o de una instancia mediante laGoogle Cloud consola, la CLI de gcloud o la API de Compute Engine.

Cuando eliminas la última clave de los metadatos de un usuario concreto o cuando caduca la última clave de los metadatos de un usuario concreto, Compute Engine elimina el archivo ~/.ssh/authorized_keys del usuario en la VM.

Precaución: Si gestionas las claves SSH en los metadatos, es posible que los miembros de tu proyecto no puedan conectarse a las VMs. Además, corres el riesgo de conceder a los usuarios, incluidos los que no pertenecen a tu proyecto, acceso no intencionado a las VMs. Para obtener más información, consulta los riesgos de la gestión manual de claves.

Quitar una clave pública de los metadatos de un proyecto

Elimina una clave pública SSH de los metadatos del proyecto para quitar el acceso a todas las VMs de un proyecto.

Cuando quitas una clave de los metadatos mediante la CLI de gcloud y la API de Compute Engine, debes recuperar la lista de claves, editarla para quitar las claves que no quieras y sobrescribir las claves antiguas con la lista de claves que quieras conservar, tal como se explica en la siguiente sección.

Consola

Para quitar una clave pública SSH de los metadatos del proyecto mediante la consolaGoogle Cloud , siga estos pasos:

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

    Ir a Metadatos

  2. Haz clic en la pestaña Claves SSH.

  3. En la parte superior de la página, haz clic en Editar.

  4. Ve a la clave SSH que quieras quitar y haz clic en el botón de eliminar situado junto a ella.

    Repite este paso con cada clave SSH que quieras eliminar.

  5. Haz clic en Guardar.

gcloud

Para eliminar una clave pública SSH de los metadatos de un proyecto mediante la CLI de gcloud, sigue estos pasos:

  1. Ejecuta el comando gcloud compute project-info describe para obtener los metadatos del proyecto:

    gcloud compute project-info describe
    

    El resultado debería ser similar al siguiente:

    ...
    metadata:
      ...
      - key: ssh-keys
        value: |-
          cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF
          baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
    ...
    
  2. Copia el valor de los metadatos ssh-keys.

  3. Crea y abre un nuevo archivo de texto en tu estación de trabajo.

  4. En el archivo, pega la lista de claves SSH que acabas de copiar y, a continuación, elimina las claves que quieras quitar de los metadatos del proyecto.

  5. Guarda y cierra el archivo.

  6. Ejecuta el comando gcloud compute project-info add-metadata para definir el valor de ssh-keys en todo el proyecto:

    gcloud compute project-info add-metadata --metadata-from-file=ssh-keys=KEY_FILE
    

    Sustituye KEY_FILE por una de las siguientes opciones:

    • la ruta al archivo que has creado en el paso anterior, si el proyecto tenía claves SSH
    • La ruta al nuevo archivo de clave SSH pública, si el proyecto no tenía claves SSH

REST

Para eliminar una clave pública SSH de los metadatos de un proyecto mediante la API Compute Engine, sigue estos pasos:

  1. Usa el método projects.get para obtener los valores fingerprint y ssh-keys de los metadatos.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
    

    Sustituye PROJECT_ID por el ID del proyecto.

    La respuesta es similar a la siguiente:

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
     {
      "key": "ssh-keys",
      "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
     }
    ]
    ...
    
  2. Copia la lista de valores de claves SSH y elimina las claves que quieras quitar.

  3. Usa la opción projects.setCommonInstanceMetadata para quitar las claves SSH.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/setCommonInstanceMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS"
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Haz los cambios siguientes:

    • PROJECT_ID: tu ID de proyecto
    • EXISTING_SSH_KEYS: la lista de las claves SSH que quieras conservar.
    • FINGERPRINT: el valor de fingerprint de la respuesta de la solicitud projects.get

Eliminar una clave pública SSH de los metadatos de una instancia

Elimina una clave SSH pública de los metadatos de la instancia para quitar el acceso a una sola VM.

Cuando eliminas una clave de los metadatos mediante la CLI de gcloud y la API de Compute Engine, debes recuperar la lista de claves, editarla para quitar las claves que no quieras y sobrescribir las claves antiguas con la lista de claves que quieras conservar, tal como se explica en la siguiente sección.

Consola

Para eliminar una clave pública SSH de los metadatos de una instancia mediante la consolaGoogle Cloud , siga estos pasos:

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

    Ir a instancias de VM

  2. Haga clic en el nombre de la VM de la que quiera eliminar una clave.

  3. Haz clic en Editar.

  4. En la sección Claves SSH, haz clic en Mostrar y editar. La sección se amplía para mostrar todas las claves públicas SSH a nivel de instancia.

  5. Haz clic en el botón de eliminar situado junto a la clave SSH que quieras quitar.

    Repite este paso con cada clave SSH que quieras eliminar.

  6. Haz clic en Guardar.

gcloud

Para quitar una clave pública SSH de los metadatos de una instancia mediante la CLI de gcloud, haz lo siguiente:

  1. Ejecuta el comando gcloud compute instances describe para obtener los metadatos de la máquina virtual:

    gcloud compute instances describe VM_NAME
    

    Sustituye VM_NAME por el nombre de la VM a la que quieras añadir o quitar claves públicas SSH.

    El resultado debería ser similar al siguiente:

    ...
    metadata:
    ...
    - key: ssh-keys
     value: |-
       cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF
       baklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}
    ...
    
  2. Copia el valor de los metadatos ssh-keys.

  3. Crea y abre un nuevo archivo de texto en tu estación de trabajo local.

  4. En el archivo, pega la lista de claves SSH que acabas de copiar y, a continuación, elimina las claves que quieras.

  5. Guarda y cierra el archivo.

  6. Ejecuta el comando gcloud compute project-info add-metadata para definir el valor de ssh-keys en todo el proyecto:

    gcloud compute instances add-metadata VM_NAME --metadata-from-file ssh-keys=KEY_FILE
    

    Haz los cambios siguientes:

    • VM_NAME: la VM de la que quieres quitar la clave SSH
    • KEY_FILE: la ruta al archivo que contiene la lista de todas las claves SSH del proyecto

REST

Para eliminar una clave pública SSH de los metadatos de una instancia mediante la API Compute Engine, siga estos pasos:

  1. Usa el método instances.get para obtener los valores fingerprint y ssh-keys de los metadatos.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Haz los cambios siguientes:

    • PROJECT_ID: tu ID de proyecto
    • ZONE: la zona de la VM a la que vas a añadir una clave SSH
    • VM_NAME: la VM a la que vas a añadir una clave SSH

    La respuesta es similar a la siguiente:

    ...
    "fingerprint": "utgYE_XWtE8=",
    "items": [
    {
     "key": "ssh-keys",
     "value": "cloudysanfrancisco:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF\nbaklavainthebalkans:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQDx3FNVC8 google-ssh {"userName":"baklavainthebalkans","expireOn":"2021-06-14T16:59:03+0000"}"
    }
    ]
    ...
    
  2. Copia la lista de valores de claves SSH y elimina las claves que quieras quitar.

  3. Usa la opción instances.setMetadata para quitar las claves SSH.

    
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "ssh-keys",
      "value": "EXISTING_SSH_KEYS
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Haz los cambios siguientes:

    • PROJECT_ID: tu ID de proyecto
    • EXISTING_SSH_KEYS: el valor de la clave ssh-keys de la respuesta de la solicitud projects.get
    • FINGERPRINT: el valor de fingerprint de la respuesta de la solicitud instances.get

Bloquear las claves SSH del proyecto en las VMs que usan claves SSH basadas en metadatos

Puedes impedir que las VMs acepten claves SSH almacenadas en los metadatos del proyecto bloqueando las claves SSH del proyecto en las VMs. Puedes bloquear las claves SSH del proyecto en las VMs cuando crees una VM o después de crearla.

Bloquear las claves SSH del proyecto de una VM durante la creación de la VM

Puedes bloquear las claves SSH de proyectos en las VMs durante la creación de VMs mediante laGoogle Cloud consola, la CLI de gcloud o la API de Compute Engine.

Consola

Para crear una instancia e impedir que acepte claves SSH almacenadas en los metadatos del proyecto mediante la Google Cloud consola, haz lo siguiente:

  1. En la Google Cloud consola, ve a la página Crear una instancia.

    Ir a Crear una instancia

  2. Para bloquear las claves SSH del proyecto, haz lo siguiente:

    1. En el menú de navegación, haz clic en Seguridad.

    2. Despliega la sección Gestionar acceso.

    3. Para inhabilitar OS Login, desmarca la casilla Controlar el acceso a las VMs mediante permisos de gestión de identidades y accesos.

    4. Selecciona la casilla Bloquear claves SSH del proyecto.

  3. Opcional: Especifica otras opciones de configuración. Para obtener más información, consulta Opciones de configuración durante la creación de instancias.

  4. Para crear e iniciar la instancia, haz clic en Crear.

gcloud

Para crear una VM e impedir que acepte claves SSH almacenadas en los metadatos del proyecto mediante la CLI de gcloud, usa el gcloud compute instances createcomando:

gcloud compute instances create VM_NAME \
    --metadata block-project-ssh-keys=TRUE

Sustituye VM_NAME por el nombre de la nueva VM.

REST

Para crear una máquina virtual e impedir que acepte claves SSH almacenadas en los metadatos del proyecto mediante Compute Engine, crea una solicitud POST al método instances.insert:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto
  • ZONE: la zona de la VM

En el cuerpo de la solicitud, proporciona nombres de usuario y claves SSH públicas en la propiedad items:

...
{
 "items": [
    {
     "key": "block-project-ssh-keys",
     "value": TRUE
    }
   ]
}
...

Bloquear las claves SSH del proyecto de una VM después de crearla

Puedes bloquear las claves SSH de proyectos en las VMs después de crear las VMs mediante la consolaGoogle Cloud , la CLI de gcloud o la API de Compute Engine.

Consola

Para evitar que las máquinas virtuales acepten conexiones de claves SSH almacenadas en los metadatos del proyecto mediante la consola Google Cloud , haz lo siguiente:

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

    Ir a instancias de VM

  2. Haga clic en el nombre de la VM en la que quiera bloquear las claves SSH del proyecto.

  3. Haz clic en Editar.

  4. En Claves SSH, marca la casilla Bloquear claves SSH del proyecto.

  5. Cuando hayas terminado de editar la configuración de conexión de las claves SSH, haz clic en Guardar.

gcloud

Para evitar que las máquinas virtuales acepten conexiones de claves SSH almacenadas en los metadatos del proyecto mediante la CLI de gcloud, haz lo siguiente:

Ejecuta el comando gcloud compute instances add-metadata:

gcloud compute instances add-metadata VM_NAME --metadata block-project-ssh-keys=TRUE

Sustituye VM_NAME por el nombre de la VM en la que quieras bloquear las claves SSH públicas de todo el proyecto.

REST

Para evitar que las máquinas virtuales acepten conexiones de claves SSH almacenadas en los metadatos del proyecto mediante la API Compute Engine, haz lo siguiente:

  1. Usa el método instances.get para obtener el fingerprint de los metadatos.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    

    Haz los cambios siguientes:

    • PROJECT_ID: tu ID de proyecto
    • ZONE: la zona de la VM a la que vas a añadir una clave SSH
    • VM_NAME: la VM a la que vas a añadir una clave SSH

    La respuesta es similar a la siguiente:

    ...
    "fingerprint": "utgYE_XWtE8="
    ...
    
  2. Usa el método instances.setMetadata para asignar el valor TRUE a block-project-ssh-keys:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setMetadata
    
    {
    "items": [
     {
      "key": "block-project-ssh-keys",
      "value": TRUE
     }
    ]
    "fingerprint": "FINGERPRINT"
    }
    

    Haz los cambios siguientes:

    • PROJECT_ID es el ID de tu proyecto
    • ZONE es la zona en la que se encuentra tu instancia
    • INSTANCE_NAME es la instancia en la que quieres bloquear las claves de todo el proyecto.
    • FINGERPRINT: el valor de fingerprint de la respuesta de la solicitud instances.get.

Siguientes pasos