Uso de SecretStore en automatización

Importante

El equipo de PowerShell ha decidido que los módulos Secret son completos en funciones y que ya no se desarrollarán activamente. Los módulos seguirán siendo compatibles con la seguridad y la corrección de errores críticos. El repositorio de código ha sido archivado.

Las últimas versiones publicadas son:

La naturaleza de los secretos ha cambiado fundamentalmente desde que se diseñó este proyecto. Los métodos de autenticación sin contraseña como las llaves de acceso, el inicio de sesión único y los sistemas federados de credenciales como Microsoft Entra ID, biometría y claves de seguridad hardware son el futuro.

Este artículo ofrece un ejemplo de cómo usar un Microsoft. PowerShell.SecretStore en un escenario de automatización. Una bóveda SecretStore te proporciona una forma segura de almacenar y recuperar las contraseñas, tokens y otros secretos que necesitas usar en tu pipeline de automatización en la máquina local.

Configura el host que ejecute la automatización

Para este ejemplo, primero debes instalar y configurar los módulos de SecretManagement. Este ejemplo asume que tu host de automatización está ejecutando Windows. Estos comandos deben ejecutarse en el contexto de usuario de la cuenta de automatización en el host.

Install-Module -Name Microsoft.PowerShell.SecretStore -Repository PSGallery -Force
Install-Module -Name Microsoft.PowerShell.SecretManagement -Repository PSGallery -Force
Import-Module Microsoft.PowerShell.SecretStore
Import-Module Microsoft.PowerShell.SecretManagement

Configurar la bóveda de SecretStore

También debes crear una contraseña como SecureString que se use para proteger la bóveda de SecretStore. El sistema de automatización que utilices podría tener una forma segura de proporcionar una contraseña que puedas usar para proteger la bóveda. Por ejemplo, GitHub ofrece una forma segura de almacenar y usar secretos en Acciones de GitHub. Para obtener más información, consulte Uso de secretos en Acciones de GitHub.

En este ejemplo, la contraseña es una SecureString que se exporta de forma segura a un archivo XML y se cifra mediante la Protección de Datos de Windows (DPAPI). El siguiente comando te indica una contraseña. En este ejemplo, el Nombre de usuario no es importante.

PS> $credential = Get-Credential -UserName 'SecureStore'

PowerShell credential request
Enter your credentials.
Password for user SecureStore: **************

Una vez que tengas la contraseña, puedes guardarla en un archivo XML cifrado.

$securePasswordPath = 'C:\automation\passwd.xml'
$credential.Password |  Export-Clixml -Path $securePasswordPath

A continuación, debes configurar la bóveda de SecretStore . La configuración establece la interacción del usuario en None, de modo que SecretStore nunca solicita al usuario. La configuración requiere una contraseña, y la contraseña se introduce como un objeto SecureString . El -Confirm:false parámetro se utiliza para que PowerShell no pida confirmación.

Register-SecretVault -Name SecretStore -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault
$password = Import-CliXml -Path $securePasswordPath

$storeConfiguration = @{
    Authentication = 'Password'
    PasswordTimeout = 3600 # 1 hour
    Interaction = 'None'
    Password = $password
    Confirm = $false
}
Set-SecretStoreConfiguration @storeConfiguration

Ahora que tienes la bóveda instalada y configurada, puedes usarla Set-Secret para añadir los secretos que necesitas para tus scripts de automatización.

Uso de secretos en automatización

La contraseña de SecretStore debe proporcionarse de forma segura. Aquí la contraseña se importa de un archivo que fue cifrado usando la Protección de Datos de Windows (DPAPI).

Nota

Esta es una solución exclusiva para Windows, pero otra opción es usar una variable segura proporcionada por un sistema de CI como Acciones de GitHub.

El script de automatización necesita desbloquear la bóveda para recuperar los secretos necesarios en el script. El Unlock-SecretStore cmdlet se utiliza para desbloquear la SecretStore de esta sesión. El tiempo de espera de la contraseña estaba configurado para 1 hora. La bóveda permanece desbloqueada durante la sesión durante ese tiempo. Tras el tiempo muerto, la cámara debe desbloquearse de nuevo antes de que se pueda acceder a los secretos.

$password = Import-CliXml -Path $securePasswordPath
Unlock-SecretStore -Password $password
$automationPassword = Get-Secret -Name CIJobSecret