Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows Server

PowerShell SecretManagement Module:จัดการข้อมูลประจำตัวและความลับอย่างปลอดภัย

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

PowerShell SecretManagement Module:จัดการข้อมูลประจำตัวและความลับอย่างปลอดภัย

หากต้องการแสดงรายการ cmdlet ที่มีอยู่ในโมดูล ให้ใช้คำสั่งเหล่านี้:

Get-Command -Module Microsoft.PowerShell.SecretManagement
Get-Command -Module Microsoft.PowerShell.SecretStore

PowerShell SecretManagement Module:จัดการข้อมูลประจำตัวและความลับอย่างปลอดภัย

สร้างที่เก็บรหัสผ่าน (SecretStore Vault) ผ่าน PowerShell

ขั้นแรก สร้างห้องนิรภัยลับในเครื่อง ฉันจะตั้งชื่อมันว่า MyDomainPassdb และทำให้เป็นที่เก็บรหัสผ่านเริ่มต้น

Register-SecretVault -Name MyDomainPassdb -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault

หากการตั้งค่านโยบายการเรียกใช้สคริปต์ PowerShell ของคุณป้องกันไม่ให้โมดูลทำงาน คุณสามารถเปลี่ยนการตั้งค่าสำหรับเซสชันปัจจุบันของคุณได้ดังนี้:

Set-ExecutionPolicy -Scope Process Unrestricted

คุณสามารถสร้างและใช้ห้องนิรภัยรหัสผ่านในเครื่องและระยะไกลได้

คำสั่งด้านล่างแสดงรายการรหัสผ่านที่ลงทะเบียนไว้สำหรับผู้ใช้ปัจจุบัน:

Get-SecretVault

PowerShell SecretManagement Module:จัดการข้อมูลประจำตัวและความลับอย่างปลอดภัย

สร้างรหัสผ่านหลักเพื่อเข้าถึง SecretStore Vault ของคุณ:

Get-SecretStoreConfiguration

หากคุณลืมรหัสผ่านมาสเตอร์ SecretStore Vault คุณจะไม่สามารถเข้าถึงข้อมูลที่จัดเก็บไว้ในนั้นได้

โดยค่าเริ่มต้น การตั้งค่าต่อไปนี้จะกำหนดว่าใครและวิธีเข้าถึงที่เก็บรหัสผ่าน:

  • ขอบเขตCurrentUser (เฉพาะผู้ใช้ปัจจุบันเท่านั้นที่สามารถเข้าถึง SecretStore)
  • การตรวจสอบสิทธิ์Password (เข้าถึงห้องนิรภัยโดยใช้รหัสผ่านหลัก)
  • PasswordTimeout900 – ระยะเวลาของเซสชัน (เป็นวินาที) ในระหว่างที่คุณไม่จำเป็นต้องป้อนรหัสผ่านหลักอีกครั้ง คุณสามารถขยายระยะเวลาเซสชันได้:Set-SecretStoreConfiguration -PasswordTimeout 1200
  • ปฏิสัมพันธ์Prompt (ไม่ว่าจะใส่รหัสผ่านหลักเมื่อทำการเปลี่ยนแปลง)

PowerShell SecretManagement Module:จัดการข้อมูลประจำตัวและความลับอย่างปลอดภัย

หากต้องการปิดใช้งานคำขอรหัสผ่านหลักเพื่อเข้าถึงห้องนิรภัยลับ (ไม่แนะนำ) ให้ตั้งค่า Authentication = None :

Set-SecretStoreConfiguration -Authentication None

หากต้องการเปลี่ยนรหัสผ่านหลัก ให้ใช้ Set-SecretStorePassword cmdlet

ใน Windows ที่เก็บรหัสผ่านภายในเครื่องจะอยู่ในโฟลเดอร์โปรไฟล์ผู้ใช้ %LOCALAPPDATA%\Microsoft\PowerShell\secretmanagement .

PowerShell SecretManagement Module:จัดการข้อมูลประจำตัวและความลับอย่างปลอดภัย

ขออภัย คุณไม่สามารถใช้โมดูลการจัดการความลับสำหรับบัญชีบริการที่มีการจัดการ (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'

โปรดใช้ความระมัดระวังเมื่อป้อนข้อมูลส่วนตัวเป็นข้อความธรรมดาในคอนโซล PowerShell เนื่องจากข้อมูลดังกล่าวจะถูกบันทึกไว้ในประวัติคำสั่ง PowerShell

คุณสามารถแสดงรายการของรายการในห้องนิรภัย:

Get-SecretInfo

PowerShell SecretManagement Module:จัดการข้อมูลประจำตัวและความลับอย่างปลอดภัย

ใน 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 SecretManagement Module:จัดการข้อมูลประจำตัวและความลับอย่างปลอดภัย

การใช้รหัสผ่านที่บันทึกไว้จาก 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

PowerShell SecretManagement Module:จัดการข้อมูลประจำตัวและความลับอย่างปลอดภัย

จากนั้นลงทะเบียนไฟล์ 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

PowerShell SecretManagement Module:จัดการข้อมูลประจำตัวและความลับอย่างปลอดภัย

ป้อนรหัสผ่านหลักเพื่อเข้าถึง KeePass vault หากคุณป้อนรหัสผ่านถูกต้อง คำสั่งจะส่งกลับ True .

จากนั้นแสดงรายการรหัสผ่านที่บันทึกไว้ในฐานข้อมูล KeePass:

Get-SecretInfo -Vault KeePassDB

PowerShell SecretManagement Module:จัดการข้อมูลประจำตัวและความลับอย่างปลอดภัย

วิธีบันทึกความลับใหม่ใน KeePass:

Set-Secret -Vault KeePassDB -Name "ILO_adm" -Secret (Get-Credential woshub\ILO_adm)

ในทำนองเดียวกัน คุณสามารถเชื่อมต่อโซลูชันที่เก็บรหัสผ่านยอดนิยมอื่นๆ และใช้ใน PowerShell ได้