ค้นหาเว็บไซต์

ปลดล็อกความลับของ PowerShell


ดังนั้นฉันจึงเริ่มทดลองและพยายามทำสิ่งต่างๆ ให้มากขึ้นด้วยโมดูลการจัดการความลับจาก Microsoft ซึ่งตอนนี้โมดูลเหล่านั้นไม่อยู่ในสถานะก่อนเผยแพร่แล้ว คุณสามารถติดตั้งโมดูล Microsoft.PowerShell.SecretStore และ Microsoft.PowerShell.SecretManagement ได้ คุณจะต้องใช้ทั้งสองโมดูลจาก PowerShell Gallery คุณสามารถค้นหาโมดูลส่วนขยายที่สร้างบนโมดูล Microsoft สำหรับการทำงานร่วมกับ Key Vault หรือที่เก็บข้อมูลลับอื่นๆ เรียกใช้ find-module -tag secretmanagement เพื่อค้นหาโมดูลเพิ่มเติม แต่สิ่งที่ฉันจะพูดในวันนี้เกี่ยวข้องกับโมดูลของ Microsoft แม้ว่ามันอาจจะใช้ได้กับคุณกับโมดูลส่วนขยายใดๆ ความท้าทายคือการใช้โมดูลการจัดการความลับกับสคริปต์โปรไฟล์ PowerShell

ตัวแปรที่กำหนด

ในสคริปต์โปรไฟล์ PowerShell ของฉัน ฉันเรียกสคริปต์ที่กำหนดตัวแปรจำนวนหนึ่ง สิ่งเหล่านี้คือรายการที่ฉันใช้ตลอดทั้งวัน โดยมักจะใช้ร่วมกับ PSDefaultParameterValues สิ่งต่างๆ เช่น คีย์ API และโทเค็นที่บันทึกไว้ ฉันเคยเก็บค่าเหล่านี้ไว้ในไฟล์สคริปต์ แต่ตัดสินใจย้ายรายการเหล่านี้ไปยังที่เก็บข้อมูลลับโดยใช้โมดูลการจัดการความลับของ Microsoft ฉันแก้ไขสคริปต์เพื่อตั้งค่าตัวแปรโดยรับค่าจากร้านค้า

$foo = Get-Secret -name foo -vault Secrets -AsPlainText

เมื่อเปิดตัวเซสชัน PowerShell ใหม่ สิ่งนี้ได้ผล จนถึงจุดหนึ่ง ฉันจะเริ่ม PowerShell จากนั้นได้รับแจ้งให้ใส่รหัสผ่านห้องนิรภัย นี่ไม่ใช่ภาระใหญ่นัก แต่มีผลกระทบ

กำหนดการงาน

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

ฉันสามารถแก้ไขงานที่กำหนดเวลาไว้ไม่ให้โหลดโปรไฟล์ได้ แต่นั่นเป็นงานพิเศษมากมาย และบางทีงานที่กำหนดเวลาไว้ของฉัน ต้องการ โปรไฟล์ ฉันต้องปลดล็อกที่เก็บข้อมูลลับโดยทางโปรแกรมเพื่อให้สามารถกำหนดตัวแปรได้ นี่เป็นความท้าทายที่คุณเผชิญเมื่อพยายามรวมการจัดการความลับเข้ากับกระบวนการอัตโนมัติทุกประเภท

แยกรหัสผ่าน

ก่อนอื่น ฉันขอชี้ให้เห็นว่าแนวทางของฉัน ไม่ใช่ ทางออกเดียว หรือแม้แต่ทางออกที่ดีที่สุด เมื่อใดก็ตามที่คุณกำลังจัดการกับความลับหรือข้อมูลที่ละเอียดอ่อน จะมีความเสี่ยง ความท้าทาย และข้อแลกเปลี่ยนอยู่เสมอ ในสถานการณ์ของฉัน วิธีแก้ไขคือแยกรหัสผ่านห้องนิรภัยออกจากห้องนิรภัย โดยที่ฉันหมายถึง ฉันต้องการวิธีอื่นในการรับรหัสผ่านที่ไม่ต้องมีการโต้ตอบใดๆ

ฉันใช้รหัสผ่านห้องนิรภัยและเก็บไว้ในข้อความ CMS ที่มีการป้องกันโดยใช้ Protect-CMSMessage เอกสารสามารถอ่านได้บนคอมพิวเตอร์ที่มีคีย์ส่วนตัวสำหรับการเข้ารหัสเอกสารที่จำเป็นเท่านั้น ฉันบันทึกไฟล์ลงในไฟล์ข้อความโดยใช้ชื่อคอมพิวเตอร์เป็นส่วนหนึ่งของชื่อไฟล์

$vPass = "C:\scripts\$($env:computername)-vault.txt"
$myVault = "Secrets"

ปลดล็อกความลับ

ในสคริปต์โปรไฟล์ของฉัน ฉันสามารถป้องกันรหัสผ่าน แปลงกลับเป็นสตริงที่ปลอดภัยและใช้เพื่อปลดล็อคห้องนิรภัยได้

$q = Unprotect-CmsMessage -Path $vPass | ConvertTo-SecureString -AsPlainText -Force
Unlock-SecretStore -Password $q -PasswordTimeout 28800

ฉันทำงานที่บ้านและไม่ต้องกังวลเรื่องความปลอดภัยมากนัก ดังนั้นฉันจึงตั้งค่าการหมดเวลาของรหัสผ่านเป็น 8 ชั่วโมง ดังนั้นหากฉันต้องการเข้าถึงห้องนิรภัยในภายหลังในวันเดียวกัน ฉันไม่จำเป็นต้องป้อนรหัสผ่านอีกครั้ง เมื่อปลดล็อคข้อผิดพลาดแล้ว ฉันสามารถใช้ Get-Secret เพื่อดึงค่าและตั้งค่าตัวแปรของฉันได้ เนื่องจากชื่อลับของฉันเหมือนกับตัวแปรที่ฉันใช้ ฉันจึงสามารถวนซ้ำรายการได้ นี่คือข้อมูลโค้ดที่สมบูรณ์

$vPass = "C:\scripts\$($env:computername)-vault.txt"
$myVault = "Secrets"

if (Test-Path $vPass) {
    $q = Unprotect-CmsMessage -Path $vPass | ConvertTo-SecureString -AsPlainText -Force
    Unlock-SecretStore -Password $q -PasswordTimeout 28800

    $vars = "foo", "bar", "secret", "secret2", "apikey",  "gitkey","bitlykey"

    foreach ($var in $vars) {
         Set-Variable -Name $var -Value (Get-Secret -Name $var -Vault $myVault -AsPlainText) -Scope global
    }
    #secure string variables
    $bitly = Get-Secret -Name bitly -Vault $myVault
    $artd = Get-Secret -Name company -Vault $myVault
}

รหัสนี้ทำงานโดยเป็นส่วนหนึ่งของสคริปต์โปรไฟล์ของฉัน ฉันยังมีความลับบางอย่างที่ฉันต้องการเก็บไว้เป็นสตริงที่ปลอดภัย

สรุป

ด้วยโซลูชันนี้ ฉันสามารถจัดเก็บความลับไว้ในห้องนิรภัยการจัดการความลับและใช้ในโปรไฟล์ของฉันได้ และสามารถใช้โปรไฟล์กับงานที่กำหนดเวลาไว้ได้เช่นกัน ขึ้นอยู่กับคุณแล้วที่จะหาวิธีที่ดีที่สุดในการจัดเก็บและเรียกค้นรหัสผ่านห้องนิรภัยอย่างปลอดภัย

คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับโมดูลการจัดการข้อมูลลับได้โดยไปที่พื้นที่เก็บข้อมูลของโมดูล

บทความที่เกี่ยวข้อง