Microsoft เพิ่งเปิดตัว SecretManagement . ที่มีประโยชน์มาก โมดูล PowerShell คุณสามารถใช้เพื่อจัดเก็บและใช้รหัสผ่านที่บันทึกไว้ (ความลับ) ได้อย่างปลอดภัยในสคริปต์ PowerShell ของคุณ โมดูลประกอบด้วยสององค์ประกอบ:a SecretStore vault (ที่เก็บรหัสผ่านเริ่มต้น) และ การจัดการความลับ (เครื่องมือในการเข้าถึงห้องนิรภัยรหัสผ่านต่างๆ) รองรับทั้ง SecretStore vault ในตัวและ secret vault ของบริษัทอื่น (เช่น KeePass, LastPass, HashiCorp Vault, Azure Key Vault, Bitwarden, Windows Credential Manager เป็นต้น) ด้วยการใช้ SecretManagement คุณสามารถบันทึกรหัสผ่านใดๆ (ข้อมูลรับรอง) ลงในห้องนิรภัยลับและเรียกข้อมูลเหล่านี้ได้ทุกเมื่อ คุณยังเก็บคีย์ใบอนุญาต คีย์การเข้าถึง และข้อมูลสำคัญอื่นๆ ได้อีกด้วย (Hashtable
, Byte
, String
, SecureString
และ PSCredential
รองรับประเภทอ็อบเจ็กต์)
ในบทความนี้ เราจะแสดงวิธีใช้โมดูล SecretManagement ในสคริปต์ PowerShell ของคุณเพื่อจัดเก็บและเรียกข้อมูลรับรอง ตลอดจนตัวอย่างการรวม KeePass
สารบัญ:
- การติดตั้งโมดูลการจัดการความลับ
- สร้างที่เก็บรหัสผ่าน (SecretStore Vault) ผ่าน PowerShell
- การจัดการข้อมูลประจำตัวที่บันทึกไว้โดยใช้โมดูลการจัดการความลับ
- การใช้รหัสผ่านที่บันทึกไว้จาก Secret Vault ใน PowerShell Scripts
- การจัดการรหัสผ่านและความลับ KeePass ด้วย PowerShell
การติดตั้งโมดูลการจัดการความลับ
โมดูล SecretManagement ต้องใช้ Windows PowerShell เวอร์ชัน 5.1 หรือ PowerShell Core 6.x, 7.x
ในการติดตั้ง SecretManagement โดยใช้ตัวจัดการแพ็คเกจ NuGet ให้เรียกใช้คำสั่งด้านล่าง:
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
สร้างที่เก็บรหัสผ่าน (SecretStore Vault) ผ่าน PowerShell
ขั้นแรก สร้างห้องนิรภัยลับในเครื่อง ฉันจะตั้งชื่อมันว่า MyDomainPassdb และทำให้เป็นที่เก็บรหัสผ่านเริ่มต้น
Register-SecretVault -Name MyDomainPassdb -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault
Set-ExecutionPolicy -Scope Process Unrestricted
คุณสามารถสร้างและใช้ห้องนิรภัยรหัสผ่านในเครื่องและระยะไกลได้
คำสั่งด้านล่างแสดงรายการรหัสผ่านที่ลงทะเบียนไว้สำหรับผู้ใช้ปัจจุบัน:
Get-SecretVault
สร้างรหัสผ่านหลักเพื่อเข้าถึง SecretStore Vault ของคุณ:
Get-SecretStoreConfiguration
โดยค่าเริ่มต้น การตั้งค่าต่อไปนี้จะกำหนดว่าใครและวิธีเข้าถึงที่เก็บรหัสผ่าน:
- ขอบเขต –
CurrentUser
(เฉพาะผู้ใช้ปัจจุบันเท่านั้นที่สามารถเข้าถึง SecretStore) - การตรวจสอบสิทธิ์ –
Password
(เข้าถึงห้องนิรภัยโดยใช้รหัสผ่านหลัก) - PasswordTimeout –
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
การใช้รหัสผ่านที่บันทึกไว้จาก Secret Vault ใน PowerShell Scripts
ตอนนี้คุณสามารถใช้รหัสผ่านที่บันทึกไว้ในสคริปต์และคำสั่ง PowerShell ของคุณได้ ตัวอย่างเช่น ลูกค้าคนหนึ่งของฉันใช้บัญชีหลายสิบบัญชีสำหรับผู้ดูแลระบบแต่ละคน และบริการ/งานต่างๆ เพื่อความปลอดภัยและการป้องกันบัญชีผู้ดูแลระบบ ห้ามใช้รหัสผ่านเดียวกัน มีการตรวจสอบรหัสผ่านเป็นประจำ ผู้ดูแลระบบพบว่าการป้อนรหัสผ่านที่แตกต่างกันอย่างต่อเนื่องเป็นสิ่งที่น่าเบื่อ
ด้วยการใช้โมดูล SecretManagement คุณสามารถจัดเก็บรหัสผ่านของคุณได้อย่างปลอดภัยในห้องนิรภัยในพื้นที่ และรับรหัสผ่านหากจำเป็น
ตัวอย่างเช่น หากต้องการเชื่อมต่อกับคอมพิวเตอร์ระยะไกลและเรียกใช้คำสั่งผ่าน PowerShell Remoting คุณสามารถใช้รหัสต่อไปนี้:
Enter-PSSession -ComputerName mun-dc01 -Credential (Get-Secret -Vault MyDomainPassdb -Name adm_maxbak)
ในทำนองเดียวกัน คุณสามารถเชื่อมต่อ Exchange หรือ Microsoft 365 (เช่น 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
การจัดการรหัสผ่าน KeePass และความลับด้วย PowerShell
คุณสามารถใช้โมดูล SecretManagement เพื่อเข้าถึงห้องนิรภัยรหัสผ่านยอดนิยมอื่นๆ มาดูวิธีเข้าถึงรหัสผ่านที่บันทึกไว้ใน KeePass ไฟล์ (*.kdbx)
ก่อนอื่น ติดตั้งโมดูล SecretManagement เพื่อโต้ตอบกับ KeePass:
Install-Module -Name SecretManagement.KeePass
จากนั้นลงทะเบียนไฟล์ KeePass vault ที่อยู่ในโปรไฟล์ผู้ใช้ของคุณ:
Register-SecretVault -Name "KeePassDB" -ModuleName "SecretManagement.Keepass" -VaultParameters @{
Path = "C:\Users\maxbak\Documents\personal_creds.kdbx"
UseMasterPassword = $true
}
ในการตรวจสอบการเข้าถึงไฟล์ KeePass ให้รันคำสั่ง:
Test-SecretVault -Name KeePassDB
ป้อนรหัสผ่านหลักเพื่อเข้าถึง KeePass vault หากคุณป้อนรหัสผ่านถูกต้อง คำสั่งจะส่งกลับ True .
จากนั้นแสดงรายการรหัสผ่านที่บันทึกไว้ในฐานข้อมูล KeePass:
Get-SecretInfo -Vault KeePassDB
วิธีบันทึกความลับใหม่ใน KeePass:
Set-Secret -Vault KeePassDB -Name "ILO_adm" -Secret (Get-Credential woshub\ILO_adm)
ในทำนองเดียวกัน คุณสามารถเชื่อมต่อโซลูชันที่เก็บรหัสผ่านยอดนิยมอื่นๆ และใช้ใน PowerShell ได้