Acceso de TPM para AKS Edge Essentials

Un chip módulo de plataforma segura (TPM) es un procesador criptográfico seguro diseñado para llevar a cabo operaciones criptográficas. Esta tecnología está diseñada para proporcionar funciones relacionadas con la seguridad basadas en el hardware. Puede habilitar o deshabilitar la característica de acceso directo de TPM que permite que la máquina virtual de AKS Edge Essentials use el TPM del sistema operativo host de Windows. La característica de acceso directo de TPM proporciona acceso de solo lectura a las claves criptográficas almacenadas dentro del TPM.

En este artículo se describe cómo desarrollar código de ejemplo en C# para leer las claves criptográficas almacenadas dentro del TPM discreto del dispositivo.

Nota

El acceso a las claves de TPM está limitado a solo lectura. Si desea escribir claves en el TPM, debe hacerlo desde el sistema operativo host de Windows.

Requisitos previos

  • Un sistema operativo host de Windows con un TPM o vTPM (si usa una máquina virtual del sistema operativo host de Windows).
  • Habilite el acceso de TPM desde la máquina virtual CBL-Mariner con el acceso directo de TPM habilitado. En el archivo aksedge-config, en la machines sección , establezca el Machine.LinuxNode.TpmPassthrough valor Trueen . Solo puede habilitar o deshabilitar el acceso de TPM al crear una nueva implementación. Una vez establecida la marca, no se puede cambiar a menos que quite la implementación o el nodo.
  • Asegúrese de que el índice no volátil (NV) (índice predeterminado=3001) se inicializa con 8 bytes de datos. El valor predeterminado de AuthValue usado por el ejemplo es {1,2,3,4,5,6,7,8}, que corresponde al ejemplo de NV (Windows) en las bibliotecas de TSS.MSR al escribir en el TPM. Todas las inicializaciones de índice deben realizarse en el host de Windows antes de leer desde la máquina virtual CBL-Mariner. Para obtener más información sobre los ejemplos de TPM, consulte TSS.MSR.

Advertencia

La habilitación del acceso directo de TPM a la máquina virtual puede aumentar los riesgos de seguridad.

Creación de un archivo ejecutable de TPM de ejemplo

En los pasos siguientes se muestra cómo crear un archivo ejecutable de ejemplo para acceder a un índice discreto de TPM (dTPM) desde la máquina virtual CBL-Mariner.

  1. Apertura de Visual Studio 2019 o 2022 Seleccione Crear un nuevo proyecto. Seleccione Aplicación de consola en la lista de plantillas y, a continuación, seleccione Siguiente:

    Captura de pantalla que muestra la creación de una nueva solución de Visual Studio.

  2. Escriba los campos Nombre del proyecto, Ubicación y Nombre de la solución y, a continuación, seleccione Siguiente.

  3. Elija una plataforma de destino Se prefiere la versión más reciente de compatibilidad a largo plazo (LTS) de .NET 6.0. Después de elegir una plataforma de destino, seleccione Crear. Visual Studio crea una nueva solución de aplicación de consola.

  4. En el Explorador de soluciones, haga clic con el botón derecho en el nombre del proyecto y seleccione Administrar paquetes NuGet….

  5. Seleccione Examinar y busque Microsoft.TSS. Para obtener más información sobre este paquete, consulte Microsoft.TSS. Elija el paquete Microsoft.TSS de la lista y, a continuación, seleccione Instalar.

  6. Edite el archivo Program.cs y reemplace el contenido por el código de ejemplo tpm-read-nv: Program.cs.

  7. Seleccione Compilar solución de > compilación para compilar el proyecto. Compruebe que la compilación se ha realizado correctamente.

  8. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y seleccione Publicar.

  9. En el Asistente para publicación, elija Carpeta de carpetas>. Seleccione Examinar y, a continuación, elija una ubicación de salida para que se genere el archivo ejecutable. Seleccione Finalizar. Una vez creado el perfil de publicación, seleccione Cerrar.

  10. En la pestaña Publicar , seleccione Mostrar toda la configuración. Cambie la siguiente configuración y, a continuación, seleccione Guardar:

    • Tiempo de ejecución de destino: linux-x64.
    • Modo de implementación: Independiente.
  11. Seleccione Publicar y espere a que se cree el archivo ejecutable.

Si la publicación se realiza correctamente, debería ver los nuevos archivos creados en la carpeta de salida.

Copiar y ejecutar el archivo ejecutable

Una vez creado el archivo ejecutable y los archivos de dependencia, copie la carpeta en la máquina virtual CBL-Mariner. Los pasos siguientes muestran cómo copiar todos los archivos necesarios y cómo ejecutar el ejecutable dentro de la máquina virtual CBL-Mariner.

  1. Abra una sesión de PowerShell con privilegios elevados.

  2. Cambie el directorio a la carpeta primaria que contiene los archivos publicados.

    Por ejemplo, si los archivos publicados están en la carpeta TPM del directorio C:\Users<User>, puede usar el siguiente comando para cambiar a la carpeta primaria:

    PowerShell
    cd "C:\Users\<User>"
    
  3. Modifique el archivo TPMRead.runtimeconfig.json para evitar un problema de globalización de ICU dentro de la máquina virtual Linux:

    1. Abra TPMRead.runtimeconfig.json.

    2. Agregue la siguiente línea dentro de la configProperties sección:

      JSON
      "System.Globalization.Invariant": true
      
  4. Cree un archivo tar con todos los archivos creados en los pasos anteriores.

    Por ejemplo, si tiene todos los archivos en la carpeta TPM, puede usar el siguiente comando para crear el archivo TPM.tar :

    PowerShell
    tar -cvzf TPM.tar ".\TPM"
    
  5. Una vez creado correctamente el archivo TPM.tar , use el Copy-AksEdgeNodeFile cmdlet para copiar el archivo tar en la máquina virtual CBL-Mariner. Por ejemplo, si tiene el nombre de archivo tar TPM.tar en el directorio C:\Users<User>, puede usar el siguiente comando para copiar en la máquina virtual CBL-Mariner:

    PowerShell
    Copy-AksEdgeNodeFile -fromFile "C:\Users\<User>\TPM.tar" -toFile "/home/aksedge-user/" -pushFile
    
  6. Ejecute el siguiente comando para extraer todo el contenido del archivo tar :

    PowerShell
    Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "tar -xvzf /home/aksedge-user/TPM.tar"
    
  7. Después de la extracción, agregue el permiso ejecutable al archivo ejecutable principal. Por ejemplo, si el nombre del proyecto era TPMRead, el archivo ejecutable principal se denomina TPMRead. Ejecute el siguiente comando para que sea ejecutable:

    PowerShell
    Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "chmod +x /home/aksedge-user/TPM/TPMRead"
    
  8. El último paso es ejecutar el archivo ejecutable. Por ejemplo, si el nombre del proyecto es TPMRead, ejecute el siguiente comando:

    PowerShell
    Invoke-AksEdgeNodeCommand -NodeType "Linux" -command "/home/aksedge-user/TPM/TPMRead"
    

    Debería ver un resultado similar al siguiente:

    Captura de pantalla que muestra la salida de TPM.

Pasos siguientes