Microsoft недавно выпустила крайне интересный PowerShell модуль SecretManagement . Данный модуль можно использовать для безопасного хранения и использования сохраненных паролей в ваших PowerShell скриптах. Данный модуль условно состоит из двух составляющих: SecretStore vault – собственно дефолтное хранилище паролей, и движок SecretManagement , который позволяет работать с хранилищами паролей. Поддерживается как встроенное хранилище (SecretStore vault), так и внешние инструменты для хранения паролей, например: KeePass, LastPass, HashiCorp Vault, Azure Key Vault, Bitwarden, Windows Credential Manager и т.д. С помощью SecretsManagement вы можете сохранить любые пароли и извлечь их в любой момент. Можно хранить не только пароли, но и лицензионные ключи, ключи доступа, и любую другую конфиденциальную информацию (поддерживаются типы объектов Hashtable, Byte, String, SecureString и PSCredential).
В этой статье мы покажем, как использовать модуль Secret Management в ваших скриптах PowerShell для хранения и извлечения учетных данных, а также пример интеграции с KeePass.
Модуль SecretsManagement требует наличие установленного Windows PowerShell версии 5.1 или PowerShell Core.
Для установки модуля Secrets Management с помощью менеджера пакетов NuGet, выполните команду:
Install-Module -Name Microsoft.PowerShell.SecretManagement
Чтобы установить хранилище паролей SecretStore , предлагаемой Microsoft по умолчанию, выполните команду:
Install-Module -Name Microsoft.PowerShell.SecretStore
Чтобы вывести список доступных командлетов в модулях, используйте команды:
Get-Command -Module Microsoft.PowerShell.SecretManagement
Get-Command -Module Microsoft.PowerShell.SecretStore
Сначала нужно создать локальное хранилище паролей. Я назову его MyDomainPassdb и назначу в качестве хранилища паролей по умолчанию.
Register-SecretVault -Name MyDomainPassdb -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault
Set-ExecutionPolicy -Scope Process Unrestricted
Вы можете создавать и использовать как локальные, так и удаленные хранилища паролей.
Следующая команда выведет список зарегистрированных хранилищ паролей для текущего пользователя:
Get-SecretVault
Задайте мастер пароль для доступа к хранилищу паролей:
Get-SecretStoreConfiguration
По умолчанию доступ к хранилищам паролей определяется следующими настройками:
Set-SecretStoreConfiguration -PasswordTimeout 1200)
;
Set-SecretStoreConfiguration -Authentication None
Чтобы изменить мастер пароль, воспользуйтесь командлетом Set-SecretStorePassword
.
%LOCALAPPDATA%MicrosoftPowerShellsecretmanagement
.
К сожалению, модуль Secret Management нельзя использовать для сервисных MSA/gMSA аккаунтов , т.к. для них не создаются профили.
Чтобы добавить строку типа SecureString в хранилище паролей используется командлет Set-Secret. Нужно указать имя хранилища и название записи:
Set-Secret -Vault MyDomainPassdb -Name user1
Укажите пароль, который нужно сохранить в базу.
Или можно сохранить защищаемое значение так (например GitHub ключ):
Set-Secret -Vault MyDomainPassdb -Name CORP_GITHUB_TOKEN -Secret 'gitHUB_API_AUThToken'
Вывести список записей в хранилище паролей можно так:
Get-SecretInfo
Get-Secret -Vault MyDomainPassdb -Name user1| ConvertFrom-SecureString –AsPlainText
В большинстве случаев для работы в сетях Windows вам нужно сохранять в хранилище паролей не просто пароль, а пару – учетная запись и пароль. В этом случае нужно сохранить эту пару в виде объекта PSCredential . Также может быть удобно добавить метаданные с описанием сохраненной записи.
Set-Secret -Vault MyDomainPassdb -Name adm_kbuldogov -Secret (Get-Credential) -Metadata @{description = "AD domain domain admin account resource.loc"}
Если вы не хотите вводить имя учетной записи в окне Get-Credential, можно указать ее так:
Set-Secret -Vault MyDomainPassdb -name adm_aivanov -Secret (get-credential corpadm_aivanov)
Вести список сохранённых паролей и их описание можно так:
Get-SecretInfo | Ft Name, Metadata
Теперь вы можете использовать сохраненные пароли в своих скриптах и командах PowerShell. Например, у одного из заказчиков из соображений безопасности и защиты административных учетных записей для каждого администратора нарезали с десяток учетных записей (под разные сервисы/задачи). Использовать одинаковые пароли запрещено, выполняется регулярный аудит паролей . Вводить пароли каждый раз для них довольно утомительно.
С помощью модуля SecretManagement можно безопасно сохранить пароли в локальный файл и вызывать их при необходимости .
Например, для подключения к удалённому компьютеру и запуска команды через PowerShell Remoting , можно использовать такой код:
Enter-PSSession -ComputerName dc01 -Credential (Get-Secret -Vault MyDomainPassdb -Name adm_aivanov)
Аналогичным образом можно упростить доступ к Exchange/Office365 :
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exch1.remontka.com/PowerShell/ -Authentication Kerberos -Credential (Get-Secret -Vault MyDomainPassdb -Name admex_aivanov)
Или Azure AD :
Connect-AzureAD -Credential (Get-Secret -Vault MyDomainPassdb -Name azadm_aivanov)
Или просто получить значение имени и пароля в переменную:
$Cred = Get-Secret -Vault MyDomainPassdb user1
Вы можете использовать модуль SecretManagement для доступа к другим популярным хранилкам паролей. Рассмотрим, как получить доступ к сохраненным паролям в файле KeePass (*.kdbx).
Сначала нужно установить модуль SecretManagement для взаимодействия с KeePass:
Install-Module -Name SecretManagement.KeePass
Затем зарегистрируйте хранилище KeePass в своем профиле пользователя:
Register-SecretVault -Name "KeePassDB" -ModuleName "SecretManagement.Keepass" -VaultParameters @{
Path = "C:UsersrootDocumentspersonal_creds.kdbx"
UseMasterPassword = $true
}
Чтобы проверить доступ к файлу KeePass, выполните команду:
Test-SecretVault -Name KeePassDB
Укажите мастер пароль для доступа к файлу KeePass. Если вы указали правильный пароль, команда должна вернуть True.
Теперь можно вывести список сохраненных паролей в базе KeePass.
Get-SecretInfo -Vault KeePassDB
Чтобы сохранить новые пароль в KeePass:
Set-Secret -Vault KeePassDB -Name "ILO_adm" -Secret (Get-Credential remontkaILO_adm)
Аналогичным образом вы можете подключить любое другое популярное решение для хранения паролей и использовать его в PowerShell.
Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…
В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…
Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…
Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…
Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…
В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…