Use o SecretStore na automação

Important

A equipa PowerShell decidiu que os módulos Secret são completos em funcionalidades e deixarão de ser desenvolvidos ativamente. Os módulos continuarão a ser suportados para correções de segurança e bugs críticos. O repositório de código foi arquivado.

As versões mais recentes publicadas são:

A natureza dos segredos mudou fundamentalmente desde que este projeto foi concebido. Métodos de autenticação sem palavra-passe, como chaves de acesso, login único e sistemas federados de credenciais, como o Microsoft Entra ID, biometria e chaves de segurança de hardware, são o futuro.

Este artigo fornece um exemplo de utilização de uma Microsoft. Cofre PowerShell.SecretStore num cenário de automação. Um cofre SecretStore permite-lhe armazenar e recuperar de forma segura as palavras-passe, tokens e outros segredos que precisa de usar no seu pipeline de automação na máquina local.

Configura o anfitrião que executa a automação

Neste exemplo, deve primeiro instalar e configurar os módulos SecretManagement. Este exemplo assume que o seu host de automação está a correr o Windows. Estes comandos devem ser executados no contexto do utilizador da conta de automação no 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 o cofre do SecretStore

Também deve criar uma palavra-passe como SecureString usada para proteger o cofre da SecretStore. O sistema de automação que usa pode ter uma forma segura de fornecer uma palavra-passe que pode usar para proteger o cofre. Por exemplo, o GitHub fornece uma forma segura de armazenar e usar segredos no GitHub Actions. Para obter mais informações, consulte Usando segredos em ações do GitHub.

Neste exemplo, a palavra-passe é um SecureString que é exportado de forma segura para um ficheiro XML e encriptado pela Proteção de Dados do Windows (DPAPI). O comando seguinte pede-lhe uma palavra-passe. Neste exemplo, o Nome de Utilizador não é importante.

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

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

Depois de teres a palavra-passe, podes guardá-la num ficheiro XML encriptado.

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

De seguida, tens de configurar o cofre do SecretStore . A configuração define a interação do utilizador para None, de modo que o SecretStore nunca solicita o utilizador. A configuração requer uma palavra-passe, e a palavra-passe é passada como um objeto SecureString . O -Confirm:false parâmetro é usado para que o PowerShell não solicite confirmação.

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

Agora que tens o vault instalado e configurado, podes usar Set-Secret para adicionar os segredos de que precisas para os teus scripts de automação.

Usar segredos na automação

A palavra-passe da SecretStore deve ser fornecida de forma segura. Aqui, a palavra-passe está a ser importada de um ficheiro que foi encriptado usando a Proteção de Dados do Windows (DPAPI).

Note

Esta é uma solução exclusiva para Windows, mas outra opção é usar uma variável segura fornecida por um sistema CI como o GitHub Actions.

O script de automação precisa de desbloquear o cofre para recuperar os segredos necessários no script. O Unlock-SecretStore cmdlet é usado para desbloquear a SecretStore desta sessão. O tempo limite da palavra-passe foi configurado para 1 hora. O cofre permanece desbloqueado durante a sessão durante esse período. Após o timeout, o cofre deve ser desbloqueado novamente antes que os segredos possam ser acedidos.

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