Módulo PowerShell SecretManagement: administre de forma segura las credenciales y los secretos
Microsoft lanzó recientemente un módulo de PowerShell SecretManagement muy útil. Puede usarlo para almacenar y usar de forma segura contraseñas guardadas (secretos) en sus scripts de PowerShell. El módulo consta de dos componentes: una bóveda SecretStore (un almacén de contraseñas predeterminado) y un SecretManagement (motor para acceder a diferentes bóvedas de contraseñas). Se admiten tanto la bóveda SecretStore integrada como las bóvedas secretas de terceros (como KeePass, LastPass, HashiCorp Vault, Azure Key Vault, Bitwarden, Windows Credential Manager, etc.). Con SecretManagement, puede guardar cualquier contraseña (credencial) en la bóveda secreta y recuperarla en cualquier momento. También puede almacenar claves de licencia, claves de acceso y otra información confidencial (
Hashtable,
Byte,
String,
SecureString, y
PSCredential
se admiten tipos de objeto).
En este artículo, le mostraremos cómo usar el módulo SecretManagement en sus scripts de PowerShell para almacenar y recuperar credenciales, así como un ejemplo de integración de KeePass.
Instalación del Módulo de Gestión de Secretos
El módulo SecretManagement requiere Windows PowerShell versión 5.1 o PowerShell Core 6.x, 7.x.
Para instalar SecretManagement usando el administrador de paquetes NuGet, ejecute el siguiente comando:
Install-Module -Name Microsoft.PowerShell.SecretManagementPara instalar la bóveda SecretStore predeterminada que ofrece Microsoft, ejecute el siguiente comando:
Install-Module -Name Microsoft.PowerShell.SecretStorePara mostrar una lista de cmdlets disponibles en el módulo, use estos comandos:
Get-Command -Module Microsoft.PowerShell.SecretManagement
Get-Command -Module Microsoft.PowerShell.SecretStoreCree un almacén de contraseñas (SecretStore Vault) a través de PowerShell
En primer lugar, cree una bóveda secreta local. Lo nombraré MyDomainPassdb y lo convertiré en un almacén de contraseñas predeterminado.
Register-SecretVault -Name MyDomainPassdb -ModuleName Microsoft.PowerShell.SecretStore -DefaultVaultSi la configuración de su política de ejecución de scripts de PowerShell impide que el módulo se ejecute, puede cambiar la configuración de su sesión actual de la siguiente manera:
Set-ExecutionPolicy -Scope Process UnrestrictedPuede crear y utilizar bóvedas de contraseñas tanto locales como remotas.
El siguiente comando muestra una lista de bóvedas de contraseñas registradas para el usuario actual:
Get-SecretVaultCree una contraseña maestra para acceder a su bóveda SecretStore:
Get-SecretStoreConfigurationSi olvida su contraseña maestra de SecretStore Vault, no podrá acceder a los datos almacenados en ella.
De forma predeterminada, las siguientes configuraciones determinan quién y cómo puede acceder a los almacenes de contraseñas:
- Scope
- CurrentUser (solo el usuario actual puede acceder a SecretStore)
- Authentication
Contraseña (acceda a la bóveda usando una contraseña maestra)
- PasswordTimeout
- 900 - la duración de la sesión (en segundos) durante la cual no necesita volver a ingresar su contraseña maestra. Puede extender la duración de la sesión:
Set-SecretStoreConfiguration -PasswordTimeout 1200- Interaction
- Preguntar (si se debe ingresar la contraseña maestra al realizar cambios)
Para deshabilitar la solicitud de una contraseña maestra para acceder a la bóveda secreta (no recomendado), configure
Authentication = NoneSet-SecretStoreConfiguration -Authentication NonePara cambiar la contraseña maestra, utilice el
Set-SecretStorePasswordcmdlet.
En Windows, un almacén de contraseñas local se encuentra en la carpeta de perfil de usuario
%LOCALAPPDATA%\Microsoft\PowerShell\secretmanagementDesafortunadamente, no puede usar el módulo de administración de secretos para cuentas de servicio administradas (MSA/gMSA) ya que no se crean perfiles para ellas.
Gestión de credenciales guardadas mediante el módulo de gestión de secretos
Este
Set-Secretcmdlet se usa para agregar un secreto de tipo SecureString a la bóveda de contraseñas. Especifique el nombre de la bóveda y el nombre de la entrada:
Set-Secret -Vault MyDomainPassdb -Name user1Introduce la contraseña (secreta) que quieres guardar en la tienda.
O bien, puede guardar un valor protegido de la siguiente manera (por ejemplo, una clave de GitHub):
Set-Secret -Vault MyDomainPassdb -Name MY_GITHUB_TOKEN -Secret 'GitHub_AUTH_API_Token'Esté atento al ingresar información privada como texto sin formato en la consola de PowerShell, ya que se guarda en el historial de comandos de PowerShell.
Puede mostrar una lista de entradas en la bóveda secreta:
Get-SecretInfoEn PowerShell 7.x, puede mostrar un valor protegido de la bóveda de contraseñas como texto sin formato usando la opción -AsPlainText (actualice su versión de PowerShell si es necesario):
Get-Secret -Vault MyDomainPassdb -Name user1| ConvertFrom-SecureString -AsPlainTextEn la mayoría de los casos, debe guardar un nombre de usuario y una contraseña en lugar de guardar una contraseña solo cuando trabaja en redes de Windows. En este caso, guarde las credenciales como un objeto PSCredential. También puede agregar metadatos con la descripción de la entrada guardada.
Set-Secret -Vault MyDomainPassdb -Name adm_maxbak -Secret (Get-Credential) -Metadata @{description = "AD enterprise admin a-d.site"}Si no desea ingresar un nombre de cuenta en la ventana Obtener credencial, puede especificarlo de esta manera:
Set-Secret -Vault MyDomainPassdb -name adm_maxbak -Secret (get-credential a-d\adm_maxbak)Así es como puede mostrar una lista de contraseñas guardadas y sus descripciones:
Get-SecretInfo | Ft Name, MetadataUso de contraseñas guardadas de Secret Vault en PowerShell Scripts
Ahora puede usar contraseñas guardadas en sus scripts y comandos de PowerShell. Por ejemplo, uno de mis clientes está usando una docena de cuentas para cada administrador y diferentes servicios/tareas por razones de seguridad y protección de cuentas administrativas. Está prohibido usar las mismas contraseñas, las contraseñas se auditan periódicamente. A los administradores les resulta tedioso ingresar constantemente diferentes contraseñas.
Con el módulo SecretManagement, puede almacenar de forma segura sus contraseñas en una bóveda local y obtenerlas si es necesario.
Por ejemplo, para conectarse a una computadora remota y ejecutar un comando a través de PowerShell Remoting, puede usar el siguiente código:
Enter-PSSession -ComputerName mun-dc01 -Credential (Get-Secret -Vault MyDomainPassdb -Name adm_maxbak)De la misma manera, puede conectar Exchange o Microsoft 365 (ex-Office 365) más fácilmente:
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://mun-exch1.a-d.site/PowerShell/ -Authentication Kerberos -Credential (Get-Secret -Vault MyDomainPassdb -Name adm_ex_maxbak)O conecte su arrendatario de Azure AD:
Connect-AzureAD -Credential (Get-Secret -Vault MyDomainPassdb -Name azadm_ maxbak)O simplemente obtenga las credenciales y guárdelas en una variable de PowerShell:
$Cred = Get-Secret -Vault MyDomainPassdb user1Administrar contraseñas y secretos de KeePass con PowerShell
Puede usar el módulo SecretManagement para acceder a otras bóvedas de contraseñas populares. Veamos cómo acceder a las contraseñas guardadas en un archivo KeePass (*.kdbx).
En primer lugar, instale el módulo SecretManagement para interactuar con KeePass:
Install-Module -Name SecretManagement.KeePassLuego registre el archivo de la bóveda de KeePass ubicado en su perfil de usuario:
Register-SecretVault -Name "KeePassDB" -ModuleName "SecretManagement.Keepass" -VaultParameters @{
Path = "C:\Users\maxbak\Documents\personal_creds.kdbx"
UseMasterPassword = $true
}Para verificar el acceso a un archivo KeePass, ejecute el comando:
Test-SecretVault -Name KeePassDBIngrese la contraseña maestra para acceder a la bóveda de KeePass. Si ingresó la contraseña correctamente, el comando devuelve Verdadero.
Luego muestra una lista de contraseñas guardadas en la base de datos de KeePass:
Get-SecretInfo -Vault KeePassDBPara guardar un nuevo secreto en KeePass:
Set-Secret -Vault KeePassDB -Name "ILO_adm" -Secret (Get-Credential a-d\ILO_adm)De la misma manera, puede conectar cualquier otra solución popular de almacenamiento de contraseñas y usarla en PowerShell.









