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 इंटीग्रेशन का एक उदाहरण।
Secret Management मॉड्यूल की इंस्टॉलेशन
SecretManagement मॉड्यूल के लिए Windows PowerShell संस्करण 5.1 या PowerShell Core 6.x, 7.x आवश्यक है।
NuGet पैकेज मैनेजर का उपयोग करके SecretManagement इंस्टॉल करने के लिए, नीचे दी गई कमांड चलाएं:
Install-Module -Name Microsoft.PowerShell.SecretManagement
Microsoft द्वारा प्रदान किए गए डिफ़ॉल्ट SecretStore वॉल्ट को इंस्टॉल करने के लिए, निम्न कमांड चलाएं:
Install-Module -Name Microsoft.PowerShell.SecretStore

मॉड्यूल में उपलब्ध cmdlets की सूची प्रदर्शित करने के लिए, इन कमांड्स का उपयोग करें:
Get-Command -Module Microsoft.PowerShell.SecretManagement
Get-Command -Module Microsoft.PowerShell.SecretStore

PowerShell के माध्यम से पासवर्ड स्टोर (SecretStore वॉल्ट) बनाएं
सबसे पहले, एक लोकल सीक्रेट वॉल्ट बनाएं। मैं इसे MyDomainPassdb नाम दूंगा और इसे डिफ़ॉल्ट पासवर्ड स्टोर बनाऊंगा।
Register-SecretVault -Name MyDomainPassdb -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault
यदि आपकी PowerShell स्क्रिप्ट एक्जीक्यूशन पॉलिसी की सेटिंग्स मॉड्यूल को चलाने से रोकती हैं, तो आप वर्तमान सत्र के लिए सेटिंग्स को निम्न प्रकार से बदल सकते हैं:
Set-ExecutionPolicy -Scope Process Unrestricted
आप लोकल और रिमोट दोनों पासवर्ड वॉल्ट्स बना और उपयोग कर सकते हैं।
नीचे दी गई कमांड वर्तमान उपयोगकर्ता के लिए रजिस्टर्ड पासवर्ड वॉल्ट्स की सूची प्रदर्शित करती है:
Get-SecretVault

अपने SecretStore वॉल्ट तक पहुंचने के लिए एक मास्टर पासवर्ड बनाएं:
Get-SecretStoreConfiguration
यदि आप अपना SecretStore वॉल्ट मास्टर पासवर्ड भूल जाते हैं, तो आप इसमें स्टोर डेटा तक पहुंच नहीं पाएंगे।
डिफ़ॉल्ट रूप से, निम्न सेटिंग्स निर्धारित करती हैं कि कौन और कैसे पासवर्ड स्टोर्स तक पहुंच सकता है:
- Scope –
CurrentUser(केवल वर्तमान उपयोगकर्ता SecretStore तक पहुंच सकता है) - Authentication –
Password(मास्टर पासवर्ड का उपयोग करके वॉल्ट तक पहुंच) - PasswordTimeout –
900— सत्र की अवधि (सेकंड में) जिसके दौरान आपको अपना मास्टर पासवर्ड पुनः दर्ज करने की आवश्यकता नहीं है। आप सत्र की लंबाई बढ़ा सकते हैं:Set-SecretStoreConfiguration -PasswordTimeout 1200 - Interaction –
Prompt(परिवर्तन करते समय मास्टर पासवर्ड दर्ज करने के लिए संकेत देना)

सीक्रेट वॉल्ट तक पहुंचने के लिए मास्टर पासवर्ड के अनुरोध को डिसेबल करने के लिए (अनुशंसित नहीं), Authentication = None सेट करें:
Set-SecretStoreConfiguration -Authentication None
मास्टर पासवर्ड बदलने के लिए, Set-SecretStorePassword cmdlet का उपयोग करें।
Windows में, एक लोकल पासवर्ड स्टोर उपयोगकर्ता प्रोफाइल फोल्डर %LOCALAPPDATA%\Microsoft\PowerShell\secretmanagement में स्थित होता है।

दुर्भाग्य से, आप Managed Service Accounts (MSA/gMSA) के लिए Secret Management मॉड्यूल का उपयोग नहीं कर सकते क्योंकि उनके लिए कोई प्रोफाइल नहीं बनाई जाती।
Secret Management मॉड्यूल का उपयोग करके सेव्ड क्रेडेंशियल्स प्रबंधित करना
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 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 स्क्रिप्ट्स में सेव्ड पासवर्ड्स का उपयोग करना
अब आप अपने 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
PowerShell के साथ KeePass पासवर्ड्स और सीक्रेट्स प्रबंधित करना
आप SecretManagement मॉड्यूल का उपयोग अन्य लोकप्रिय पासवर्ड वॉल्ट्स तक पहुंचने के लिए कर सकते हैं। आइए देखें कि KeePass फाइल (*.kdbx) में सेव्ड पासवर्ड्स तक कैसे पहुंचें।
सबसे पहले, KeePass के साथ इंटरैक्ट करने के लिए SecretManagement मॉड्यूल इंस्टॉल करें:
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 में उपयोग कर सकते हैं।