Cambio de secretos en Azure Stack Hub

En este artículo se proporcionan instrucciones para la rotación de secretos, a fin de ayudar a mantener una comunicación segura con los recursos y servicios de la infraestructura de Azure Stack Hub.

Información general

Azure Stack Hub usa secretos para mantener una comunicación segura con los recursos y servicios de la infraestructura. Para mantener la integridad de la infraestructura de Azure Stack Hub, los operadores necesitan la posibilidad de rotar los secretos con una frecuencia que se ajuste a los requisitos de seguridad de la organización.

Cuando se aproxime la expiración de los secretos, se generan las siguientes alertas en el portal de administración. La finalización de la rotación de secretos resolverá estas alertas:

  • Expiración de contraseña de cuenta de servicio pendiente
  • Expiración de certificado interno pendiente
  • Expiración de certificado externo pendiente

Advertencia

Hay dos fases de alertas que se desencadenan en el portal de administración antes de la expiración:

  • 90 días antes de la expiración, se genera una alerta de advertencia.
  • 30 días antes de la expiración, se genera una alerta crítica.

La rotación de secretos es un paso crítico que debe completar si recibe estas notificaciones. Si no lo hace, puede que se pierdan cargas de trabajo y que deba volver a implementar Azure Stack Hub por su cuenta.

Para más información sobre la supervisión y corrección de alertas, consulte Supervisión del estado y las alertas en Azure Stack Hub.

Nota

Los entornos de Azure Stack Hub de las versiones anteriores a la 1811 pueden ver alertas sobre el vencimiento de certificados o secretos internos pendientes. Estas alertas son inexactas y deben omitirse sin ejecutar el cambio de secretos interno. Las alertas de expiración de secretos internos inexactos son un problema conocido resuelto en la versión 1811. Los secretos internos no expirarán a menos que el entorno haya estado activo durante dos años.

Requisitos previos

  1. Se recomienda encarecidamente que ejecute una versión compatible de Azure Stack Hub y que aplique la revisión más reciente disponible para la versión de Azure Stack Hub en la que se ejecuta la instancia. Por ejemplo, si ejecuta 2008, asegúrese de que ha instalado la revisión más reciente disponible para 2008.

    Importante

    Para versiones anteriores a la 1811:

    • Si ya se ha realizado la rotación de secretos, debe actualizar a la versión 1811 o posterior antes de ejecutar la rotación de secretos de nuevo. El cambio de secretos se debe ejecutar utilizando el punto de conexión con privilegios y requiere credenciales de operador de Azure Stack Hub. Si no sabe si la rotación de secretos se ha ejecutado en su entorno, actualice a la versión 1811 antes de realizarla.
    • No es necesario rotar los secretos para agregar certificados de host de extensiones. Debe seguir las instrucciones del artículo Preparación de un host de extensiones de Azure Stack Hub de extensiones para agregar certificados de un host de extensiones.
  2. Notifique a los usuarios cualquier operación de mantenimiento planeado. Programe ventanas de mantenimiento normales, en la medida de lo posible, durante horas no laborables. Las operaciones de mantenimiento pueden afectar tanto a las cargas de trabajo del usuario como a las operaciones del portal.

  3. Generación de solicitudes de firma de certificados para Azure Stack Hub.

  4. Preparación de certificados PKI de Azure Stack Hub.

  5. Los operadores pueden notar que las alertas se abren y cierran automáticamente durante la rotación de secretos. Este comportamiento es el esperado y puede hacerse caso omiso de las alertas. Los operadores pueden comprobar la validez de estas alertas mediante el cmdlet Test-AzureStack de PowerShell. Para los operadores, el uso de System Center Operations Manager para supervisar los sistemas de Azure Stack Hub, colocar un sistema en modo de mantenimiento impedirá que estas alertas lleguen a sus sistemas ITSM. Sin embargo, las alertas seguirán viniendo si el sistema de Azure Stack Hub deja de ser accesible.

Rotación de secretos externos

Importante

Rotación de secretos externos para:

En esta sección se describe la rotación de certificados que se usan para proteger los servicios orientados a externos. Estos certificados los proporciona el operador de Azure Stack Hub para los siguientes servicios:

  • Administrator Portal
  • Public Portal
  • Administrator Azure Resource Manager
  • Global Azure Resource Manager
  • Administrator Key Vault
  • Key Vault
  • Host de extensiones de administración
  • ACS (incluido Blob Storage, Table Storage y Queue Storage)
  • ADFS1
  • Gráfico1
  • Container Registry2

1Aplicable al usar Servicios federados de Active Directory (ADFS).

2Aplicable al usar Azure Container Registry (ACR).

Preparación

Antes de la rotación de secretos externos:

  1. Ejecute el cmdlet Test-AzureStack de PowerShell con el parámetro -group SecretRotationReadiness, para confirmar que todas las salidas de prueba son correctas antes de rotar los secretos.

  2. Prepare un nuevo conjunto de certificados externos de reemplazo:

  3. Guarde una copia de seguridad de los certificados usados para el cambio en una ubicación segura. Si se ejecuta el cambio y, después, se produce un error, reemplace los certificados del recurso compartido de archivos por las copias de seguridad antes de volver a ejecutar el cambio. Conserve las copias de seguridad en la ubicación segura.

  4. Cree un recurso compartido de archivos al que pueda acceder desde las máquinas virtuales de ERCS. El recurso compartido de archivos debe ser de lectura y escritura para la identidad CloudAdmin.

  5. Abra una consola de PowerShell ISE desde un equipo que tenga acceso al recurso compartido de archivos. Vaya al recurso compartido de archivos donde se crean los directorios para colocar los certificados externos.

  6. Cree una carpeta en el recurso compartido de archivos denominado Certificates. Dentro de la carpeta certificates, cree una subcarpeta denominada AAD o ADFS, en función del proveedor de identidades que use el centro de conectividad. Por ejemplo, .\Certificates\AAD o .\Certificates\ADFS. No se deben crear otras carpetas además de la carpeta certificates y la subcarpeta del proveedor de identidades aquí.

  7. Copie el nuevo conjunto de certificados externos de reemplazo creados en el paso 2, en la carpeta .\Certificates\<IdentityProvider> creada en el paso 6. Como se mencionó anteriormente, la subcarpeta del proveedor de identidades debe ser AAD o ADFS. Asegúrese de que los nombres alternativos del firmante de los certificados externos de reemplazo siguen el cert.<regionName>.<externalFQDN> formato especificado en los requisitos de certificado de infraestructura de clave pública (PKI) de Azure Stack Hub.

    Este es un ejemplo de una estructura de carpetas para el proveedor de identidades de Microsoft Entra:

        <ShareName>
            │
            └───Certificates
                  └───AAD
                      ├───ACSBlob
                      │       <CertName>.pfx
                      │
                      ├───ACSQueue
                      │       <CertName>.pfx
                      │
                      ├───ACSTable
                      │       <CertName>.pfx
                      │
                      ├───Admin Extension Host
                      │       <CertName>.pfx
                      │
                      ├───Admin Portal
                      │       <CertName>.pfx
                      │
                      ├───ARM Admin
                      │       <CertName>.pfx
                      │
                      ├───ARM Public
                      │       <CertName>.pfx
                      │
                      ├───Container Registry*
                      │       <CertName>.pfx
                      │
                      ├───KeyVault
                      │       <CertName>.pfx
                      │
                      ├───KeyVaultInternal
                      │       <CertName>.pfx
                      │
                      ├───Public Extension Host
                      │       <CertName>.pfx
                      │
                      └───Public Portal
                              <CertName>.pfx
    

*Aplicable al usar Azure Container Registry (ACR) para Microsoft Entra id. y ADFS.

Nota:

Si va a rotar certificados externos de Container Registry, debe crear manualmente una Container Registry subcarpeta en la subcarpeta del proveedor de identidades. Además, debe almacenar el certificado .pfx correspondiente dentro de esta subcarpeta creada manualmente.

Rotación

Realice los pasos siguientes para rotar los secretos externos:

  1. Use el siguiente script de PowerShell para rotar los secretos. El script requiere acceso a una sesión de punto de conexión con privilegios (PEP). El acceso a este punto de conexión se realiza mediante una sesión remota de PowerShell en la máquina virtual que lo hospeda. Si va a usar un sistema integrado, hay tres instancias del PEP, cada una de las cuales se ejecuta en una máquina virtual (Prefix-ERCS01, Prefix-ERCS02 o Prefix-ERCS03) en diferentes hosts. Este script lleva a cabo los pasos siguientes:

    • Cree una sesión de PowerShell con el punto de conexión con privilegios mediante la cuenta CloudAdmin y almacene la sesión como una variable. Esta variable se usa como parámetro en el paso siguiente.

    • Ejecuta Invoke-Command para pasar la variable de la sesión de PEP como parámetro -Session.

    • Ejecuta Start-SecretRotation en la sesión de PEP, con los parámetros siguientes. Para obtener más información, consulte la referencia start-SecretRotation :

      Parámetro Variable Descripción
      -PfxFilesPath $CertSharePath Ruta de acceso de red a la carpeta raíz certificates como se describe en el paso 6 de la sección Preparación, por ejemplo \\<IPAddress>\<ShareName>\Certificates.
      -PathAccessCredential $CertShareCreds el objeto PSCredential con las credenciales del recurso compartido.
      -CertificatePassword $CertPassword Una cadena segura de la contraseña usada para todos los archivos de certificados pfx creados.
    # Create a PEP session
    winrm s winrm/config/client '@{TrustedHosts= "<IP_address_of_ERCS>"}'
    $PEPCreds = Get-Credential
    $PEPSession = New-PSSession -ComputerName <IP_address_of_ERCS_Machine> -Credential $PEPCreds -ConfigurationName "PrivilegedEndpoint" -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
    
    # Run secret rotation
    $CertPassword = ConvertTo-SecureString '<Cert_Password>' -AsPlainText -Force
    $CertShareCreds = Get-Credential
    $CertSharePath = "<Network_Path_Of_CertShare>"
    Invoke-Command -Session $PEPsession -ScriptBlock {
        param($CertSharePath, $CertPassword, $CertShareCreds )
        Start-SecretRotation -PfxFilesPath $CertSharePath -PathAccessCredential $CertShareCreds -CertificatePassword $CertPassword
    } -ArgumentList ($CertSharePath, $CertPassword, $CertShareCreds)
    Remove-PSSession -Session $PEPSession
    
  2. El cambio de secretos externos tarda aproximadamente una hora. Después de la finalización correcta del proceso, la consola mostrará el mensaje ActionPlanInstanceID ... CurrentStatus: Completed, seguido de Action plan finished with status: 'Completed'. Elimine los certificados del recurso compartido creado en la sección Preparación y almacénelos en su ubicación segura de copia de seguridad.

    Nota

    Si se produce un error en el cambio de secretos, siga las instrucciones del mensaje de error y vuelva a ejecutar Start-SecretRotation con el parámetro -ReRun.

    Start-SecretRotation -ReRun
    

    Póngase en contacto con el soporte técnico si el cambio de secretos falla en reiteradas ocasiones.

  3. De manera opcional, para confirmar que se han rotado todos los certificados externos, ejecute la herramienta de validación Test-AzureStack con el siguiente script:

    Test-AzureStack -Include AzsExternalCertificates -DetailedResults -debug
    

Rotación de secretos internos

Los secretos internos incluyen los certificados, las contraseñas, las cadenas seguras y las claves que utilizan la infraestructura de Azure Stack Hub sin la intervención del operador de este servicio. La rotación de secretos internos solo es necesaria si sospecha que alguno de ellos se ha puesto en peligro o si ha recibido una alerta de expiración.

En las implementaciones anteriores a 1811, puede ver alertas para las expiraciones de certificados o secretos internos pendientes. Estas alertas no son correctas y deben ignorarse, y son un problema conocido resuelto en la versión 1811.

Realice los pasos siguientes para rotar los secretos internos:

  1. Ejecute el siguiente script de PowerShell. Tenga en cuenta que, para la rotación de secretos internos, en la sección "Run Secret Rotation", solo se usa el parámetro -Internal en el cmdlet Start-SecretRotation:

    # Create a PEP Session
    winrm s winrm/config/client '@{TrustedHosts= "<IP_address_of_ERCS>"}'
    $PEPCreds = Get-Credential
    $PEPSession = New-PSSession -ComputerName <IP_address_of_ERCS_Machine> -Credential $PEPCreds -ConfigurationName "PrivilegedEndpoint" -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
    
    # Run Secret Rotation
    Invoke-Command -Session $PEPSession -ScriptBlock {
        Start-SecretRotation -Internal
    }
    Remove-PSSession -Session $PEPSession
    

    Nota

    Las versiones anteriores a la 1811 no requieren la marca -Internal.

  2. Después de la finalización correcta del proceso, la consola mostrará el mensaje ActionPlanInstanceID ... CurrentStatus: Completed, seguido del estado Action plan finished with status: 'Completed'.

    Nota

    Si se produce un error en la rotación de secretos, siga las instrucciones del mensaje de error y vuelva a ejecutar Start-SecretRotation con los parámetros -Internal y -ReRun.

    Start-SecretRotation -Internal -ReRun
    

    Póngase en contacto con el soporte técnico si el cambio de secretos falla en reiteradas ocasiones.

Rotación de los certificados raíz de Azure Stack Hub

El certificado raíz de Azure Stack Hub se aprovisiona durante la implementación con una expiración de cinco años. A partir de 2108, la rotación interna de secretos también rota el certificado raíz. La alerta de expiración de secretos estándar identifica la expiración del certificado raíz y genera alertas en 90 (advertencia) y 30 días (crítico).

Para rotar el certificado raíz, debe actualizar el sistema a 2108 y realizar la rotación interna de secretos.

El siguiente fragmento de código usa el punto de conexión con privilegios para enumerar la fecha de expiración del certificado raíz:

$pep = New-PSSession -ComputerName <ip address> -ConfigurationName PrivilegedEndpoint -Credential $cred -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US) 
 
$stampInfo = Invoke-Command -Session $pep -ScriptBlock { Get-AzureStackStampInformation }

$rootCert = $stampInfo.RootCACertificates| Sort-Object -Property NotAfter | Select-Object -Last 1
"The Azure Stack Hub Root Certificate expires on {0}" -f $rootCert.NotAfter.ToString("D") | Write-Host -ForegroundColor Cyan

Actualización de la credencial de BMC

El controlador de administración de placa base supervisa el estado físico de sus servidores. Consulte con el proveedor de hardware del fabricante de equipos originales (OEM) para obtener instrucciones sobre cómo actualizar el nombre y la contraseña de la cuenta de usuario del BMC.

Nota

El OEM puede proporcionar aplicaciones de administración adicionales. La actualización del nombre de usuario o la contraseña para otras aplicaciones de administración no tiene ningún efecto en el nombre de usuario o la contraseña del BMC.

  1. Actualice el BMC de los servidores físicos de Azure Stack Hub siguiendo las instrucciones del OEM. El nombre de usuario y la contraseña para cada BMC de su entorno deben ser los mismos. Los nombres de usuario de BMC no pueden superar los 16 caracteres.
  1. Ya no es necesario que actualice primero las credenciales del BMC en los servidores físicos de Azure Stack Hub siguiendo las instrucciones del OEM. El nombre de usuario y la contraseña para cada BMC de su entorno deben ser los mismos y no pueden superar los 16 caracteres.
  1. Abra un punto de conexión con privilegios en sesiones de Azure Stack Hub. Para obtener instrucciones, consulte Uso del punto de conexión con privilegios en Azure Stack Hub.

  2. Después de abrir una sesión de punto de conexión con privilegios, ejecute uno de los siguientes scripts de PowerShell que usan Invoke-Command para ejecutar Set-BmcCredential. Si usa el parámetro opcional -BypassBMCUpdate con Set-BMCCredential, las credenciales del BMC no se actualizarán. Solo se actualiza el almacén de datos interno de Azure Stack Hub. Pase la variable de sesión del punto de conexión con privilegios como parámetro.

    Este es un script de ejemplo de PowerShell que solicitará el nombre de usuario y la contraseña:

    # Interactive Version
    $PEPIp = "<Privileged Endpoint IP or Name>" # You can also use the machine name instead of IP here.
    $PEPCreds = Get-Credential "<Domain>\CloudAdmin" -Message "PEP Credentials"
    $NewBmcPwd = Read-Host -Prompt "Enter New BMC password" -AsSecureString
    $NewBmcUser = Read-Host -Prompt "Enter New BMC user name"
    
    $PEPSession = New-PSSession -ComputerName $PEPIp -Credential $PEPCreds -ConfigurationName "PrivilegedEndpoint" -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
    
    Invoke-Command -Session $PEPSession -ScriptBlock {
        # Parameter BmcPassword is mandatory, while the BmcUser parameter is optional.
        Set-BmcCredential -BmcPassword $using:NewBmcPwd -BmcUser $using:NewBmcUser
    }
    Remove-PSSession -Session $PEPSession
    

    También puede codificar el nombre de usuario y la contraseña en las variables, lo cual puede ser menos seguro:

    # Static Version
    $PEPIp = "<Privileged Endpoint IP or Name>" # You can also use the machine name instead of IP here.
    $PEPUser = "<Privileged Endpoint user for example Domain\CloudAdmin>"
    $PEPPwd = ConvertTo-SecureString '<Privileged Endpoint Password>' -AsPlainText -Force
    $PEPCreds = New-Object System.Management.Automation.PSCredential ($PEPUser, $PEPPwd)
    $NewBmcPwd = ConvertTo-SecureString '<New BMC Password>' -AsPlainText -Force
    $NewBmcUser = "<New BMC User name>"
    
    $PEPSession = New-PSSession -ComputerName $PEPIp -Credential $PEPCreds -ConfigurationName "PrivilegedEndpoint" -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
    
    Invoke-Command -Session $PEPSession -ScriptBlock {
        # Parameter BmcPassword is mandatory, while the BmcUser parameter is optional.
        Set-BmcCredential -BmcPassword $using:NewBmcPwd -BmcUser $using:NewBmcUser
    }
    Remove-PSSession -Session $PEPSession
    

Referencia: Cmdlet Start-SecretRotation

El cmdlet Start-SecretRotation permite rotar los secretos de la infraestructura de un sistema de Azure Stack Hub. Este cmdlet solo se puede ejecutar en el punto de conexión con privilegios de Azure Stack Hub, mediante un bloque de script Invoke-Command que pasa la sesión de PEP en el parámetro -Session. De forma predeterminada, solo se cambian los certificados de todos los puntos de conexión de la infraestructura de red externa.

Parámetro Tipo Obligatorio Posición Valor predeterminado Descripción
PfxFilesPath String False con nombre None La ruta de acceso del recurso compartido de archivos a la carpeta raíz \Certificates que contiene todos los certificados del punto de conexión de la red externa. Solo se necesita al rotar secretos externos. La ruta de acceso debe terminar con la carpeta \Certificates, por ejemplo \\<IPAddress>\<ShareName>\Certificates.
CertificatePassword SecureString False con nombre None La contraseña de todos los certificados que se proporcionan en -PfXFilesPath. Valor obligatorio si se proporciona PfxFilesPath al cambiar secretos externos.
Internal String False con nombre None La marca Internal se debe utilizar cada vez que un operador de Azure Stack Hub quiera cambiar los secretos de infraestructura interna.
PathAccessCredential PSCredential False con nombre None La credencial de PowerShell para el recurso compartido de archivos al directorio \Certificates que contiene todos los certificados del punto de conexión de la red externa. Solo se necesita al rotar secretos externos.
ReRun SwitchParameter False con nombre None Se debe usar en cualquier momento en que se vuelva a intentar la rotación de secretos después de un intento fallido.

Sintaxis

Para el cambio de secretos externos

Start-SecretRotation [-PfxFilesPath <string>] [-PathAccessCredential <PSCredential>] [-CertificatePassword <SecureString>]  

Para el cambio de secretos internos

Start-SecretRotation [-Internal]  

Para volver a ejecutar el cambio de secretos externos

Start-SecretRotation [-ReRun]

Para volver a ejecutar el cambio de secretos internos

Start-SecretRotation [-ReRun] [-Internal]

Ejemplos

Cambio de solo los secretos de infraestructura interna

Este comando debe ejecutarse utilizando el punto de conexión con privilegios del entorno de Azure Stack Hub.

PS C:\> Start-SecretRotation -Internal

Este comando cambia todos los secretos de la infraestructura expuestos a la red interna de Azure Stack Hub.

Cambio de solo los secretos de infraestructura externa

# Create a PEP Session
winrm s winrm/config/client '@{TrustedHosts= "<IP_address_of_ERCS>"}'
$PEPCreds = Get-Credential
$PEPSession = New-PSSession -ComputerName <IP_address_of_ERCS> -Credential $PEPCreds -ConfigurationName "PrivilegedEndpoint" -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)

# Create Credentials for the fileshare
$CertPassword = ConvertTo-SecureString '<CertPasswordHere>' -AsPlainText -Force
$CertShareCreds = Get-Credential
$CertSharePath = "<NetworkPathOfCertShare>"
# Run Secret Rotation
Invoke-Command -Session $PEPsession -ScriptBlock {
    param($CertSharePath, $CertPassword, $CertShareCreds )
    Start-SecretRotation -PfxFilesPath $CertSharePath -PathAccessCredential $CertShareCreds -CertificatePassword $CertPassword
} -ArgumentList ($CertSharePath, $CertPassword, $CertShareCreds)
Remove-PSSession -Session $PEPSession

Este comando cambia los certificados TLS que se usan con los puntos de conexión de la infraestructura de red externa de Azure Stack Hub.

Cambio de secretos de la infraestructura interna y externa (solo anterior a 1811)

Importante

Este comando solo se aplica a las versiones de Azure Stack Hub anteriores a la 1811, ya que el cambio ahora es diferente para los certificados internos y para los certificados externos.

Desde las versiones posteriores a 1811 ya no se pueden cambiar los certificados internos y externos.

# Create a PEP Session
winrm s winrm/config/client '@{TrustedHosts= "<IP_address_of_ERCS>"}'
$PEPCreds = Get-Credential
$PEPSession = New-PSSession -ComputerName <IP_address_of_ERCS> -Credential $PEPCreds -ConfigurationName "PrivilegedEndpoint" -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
# Create Credentials for the fileshare
$CertPassword = ConvertTo-SecureString '<CertPasswordHere>' -AsPlainText -Force
$CertShareCreds = Get-Credential
$CertSharePath = "<NetworkPathOfCertShare>"
# Run Secret Rotation
Invoke-Command -Session $PEPSession -ScriptBlock {
    Start-SecretRotation -PfxFilesPath $using:CertSharePath -PathAccessCredential $using:CertShareCreds -CertificatePassword $using:CertPassword
}
Remove-PSSession -Session $PEPSession

Este comando rota los secretos de la infraestructura expuestos a la red interna de Azure Stack Hub y los certificados TLS que se usan con los puntos de conexión de la infraestructura de red externa de Azure Stack Hub. Start-SecretRotation cambia todos los secretos generados por Stack, y dado que se han proporcionado certificados, los certificados de punto de conexión externos también se cambiarán.

Pasos siguientes

Más información acerca de la seguridad de Azure Stack