Creación artefactos de paquete de configuración de máquina personalizado

Antes de comenzar, es aconsejable leer la página de información general de la configuración de máquina.

La configuración de máquinas usa Desired State Configuration (DSC) al auditar y configurar tanto Windows como Linux. La configuración de DSC define la condición en la que debe estar la máquina.

Importante

Los paquetes personalizados que auditan el estado de un entorno y aplican configuraciones tienen un estado de compatibilidad de disponibilidad general (GA). Sin embargo, se aplican las siguientes limitaciones:

Para usar paquetes de configuración de máquina que aplican configuraciones, se requiere la versión de la extensión de configuración de invitado de máquina virtual de Azure 1.26.24 o posterior, o el agente de Arc 1.10.0 o posterior.

El módulo GuestConfiguration solo está disponible en Ubuntu 18 y versiones superiores. Sin embargo, el paquete y las políticas producidas por el módulo se pueden usar en cualquier distribución y versión de Linux compatible con Azure o Arc.

La prueba de paquetes en macOS no está disponibles.

No use secretos ni información confidencial en paquetes de contenido personalizado.

Use los siguientes pasos para crear su propia configuración con el fin de administrar el estado de una máquina, sea de Azure o no.

Instalación de PowerShell 7 y los módulos de PowerShell necesarios

En primer lugar, siga los pasos indicados en Cómo configurar un entorno de creación de configuraciones de máquinas. Estos pasos le ayudarán a instalar la versión necesaria de PowerShell para su sistema operativo, el módulo GuestConfiguration y el módulo PSDesiredStateConfiguration.

Creación de una configuración

Antes de crear un paquete de configuración, cree y compile una configuración DSC. Hay ejemplos de configuraciones disponibles para Windows y Linux.

Importante

Al compilar configuraciones para Windows, use PSDesiredStateConfiguration versión 2.0.7 (la versión estable). Al compilar configuraciones para Linux, instale la versión preliminar 3.0.0.

Esta configuración de ejemplo es para equipos Windows. Configura el equipo para crear la variable de entorno MC_ENV_EXAMPLE en los ámbitos Process y Machine. El valor de la variable se establece como 'This was set by machine configuration'.

Configuration MyConfig {
    Import-DscResource -Name 'Environment' -ModuleName 'PSDscResources'
    Environment MachineConfigurationExample {
        Name   = 'MC_ENV_EXAMPLE'
        Value  = 'This was set by machine configuration'
        Ensure = 'Present'
        Target = @('Process', 'Machine')
    }
}

MyConfig

Con esa definición guardada en el archivo de script MyConfig.ps1, puede ejecutar el script para compilar la configuración.

. .\MyConfig.ps1
    Directory: C:\dsc\MyConfig

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           5/16/2023 10:39 AM           1080 localhost.mof

La configuración se compila en el archivo localhost.mof de la carpeta MyConfig del directorio de trabajo actual. Cambie el nombre de localhost.mof por el que desea usar como nombre del paquete, como MyConfig.mof.

Rename-Item -Path .\MyConfig\localhost.mof -NewName MyConfig.mof -PassThru
    Directory: C:\dsc\MyConfig

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           5/16/2023 10:40 AM           1080 MyConfig.mof

Nota

Este ejemplo muestra cómo crear y compilar una configuración para un equipo Windows. Para Linux, es necesario crear un módulo de recursos DSC personalizado mediante clases PowerShell. El artículo Escribir un recurso DSC personalizado con clases PowerShell incluye un ejemplo completo de un recurso personalizado y una configuración probada con la configuración de la máquina.

El resto de este artículo se aplica a las configuraciones definidas para equipos Linux y Windows, excepto en las que menciona consideraciones específicas de la plataforma.

Creación de un artefacto de paquete de configuración

Una vez compilado el MOF, los archivos auxiliares deben empaquetarse juntos. La configuración de máquina usa el paquete completado para crear las definiciones de Azure Policy.

El cmdlet New-GuestConfigurationPackage crea el paquete. Los módulos requeridos por la configuración deben estar disponibles en $Env:PSModulePath para el entorno de desarrollo para que los comandos del módulo puedan agregarlos al paquete.

Parámetros del cmdlet New-GuestConfigurationPackage al crear el contenido de Windows:

  • Name: nombre del paquete de configuración de máquina.
  • Configuración: ruta de acceso completa del documento de configuración de DSC compilado.
  • Ruta de acceso: ruta de acceso de la carpeta de salida. Este parámetro es opcional. Si no se especifica, el paquete se crea en el directorio actual.
  • Type: (Audit, AuditandSet) Determina si la configuración solo debe auditar o si la configuración debe cambiar el estado de la máquina si no está en el estado deseado. El valor predeterminado es Audit.

Este paso no requiere elevación. El parámetro Force se usa para sobrescribir paquetes existentes, si ejecuta el comando más de una vez.

Los siguientes comandos crean un artefacto de paquete:

# Create a package that will only audit compliance
$params = @{
    Name          = 'MyConfig'
    Configuration = './MyConfig/MyConfig.mof'
    Type          = 'Audit'
    Force         = $true
}
New-GuestConfigurationPackage @params
# Create a package that will audit and apply the configuration (Set)
$params = @{
    Name          = 'MyConfig'
    Configuration = './MyConfig/MyConfig.mof'
    Type          = 'AuditAndSet'
    Force         = $true
}
New-GuestConfigurationPackage @params

Se devuelve un objeto con Name y Path del paquete creado.

Name     Path
----     ----
MyConfig C:\dsc\MyConfig.zip

Contenido esperado de un artefacto de configuración de máquina

La configuración de máquina usa el paquete completado para crear las definiciones de Azure Policy. El paquete consta de:

  • La configuración de DSC compilada como MOF
  • Carpeta Modules
    • Módulo GuestConfiguration
    • Módulo DscNativeResources
    • Módulos de recursos de DSC que requiere el MOF
  • Archivo de metaconfiguración que almacena el paquete type y version

El cmdlet de PowerShell crea el archivo del paquete .zip. No se requiere ninguna carpeta de nivel raíz ni carpeta de versiones. El formato del paquete debe ser un archivo .zip y no puede superar un tamaño total de 100 MB cuando está descomprimido.

Puede expandir el archivo para inspeccionarlo mediante el cmdlet Expand-Archive.

Expand-Archive -Path .\MyConfig.zip -DestinationPath MyConfigZip

Puede obtener el tamaño total del paquete descomprimido con PowerShell.

Get-ChildItem -Recurse -Path .\MyConfigZip |
    Measure-Object -Sum Length |
    ForEach-Object -Process {
        $Size = [math]::Round(($_.Sum / 1MB), 2)
        "$Size MB"
    }

Ampliación de la configuración de máquina con herramientas de terceros

Los paquetes de artefacto para la configuración de máquina se pueden ampliar para que incluyan herramientas de terceros. La ampliación de la configuración de máquina requiere el desarrollo de dos componentes.

  • Un recurso de Desired State Configuration que controla toda la actividad relacionada con la administración de la herramienta de terceros.
    • Instalación
    • Invocar
    • Convertir salida
  • Contenido en el formato correcto para que la herramienta consuma de forma nativa.

El recurso de DSC requiere un desarrollo personalizado si aún no existe una solución de la comunidad. Las soluciones de la comunidad se pueden descubrir buscando en Galería de PowerShell por la etiqueta GuestConfiguration.

Nota

La extensibilidad de la configuración de máquina es un escenario de "traiga su propia licencia". Asegúrese de que ha cumplido los términos y condiciones de las herramientas de terceros antes de usarlas.

Una vez instalado el recurso de DSC en el entorno de desarrollo, use el parámetro FilesToInclude para que New-GuestConfigurationPackage incluya el contenido de la plataforma de terceros en el artefacto de contenido.

Paso siguiente