Microsoft는 최근 매우 유용한 SecretManagement를 출시했습니다. PowerShell 모듈. 이를 사용하여 PowerShell 스크립트에 저장된 암호(비밀)를 안전하게 저장하고 사용할 수 있습니다. 모듈은 SecretStore 금고의 두 가지 구성요소로 구성됩니다. (기본 비밀번호 저장소) 및 SecretManagement (다른 암호 볼트에 액세스하기 위한 엔진). 기본 제공 SecretStore 볼트와 타사 비밀 볼트(KeePass, LastPass, HashiCorp Vault, Azure Key Vault, Bitwarden, Windows Credential Manager 등)가 모두 지원됩니다. SecretManagement를 사용하여 모든 암호(자격 증명)를 비밀 금고에 저장하고 언제든지 검색할 수 있습니다. 라이센스 키, 액세스 키 및 기타 민감한 정보를 저장할 수도 있습니다(Hashtable
, Byte
, String
, SecureString
, 및 PSCredential
개체 유형이 지원됨).
이 기사에서는 PowerShell 스크립트에서 SecretManagement 모듈을 사용하여 자격 증명을 저장하고 검색하는 방법과 KeePass 통합의 예를 보여줍니다.
내용:
- 비밀 관리 모듈 설치
- PowerShell을 통해 비밀번호 저장소(SecretStore Vault) 만들기
- 비밀 관리 모듈을 사용하여 저장된 자격 증명 관리
- PowerShell 스크립트의 Secret Vault에 저장된 비밀번호 사용
- PowerShell로 KeePass 암호 및 비밀 관리
비밀 관리 모듈 설치
SecretManagement 모듈에는 Windows PowerShell 버전 5.1 또는 PowerShell Core 6.x, 7.x가 필요합니다.
NuGet 패키지 관리자를 사용하여 SecretManagement를 설치하려면 아래 명령을 실행하세요.
Install-Module -Name Microsoft.PowerShell.SecretManagement
기본 SecretStore를 설치하려면 Microsoft에서 제공하는 볼트에서 다음 명령을 실행하십시오.
Install-Module -Name Microsoft.PowerShell.SecretStore
모듈에서 사용 가능한 cmdlet 목록을 표시하려면 다음 명령을 사용하십시오.
Get-Command -Module Microsoft.PowerShell.SecretManagement
Get-Command -Module Microsoft.PowerShell.SecretStore
PowerShell을 통해 비밀번호 저장소(SecretStore Vault) 만들기
먼저 로컬 비밀 금고를 만듭니다. 이름을 MyDomainPassdb로 지정하겠습니다. 그리고 그것을 기본 비밀번호 저장소로 만드십시오.
Register-SecretVault -Name MyDomainPassdb -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault
Set-ExecutionPolicy -Scope Process Unrestricted
로컬 및 원격 비밀번호 보관소를 모두 만들고 사용할 수 있습니다.
아래 명령은 현재 사용자에 대해 등록된 암호 저장소 목록을 표시합니다.
Get-SecretVault
SecretStore Vault에 액세스하기 위한 마스터 비밀번호 생성:
Get-SecretStoreConfiguration
기본적으로 다음 설정은 암호 저장소에 액세스할 수 있는 사람과 방법을 결정합니다.
- 범위 –
CurrentUser
(현재 사용자만 SecretStore에 액세스할 수 있음) - 인증 –
Password
(마스터 비밀번호를 사용하여 볼트에 액세스) - 비밀번호 제한 시간 –
900
– 마스터 비밀번호를 다시 입력할 필요가 없는 세션 기간(초), 세션 길이를 연장할 수 있습니다.Set-SecretStoreConfiguration -PasswordTimeout 1200
- 상호작용 –
Prompt
(변경 시 마스터 비밀번호 입력 여부)
비밀 금고에 액세스하기 위한 마스터 암호 요청을 비활성화하려면(권장하지 않음)
Authentication = None
을 설정하십시오. :
Set-SecretStoreConfiguration -Authentication None
마스터 비밀번호를 변경하려면 Set-SecretStorePassword
를 사용하세요. cmdlet.
%LOCALAPPDATA%\Microsoft\PowerShell\secretmanagement
에 있습니다. .
유감스럽게도 관리 서비스 계정(MSA/gMSA)에 대한 프로필이 생성되지 않았기 때문에 비밀 관리 모듈을 사용할 수 없습니다.
비밀 관리 모듈을 사용하여 저장된 자격 증명 관리
Set-Secret
cmdlet은 SecureString 유형의 암호를 암호 볼트에 추가하는 데 사용됩니다. 볼트 이름 및 항목 이름 지정:
Set-Secret -Vault MyDomainPassdb -Name user1
스토어에 저장하고 싶은 비밀번호(비밀번호)를 입력하세요.
또는 다음과 같이 보호된 값(예:GitHub 키)을 저장할 수 있습니다.Set-Secret -Vault MyDomainPassdb -Name MY_GITHUB_TOKEN -Secret 'GitHub_AUTH_API_Token'
비밀 금고에 있는 항목 목록을 표시할 수 있습니다.
Get-SecretInfo
PowerShell 7.x에서는 –AsPlainText를 사용하여 암호 저장소의 보호된 값을 일반 텍스트로 표시할 수 있습니다. 옵션(필요한 경우 PowerShell 버전 업데이트):
Get-Secret -Vault MyDomainPassdb -Name user1| ConvertFrom-SecureString –AsPlainText
대부분의 경우 Windows 네트워크에서 작업할 때만 암호를 저장하는 대신 사용자 이름과 암호를 모두 저장해야 합니다. 이 경우 자격 증명을 PSCredential로 저장합니다. 물체. 저장된 항목의 설명과 함께 메타데이터를 추가할 수도 있습니다.
Set-Secret -Vault MyDomainPassdb -Name adm_maxbak -Secret (Get-Credential) -Metadata @{description = "AD enterprise admin woshub.com"}
Get-Credential 창에 계정 이름을 입력하지 않으려면 다음과 같이 지정할 수 있습니다.
Set-Secret -Vault MyDomainPassdb -name adm_maxbak -Secret (get-credential woshub\adm_maxbak)
저장된 비밀번호 목록과 설명을 표시하는 방법은 다음과 같습니다.
Get-SecretInfo | Ft Name, Metadata
PowerShell 스크립트의 Secret Vault에 저장된 비밀번호 사용
이제 PowerShell 스크립트 및 명령에 저장된 암호를 사용할 수 있습니다. 예를 들어 내 고객 중 한 명이 보안 및 관리 계정 보호를 위해 각 관리자와 다른 서비스/작업에 대해 12개의 계정을 사용하고 있습니다. 동일한 암호를 사용하는 것은 금지되며 암호는 정기적으로 감사됩니다. 관리자는 계속해서 다른 비밀번호를 입력하는 것이 지루하다고 생각합니다.
SecretManagement 모듈을 사용하면 암호를 로컬 볼트에 안전하게 저장하고 필요한 경우 얻을 수 있습니다.
예를 들어 원격 컴퓨터에 연결하고 PowerShell Remoting을 통해 명령을 실행하려면 다음 코드를 사용할 수 있습니다.
Enter-PSSession -ComputerName mun-dc01 -Credential (Get-Secret -Vault MyDomainPassdb -Name adm_maxbak)
같은 방식으로 Exchange 또는 Microsoft 365(ex-Office 365)를 더 쉽게 연결할 수 있습니다.
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://mun-exch1.woshub.com/PowerShell/ -Authentication Kerberos -Credential (Get-Secret -Vault MyDomainPassdb -Name adm_ex_maxbak)
또는 Azure AD 테넌트를 연결합니다.
Connect-AzureAD -Credential (Get-Secret -Vault MyDomainPassdb -Name azadm_ maxbak)
또는 자격 증명을 가져와 PowerShell 변수에 저장합니다.
$Cred = Get-Secret -Vault MyDomainPassdb user1
PowerShell로 KeePass 비밀번호 및 비밀 관리
SecretManagement 모듈을 사용하여 널리 사용되는 다른 암호 볼트에 액세스할 수 있습니다. KeePass에 저장된 비밀번호에 액세스하는 방법을 알아보겠습니다. 파일(*.kdbx).
먼저 SecretManagement 모듈을 설치하여 KeePass와 상호 작용합니다.
Install-Module -Name SecretManagement.KeePass
그런 다음 사용자 프로필에 있는 KeePass 볼트 파일을 등록합니다.
Register-SecretVault -Name "KeePassDB" -ModuleName "SecretManagement.Keepass" -VaultParameters @{
Path = "C:\Users\maxbak\Documents\personal_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 woshub\ILO_adm)
같은 방법으로 다른 인기 있는 암호 저장소 솔루션을 연결하여 PowerShell에서 사용할 수 있습니다.