Restringir las claves SSH de las máquinas virtuales


Este documento describe cómo evitar que los usuarios accedan a instancias de máquinas virtuales (VM) eliminando y bloqueando las claves SSH de las VM.

Antes de comenzar

  • Si aún no lo has hecho, configura la autenticación. La autenticación es el proceso mediante el cual se verifica su identidad para acceder a Google Cloud servicios y API. Para ejecutar código o muestras 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. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    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.

        After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      Para obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud .

Eliminar claves SSH

Puede eliminar claves SSH de máquinas virtuales que usan inicio de sesión en el sistema operativo y de máquinas virtuales que usan claves SSH basadas en metadatos .

Elimine las claves SSH de las máquinas virtuales que utilizan el inicio de sesión del sistema operativo

Las máquinas virtuales que utilizan el inicio de sesión en el sistema operativo aceptan claves SSH asociadas con su cuenta de Google. Puede eliminar una clave SSH pública de su cuenta de usuario mediante la CLI de Google Cloud o la API de inicio de sesión del sistema operativo. Si es administrador de su organización, puede eliminar claves SSH de las cuentas de usuario mediante Directory API . Compute Engine elimina automáticamente las claves caducadas de su cuenta de Google.

nube de gcloud

Para eliminar una clave SSH pública de su cuenta, haga lo siguiente:

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

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

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

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

    Reemplace KEY con la clave SSH pública que desea eliminar, o la huella digital de inicio de sesión del sistema operativo para la clave que desea eliminar.

DESCANSAR

Para eliminar una clave SSH pública de su cuenta, haga lo siguiente:

  1. Si no sabe qué clave desea eliminar, utilice el método users.getLoginProfile para ver todas las claves asociadas con su cuenta:

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

    Reemplace ACCOUNT_EMAIL con la dirección de correo electrónico asociada a su cuenta.

  2. Copie el valor de fingerprint de la clave que desea eliminar.

  3. Elimine la clave de su cuenta utilizando el método users.sshPublicKeys.delete :

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

    Reemplace lo siguiente:

    • ACCOUNT_EMAIL : la dirección de correo electrónico asociada a tu cuenta
    • FINGERPRINT : la huella digital SHA-256 de la clave a eliminar

Elimine las claves SSH de las máquinas virtuales que utilizan claves basadas en metadatos

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

Después de eliminar la última clave de los metadatos de un usuario en particular, o de que expire la última clave de los metadatos de un usuario en particular, Compute Engine elimina el archivo ~/.ssh/authorized_keys del usuario en la VM.

Precaución: Si administra claves SSH en metadatos, podría interrumpir la capacidad de los miembros de su proyecto para conectarse a las máquinas virtuales. Además, corre el riesgo de otorgar a los usuarios, incluidos los usuarios fuera de su proyecto, acceso no deseado a las máquinas virtuales. Para obtener más información, consulte riesgos de la gestión manual de claves .

Eliminar una clave pública de los metadatos del proyecto

Elimine una clave SSH pública de los metadatos del proyecto para eliminar el acceso a todas las máquinas virtuales de un proyecto.

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

Consola

Para eliminar una clave SSH pública de los metadatos del proyecto usando la consola de Google Cloud, haga lo siguiente:

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

    Ir a Metadatos

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

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

  4. Navegue hasta la clave SSH que desea eliminar y haga clic en el botón junto a la clave SSH.

    Repita este paso para cada clave SSH que desee eliminar.

  5. Haga clic en Guardar .

nube de gcloud

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

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

    gcloud compute project-info describe
    

    El resultado es 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. Copie el valor de metadatos ssh-keys .

  3. Cree y abra un nuevo archivo de texto en su estación de trabajo.

  4. En el archivo, pegue la lista de claves SSH que acaba de copiar y luego elimine las claves que desee eliminar de los metadatos del proyecto.

  5. Guarde y cierre el archivo.

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

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

    Reemplace KEY_FILE con uno de los siguientes:

    • la ruta al archivo que creó en el paso anterior, si el proyecto tenía claves SSH existentes
    • la ruta a su nuevo archivo de clave SSH pública, si el proyecto no tenía claves SSH existentes

DESCANSAR

Para eliminar una clave SSH pública de los metadatos del proyecto usando la API de Compute Engine, haga lo siguiente:

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

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

    Reemplace PROJECT_ID con su ID de 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. Copie la lista de valores de claves SSH y elimine las claves que desea eliminar.

  3. Utilice projects.setCommonInstanceMetadata para eliminar las claves SSH.

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

    Reemplace lo siguiente:

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

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

Elimine una clave SSH pública de los metadatos de la instancia para eliminar el acceso a una única máquina virtual.

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

Consola

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

  1. En la consola de Google Cloud, vaya a la página de instancias de VM .

    Ir a instancias de VM

  2. Haga clic en el nombre de la máquina virtual para la que desea eliminar una clave.

  3. Haga clic en Editar .

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

  5. Haga clic en el botón junto a la clave SSH que desea eliminar.

    Repita este paso para cada clave SSH que desee eliminar.

  6. Haga clic en Guardar .

nube de gcloud

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

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

    gcloud compute instances describe VM_NAME
    

    Reemplace VM_NAME con el nombre de la VM para la que necesita agregar o eliminar claves SSH públicas.

    El resultado es 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. Copie el valor de metadatos ssh-keys .

  3. Cree y abra un nuevo archivo de texto en su estación de trabajo local.

  4. En el archivo, pegue la lista de claves SSH que acaba de copiar y luego elimine las claves que desee eliminar.

  5. Guarde y cierre el archivo.

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

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

    Reemplace lo siguiente:

    • VM_NAME : la máquina virtual para la que desea eliminar la clave SSH
    • KEY_FILE : la ruta al archivo que contiene la lista de todas las claves SSH del proyecto

DESCANSAR

Para eliminar una clave SSH pública de los metadatos de la instancia mediante la API de Compute Engine, haga lo siguiente:

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

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

    Reemplace lo siguiente:

    • PROJECT_ID : ID de tu proyecto
    • ZONE : la zona de la VM para la que estás agregando una clave SSH
    • VM_NAME : la máquina virtual para la que estás agregando 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. Copie la lista de valores de claves SSH y elimine las claves que desea eliminar.

  3. Utilice instances.setMetadata para eliminar 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"
    }
    

    Reemplace lo siguiente:

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

Bloquear claves SSH de proyecto de máquinas virtuales que utilizan claves SSH basadas en metadatos

Puede evitar que las máquinas virtuales acepten claves SSH almacenadas en los metadatos del proyecto bloqueando las claves SSH del proyecto de las máquinas virtuales. Puede bloquear las claves SSH del proyecto de las máquinas virtuales cuando crea una máquina virtual o después de crear una máquina virtual .

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

Puedes bloquear las 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.

Consola

Para crear una instancia y evitar que acepte claves SSH almacenadas en los metadatos del proyecto mediante la consola de Google Cloud, haga lo siguiente:

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

    Ir a Crear una instancia

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

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

    2. Expanda la sección Administrar acceso .

    3. Para deshabilitar el inicio de sesión en el sistema operativo, desmarque la casilla de verificación Controlar el acceso a la máquina virtual a través de permisos de IAM .

    4. Seleccione la casilla de verificación Bloquear claves SSH para todo el proyecto .

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

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

nube de gcloud

Para crear una VM y evitar que acepte claves SSH almacenadas en los metadatos del proyecto usando la CLI de gcloud, usa el comando gcloud compute instances create :

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

Reemplace VM_NAME con el nombre de la nueva VM.

DESCANSAR

Para crear una VM y evitar que acepte claves SSH almacenadas en los metadatos del proyecto usando Compute Engine, cree una solicitud POST para el método instances.insert :

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

Reemplace lo siguiente:

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

En el cuerpo de la solicitud, proporcione 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 desde una VM después de la creación de la VM

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

Consola

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

  1. En la consola de Google Cloud, vaya a la página de instancias de VM .

    Ir a instancias de VM

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

  3. Haga clic en Editar .

  4. En Claves SSH , seleccione la casilla de verificación Bloquear claves SSH para todo el proyecto .

  5. Cuando haya terminado de editar la configuración de conexión para claves SSH, haga clic en Guardar .

nube de gcloud

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

Reemplace VM_NAME con el nombre de la VM para la cual desea bloquear las claves SSH públicas de todo el proyecto.

DESCANSAR

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

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

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

    Reemplace lo siguiente:

    • PROJECT_ID : ID de tu proyecto
    • ZONE : la zona de la VM para la que estás agregando una clave SSH
    • VM_NAME : la máquina virtual para la que estás agregando una clave SSH.

    La respuesta es similar a la siguiente:

    ...
    "fingerprint": "utgYE_XWtE8="
    ...
    
  2. Utilice el método instances.setMetadata para establecer block-project-ssh-keys en 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"
    }
    

    Reemplace lo siguiente:

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

¿Qué sigue?