Crear imágenes protegidas personalizadas

En este tema, se describe cómo preparar el disco, generar certificados de seguridad y habilitar cualquier función necesaria del sistema operativo (SO) para crear una imagen protegida personalizada.

De forma predeterminada, la VM protegida admite Container-Optimized OS, varias distribuciones de Linux y varias versiones de Windows Server. Sin embargo, si necesitas imágenes personalizadas para tu aplicación, aún puedes aprovechar la VM protegida.

Prepara el disco

La VM protegida se basa en el firmware compatible con la interfaz de firmware extensible unificada (UEFI) que admite funciones como el inicio seguro. La VM protegida requiere un esquema de tabla de particionada GUID (GPT). El registro de inicio principal (MBR) no es compatible.

El disco debe tener al menos dos particiones:

  • Partición del sistema EFI (ESP): 100 megabytes (MB) son suficientes para esta partición, es solo una sugerencia. Puedes crear una partición más grande si es necesario. El único requisito para el ESP es que debe formatearse con un sistema de archivos de tabla de asignación (FAT).
  • Partición del SO: El resto del disco. Esta partición contiene el SO de inicio (Linux o Windows). No hay restricciones para el tamaño de esta partición.

Puedes crear más particiones de datos según sea necesario.

Copia el SO en la partición del SO

Una vez que el disco esté formateado y particionado de forma correcta, copia los archivos del SO en la partición del SO. El SO tiene un cargador de inicio que debe estar ubicado en una ruta válida en el ESP, como se indica en la Especificación de UEFI: \EFI\Boot\bootx64.efi. Ten en cuenta que puede ser necesario copiar el cargador de inicio del SO en la ubicación determinada.

Para Windows, hay un comando llamado bcdboot que se puede usar a fin de copiar el cargador de inicio del SO en la ubicación correcta, además de otras acciones que requiere Windows (como copiar el almacén de BCD). Para obtener más información, consulta Opciones de línea de comandos de BCDBoot en el Centro de desarrollo de hardware de Microsoft.

Cuando usas imágenes de VM protegidas, también puedes aprovechar dos funciones de seguridad adicionales: el Módulo de plataforma segura virtual (vTPM) y la supervisión de integridad. En las siguientes secciones, se describen los beneficios de estas funciones y los requisitos del SO.

Módulo de plataforma segura virtual (vTPM)

Un módulo de plataforma segura es un dispositivo especializado a fin de proteger objetos, como claves y certificados, que usas para autenticar el acceso a tu sistema. En las imágenes de VM protegidas, se usan versiones virtualizadas de dispositivos TPM para habilitar el inicio medido. En resumen, el inicio medido garantiza la integridad de la ruta de carga crítica de los controladores de inicio y del kernel. vTPM y el inicio medido se explican con más detalle en la documentación de la VM protegida.

Para aprovechar el vTPM y el inicio medido, se requiere un controlador. Las versiones mínimas del SO compatibles con TPM 2.0 son las que se detallan a continuación:

  • Windows Server 2012
  • Versión de Linux 3.20
  • Red Hat Enterprise Linux 7.3

Supervisión de integridad

La supervisión de integridad proporciona una manera de comprender y tomar decisiones sobre el estado de tus instancias de VM. Monitoring usa los datos que genera el inicio medido para generar informes sobre la instancia de VM. La documentación de VM protegida tiene más información sobre la supervisión de integridad y la automatización de respuestas a fallas de validación de integridad.

Para admitir la función de supervisión de integridad de VM protegida, la imagen debe generar señales de integridad:

  • Windows genera señales de integridad de forma predeterminada.
  • Linux debe tener el módulo de arquitectura de medición de integridad (IMA) instalado y habilitado. El módulo debe tener CONFIG_IMA_MEASURE_PCR_IDX configurado en 10. Este es el valor predeterminado para el módulo IMA.

Importa la imagen de disco a Compute Engine

Una vez que la imagen está preparada, debes subirla a Compute Engine. Si deseas conocer los pasos necesarios para subir la imagen a Google Cloud, consulta Importa imágenes del disco de arranque a Compute Engine.

Configura certificados para el inicio seguro

Cuando se agrega una imagen de VM protegida, se pasa un conjunto de certificados y bases de datos públicas de inicio seguro a Compute Engine. Estos archivos se almacenan en las variables UEFI correspondientes y se usan para establecer relaciones de confianza entre la plataforma, el firmware y el SO. Los certificados son certificados X.509 codificados en reglas de codificación distinguidas (DER). Las bases de datos pueden ser un certificado o un objeto binario sin procesar. Hay cuatro valores en total:

  • Clave de la plataforma (pk): Una clave que se usa para establecer la relación de confianza entre el propietario de la plataforma y el firmware. Solo puedes especificar una clave de plataforma y debe ser un certificado X.509 válido.
  • Clave de intercambio de claves (kek): Una clave que se usa para establecer una relación de confianza entre el firmware y el SO. Puedes especificar varias claves para este valor.
  • Base de datos de claves prohibidas (dbx): Una base de datos de certificados que se revocó y hará que el sistema deje de iniciarse si un archivo de inicio está firmado con uno de ellos. Puedes especificar uno o varios valores para este valor.
  • Base de datos de claves (db): Una base de datos de certificados de confianza que se puede usar para firmar archivos de inicio. Puedes especificar uno o varios valores para este valor.

La especificación de UEFI contiene más información sobre estos valores y cómo funcionan.

En el siguiente ejemplo, se usa OpenSSL para crear las claves y los certificados de arranque seguro.

  • Genera un par de claves RSA de 2,048 bits.

      $ openssl genrsa -out secure-boot-key.rsa 2048
    
  • Genera un certificado X.509 autofirmado a partir de la clave en formato DER.

      $ openssl req -new -x509 -sha256 -subj '/CN=secure-boot' -key secure-boot-key.rsa
      -outform DER -out secure-boot-cert.pem
    

Agrega la imagen protegida a Google Cloud

Mediante la imagen y los certificados que se subieron, ahora puedes agregar la imagen a Compute Engine. La imagen se puede agregar mediante Google Cloud CLI o la API de Compute Engine.

gcloud

Agrega la imagen personalizada a Compute Engine:

gcloud compute images create [IMAGE_NAME] \
--source-disk [SOURCE_DISK] \
--source-disk-zone [ZONE] \
--platform-key-file=<file.der> \
--key-exchange-key-file=<file.der> \
--signature-database-file=<file.bin>,<file.der> \
--forbidden-database-file=<file.bin> \
--guest-os-features="UEFI_COMPATIBLE[,WINDOWS]"

En el ejemplo anterior, se ilustra lo siguiente:

  • [IMAGE_NAME] es el nombre de la imagen nueva.
  • [SOURCE_DISK] es el disco desde el que deseas crear la imagen nueva.
  • [ZONE] es la zona donde se encuentra el disco.

La opción WINDOWS para guest-os-features solo es obligatoria cuando se usa una imagen de Windows. Para obtener más información sobre cómo crear una imagen, consulta la referencia de gcloud create.

API

Sigue las instrucciones para crear una imagen desde un disco persistente, pero especifica el initial_state_config en el cuerpo de la solicitud.

...
"sourceDisk": "/zones/[ZONE]/disks/[SOURCE_DISK]",

"initial_state_config": {
    "pk": {
        "content": [KEY],
        "fileType": [BIN,X509]
    },
    "keks": [
        {
            "content": [KEY],
            "fileType": [BIN,X509]
        },
        ...
    ],
    "dbxs": [
        {
            "content": [KEY],
            "fileType": [BIN,X509]
        },
        ...
    ],
    "dbs": [
        {
            "content": [KEY],
            "fileType": [BIN,X509]
        },
        ...
    ]
}

Certificados predeterminados

Ten en cuenta que pkkeksdbxsdbs son campos opcionales. Si proporcionas una configuración de estado inicial, es posible que algunos o todos estos campos no estén configurados. Cuando se crea una instancia nueva a partir de la imagen, Google Cloud proporciona un valor predeterminado para PKKEKdbdbx, a menos que se haya establecido un valor personalizado en cualquier campo sin configurar. Si no proporcionas una configuración de estado inicial (es decir, falta la configuración, no solo está vacía), la imagen tendrá la configuración de estado inicial de la imagen de origen.

Los valores predeterminados de estos campos son:

  • PK: El certificado asociado con la clave privada predeterminada que creó Google.
  • KEK: El certificado predeterminado de Microsoft KEK. Descargar de Microsoft: MicCorKEKCA2011_2011-06-24.crt
  • dbx: La lista de revocación predeterminada de Microsoft DBX. Descargar desde el foro de interfaz de firmware extensible unificada: Archivo de lista de revocación de UEFI
  • db: Los siguientes dos certificados:
    • Microsoft Windows Production PCA 2011 con un hash de certificación SHA-1 de 58 0a 6f 4c c4 e4 b6 69 b9 eb dc 1b 2b 3e 08 7b 80 d0 67 8d Descargar de Microsoft: MicWinProPCA2011_2011-10-19.crt
    • Microsoft Corporation UEFI CA 2011 con un hash de certificado SHA-1 de 46 de f6 3b 5c e6 1c f8 ba 0d e2 e6 63 9c 10 19 d0 ed 14 f3. Descargar de Microsoft: MicCorUEFCA2011_2011-06-27.crt

Ten cuidado, ya que agregar tus propios certificados reemplazará los predeterminados en lugar de combinarlos con los que proporcionas.