Restringe las claves SSH de las VM


En este documento, se describe cómo evitar que los usuarios accedan a instancias de máquina virtual (VM) mediante la eliminación y el bloqueo de claves SSH de las VMs.

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.

Quita claves SSH

Puedes quitar las claves SSH de las VMs que usan el Acceso al SO y las VMs que usan claves SSH basadas en metadatos.

Quita las claves SSH de las VM que usan Acceso al SO

Las VM que usan el Acceso al SO aceptan claves SSH asociadas con tu Cuenta de Google. Puedes quitar una clave SSH pública de la cuenta de usuario mediante Google Cloud CLI o la API de Acceso al SO. Si eres administrador de tu organización, puedes quitar claves SSH de las cuentas de usuario mediante la API de Directorio. Compute Engine quita de forma automática las claves vencidas de tu Cuenta de Google.

gcloud

Para quitar una clave SSH pública de tu cuenta, haz lo siguiente:

  1. Si no sabes qué clave deseas quitar, 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 deseas borrar.

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

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

    Reemplaza KEY por la clave SSH pública que quieres quitar o la huella digital de Acceso al SO para la clave que deseas quitar.

REST

Para quitar una clave SSH pública de tu cuenta, haz lo siguiente:

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

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

    Reemplaza ACCOUNT_EMAIL por la dirección de correo electrónico asociada a tu cuenta.

  2. Copia el valor fingerprint de la clave que deseas borrar.

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

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

    Reemplaza lo siguiente:

    • ACCOUNT_EMAIL: Es la dirección de correo electrónico asociada a tu cuenta.
    • FINGERPRINT: Es la huella digital SHA-256 de la clave que se quitará.

Quita las claves SSH de las VM que usan claves basadas en metadatos

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

Después de quitar la última clave de los metadatos de un usuario en particular o del vencimiento de la última clave en los metadatos de un usuario en particular, Compute Engine borra el archivo ~/.ssh/authorized_keys del usuario en la VM.

Precaución: Si administras claves SSH en metadatos, puedes interrumpir la capacidad de los miembros de tu proyecto para conectarse a las VMs. Además, corres el riesgo de otorgar a los usuarios, incluidos los que están fuera de tu proyecto, acceso no deseado a las VM. Para obtener más información, consulta los riesgos de la administración de claves manual.

Quita una clave pública de los metadatos del proyecto

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

Cuando quitas una clave de los metadatos con la CLI de gcloud y la API de Compute Engine, debes recuperar la lista de claves existentes, editar la lista de claves para quitar las claves no deseadas y reemplazar las claves anteriores por la lista de claves que deseas conservar, como se explica en la siguiente sección.

Console

Para quitar una clave SSH pública de los metadatos del proyecto con la consola de Google Cloud, sigue estos pasos:

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

    Ir a metadatos

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

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

  4. Navega hasta la clave SSH que quieres quitar y haz clic en el botón Borrar junto a la clave SSH.

    Clave pública de PuTTYgen

    Repite este paso para cada Llave SSH que desees quitar.

  5. Haz clic en Guardar.

gcloud

Para quitar una clave SSH pública de los metadatos del proyecto con la CLI de gcloud, haz lo siguiente:

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

    gcloud compute project-info describe
    

    El resultado es similar a este:

    ...
    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 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, luego, borra las claves que deseas quitar de los metadatos del proyecto.

  5. Guarde y cierre el archivo.

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

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

    Reemplaza KEY_FILE por uno de los siguientes valores:

    • la ruta de acceso al archivo que creaste en el paso anterior, si el proyecto tenía claves SSH existentes
    • la ruta de acceso a tu nuevo archivo de claves SSH públicas, si el proyecto no tenía claves SSH existentes

REST

Para quitar una clave SSH pública de los metadatos del proyecto con la API de Compute Engine, haz lo siguiente:

  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
    

    Reemplaza PROJECT_ID con el ID del proyecto.

    La respuesta es similar al ejemplo a continuación:

    ...
    "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 borra las claves que deseas quitar.

  3. Usa 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"
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID de tu proyecto
    • EXISTING_SSH_KEYS: La lista de claves SSH que quieres conservar
    • FINGERPRINT: Es el valor de fingerprint de la respuesta de la solicitud projects.get.

Quita una clave SSH pública de los metadatos de la instancia

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

Cuando quitas una clave de los metadatos con la CLI de gcloud y la API de Compute Engine, debes recuperar la lista de claves existentes, editar la lista de claves para quitar las claves no deseadas y reemplazar las claves anteriores por la lista de claves que deseas conservar, como se explica en la siguiente sección.

Console

Para quitar una clave SSH pública de los metadatos de instancia mediante la consola de Google Cloud, haz lo siguiente:

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

    Ir a metadatos

  2. Haz clic en el nombre de la VM para la que deseas quitar una clave.

  3. Haz clic en Editar.

  4. En el panel central, en Llaves SSH, haz clic en Mostrar y editar. La sección se expande para mostrar todas las Llaves SSH públicas de nivel de instancia.

  5. Haz clic en el botón de eliminación junto a la clave que deseas quitar:

    Clave pública de PuTTYgen

  6. Haz clic en Guardar.

gcloud

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

  1. Ejecuta el comando gcloud compute instances describe a fin de obtener los metadatos para la VM:

    gcloud compute instances describe VM_NAME
    

    Reemplaza VM_NAME por el nombre de la VM para la que necesitas agregar o quitar las claves SSH públicas.

    El resultado es similar a este:

    ...
    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 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, luego, quita las claves que deseas borrar.

  5. Guarde y cierre el archivo.

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

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

    Reemplaza lo siguiente:

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

REST

Para quitar una clave SSH pública de los metadatos de la instancia con la API de Compute Engine, haz lo siguiente:

  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
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID de tu proyecto
    • ZONE: Es la zona de la VM a la que agregas una clave SSH
    • VM_NAME: Es la VM para la que agregarás una clave SSH.

    La respuesta es similar al ejemplo a continuación:

    ...
    "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 borra las claves que deseas quitar.

  3. Usa 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"
    }
    

    Reemplaza lo siguiente:

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

Bloquea claves SSH del proyecto de las VM que usan claves SSH basadas en metadatos

Para evitar que las VM acepten claves SSH almacenadas en metadatos del proyecto, bloquea las claves SSH del proyecto desde las VM. Puedes bloquear las claves SSH del proyecto de las VM cuando creas una VM o después de crear una VM.

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

Puedes bloquear claves SSH del proyecto de las VM durante la creación de la VM mediante la consola de Google Cloud, la CLI de gcloud o la API de Compute Engine.

Console

Para crear una VM y bloquearla para que no acepte claves SSH almacenadas en metadatos del proyecto mediante la consola de Google Cloud, haz lo siguiente:

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

    Ir a Crear una instancia

  2. Especifica los detalles de la VM.

  3. Expande la sección Opciones avanzadas y sigue estos pasos:

    1. Expande la sección Seguridad.

    2. Marca Bloquear claves SSH de todo el proyecto.

  4. Para crear y, también, iniciar la VM, haz clic en Crear.

gcloud

Para crear una VM y bloquearla para que no acepte claves SSH almacenadas en metadatos del proyecto mediante la CLI de gcloud, usa el comando gcloud compute instances create:

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

Reemplaza VM_NAME por el nombre de la VM nueva.

REST

Para crear una VM y bloquearla para que no acepte claves SSH almacenadas en metadatos del proyecto mediante Compute Engine, crea una solicitud POST para el método instances.insert:

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

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto
  • ZONE: La zona de la VM

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

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

Bloquea claves SSH del proyecto de una VM después de crear la VM

Puedes bloquear las claves SSH del proyecto de las VM después de crear las VM con la consola de Google Cloud, la CLI de gcloud o la API de Compute Engine.

Console

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

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

    Ir a metadatos

  2. Haz clic en el nombre de la VM para la que deseas bloquear las claves SSH del proyecto.

  3. Haz clic en Editar.

  4. En Claves SSH, selecciona la casilla de verificación Bloquear claves SSH a nivel del proyecto.

  5. Cuando termines de editar la configuración de conexión para las Llaves SSH, haz clic en Guardar.

gcloud

Para evitar que las VM acepten conexiones de claves SSH almacenadas en 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

Reemplaza VM_NAME por el nombre de la VM para la que quieres bloquear las claves SSH públicas de todo el proyecto.

REST

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

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

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

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID de tu proyecto
    • ZONE: Es la zona de la VM a la que agregas una clave SSH
    • VM_NAME: Es la VM para la que agregarás una clave SSH.

    La respuesta es similar al ejemplo a continuación:

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

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

    Reemplaza lo siguiente:

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

Próximos pasos