মাইক্রোসফট সম্প্রতি একটি খুব কাজের SecretManagement PowerShell মডিউল রিলিজ করেছে। আপনি এটা ব্যবহার করে আপনার PowerShell স্ক্রিপ্টগুলিতে সেভ করা পাসওয়ার্ড (সিক্রেট) নিরাপদে সংরক্ষণ এবং ব্যবহার করতে পারেন। মডিউলটির দুটি কম্পোনেন্ট: একটি SecretStore vault (ডিফল্ট পাসওয়ার্ড স্টোর), এবং একটি 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
মাইক্রোসফট প্রদত্ত ডিফল্ট SecretStore ভল্ট ইনস্টল করতে নিচের কমান্ড চালান:
Install-Module -Name Microsoft.PowerShell.SecretStore

মডিউলে উপলব্ধ কমান্ডলেটের তালিকা দেখতে এই কমান্ডগুলো ব্যবহার করুন:
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
যদি আপনার PowerShell স্ক্রিপ্ট এক্সিকিউশন পলিসি মডিউল চালানোর অনুমতি না দেয়, তবে বর্তমান সেশনের জন্য সেটিংস পরিবর্তন করুন:
Set-ExecutionPolicy -Scope Process Unrestricted
আপনি লোকাল এবং রিমোট উভয় পাসওয়ার্ড ভল্ট তৈরি এবং ব্যবহার করতে পারেন।
নিচের কমান্ডটি করেন্ট ইউজারের জন্য রেজিস্টার করা পাসওয়ার্ড ভল্টের তালিকা দেখাবে:
Get-SecretVault

আপনার SecretStore Vault অ্যাক্সেস করার জন্য একটি মাস্টার পাসওয়ার্ড তৈরি করুন:
Get-SecretStoreConfiguration
আপনি যদি আপনার SecretStore Vault মাস্টার পাসওয়ার্ড ভুলে যান, তবে আপনি সেখানে সংরক্ষিত ডেটা অ্যাক্সেস করতে পারবেন না।
ডিফল্টভাবে নিচের সেটিংস নির্ধারণ করে কে এবং কীভাবে পাসওয়ার্ড স্টোর অ্যাক্সেস করতে পারবে:
- Scope –
CurrentUser(শুধু করেন্ট ইউজার SecretStore অ্যাক্সেস করতে পারবে) - Authentication –
Password(মাস্টার পাসওয়ার্ড ব্যবহার করে ভল্ট অ্যাক্সেস) - PasswordTimeout –
900— সেশনের अवধি (সেকেন্ডে) যার সময় মাস্টার পাসওয়ার্ড পুনরায় দরকার নয়। সেশন দৈর্ঘ্য বাড়াতে:Set-SecretStoreConfiguration -PasswordTimeout 1200 - Interaction –
Prompt(পরিবর্তন করার সময় মাস্টার পাসওয়ার্ড চাইবে কিনা)

সিক্রেট ভল্ট অ্যাক্সেস করার জন্য মাস্টার পাসওয়ার্ডের অনুরোধ নিষ্ক্রিয় করতে (প্রস্তাবিত নয়), Authentication = None সেট করুন:
Set-SecretStoreConfiguration -Authentication None
মাস্টার পাসওয়ার্ড পরিবর্তন করতে Set-SecretStorePassword কমান্ডলেট ব্যবহার করুন।
উইন্ডোজে, একটি লোকাল পাসওয়ার্ড স্টোর ইউজার প্রোফাইল ফোল্ডারে অবস্থিত: %LOCALAPPDATA%\Microsoft\PowerShell\secretmanagement।

দুর্ভাগ্যবশত, Secret Management মডিউল Managed Service Accounts (MSA/gMSA) এর জন্য ব্যবহার করা যায় না, কারণ তাদের জন্য প্রোফাইল তৈরি হয় না।
Secret Management মডিউল ব্যবহার করে সংরক্ষিত ক্রেডেনশিয়াল ম্যানেজ করা
Set-Secret কমান্ডলেট ব্যবহার করে পাসওয়ার্ড ভল্টে SecureString টাইপের সিক্রেট যোগ করা হয়। ভল্টের নাম এবং এন্ট্রির নাম নির্দিষ্ট করুন:
Set-Secret -Vault MyDomainPassdb -Name user1
স্টোরে সংরক্ষণ করতে চাওয়া পাসওয়ার্ড (সিক্রেট) দিন।
অথবা, একটি প্রোটেক্টেড ভ্যালু এভাবে সংরক্ষণ করুন (যেমন, GitHub কী):
Set-Secret -Vault MyDomainPassdb -Name MY_GITHUB_TOKEN -Secret 'GitHub_AUTH_API_Token'
PowerShell কনসোলে প্লেইন টেক্সট হিসেবে প্রাইভেট ইনফোrmেশন দিয়ে সময় সতর্ক থাকুন, কারণ এটি PowerShell কমান্ড হিস্টরিতে সংরক্ষিত হয়।
সিক্রেট ভল্টের এন্ট্রিগুলোর তালিকা দেখতে:
Get-SecretInfo

PowerShell 7.x-এ, আপনি পাসওয়ার্ড ভল্ট থেকে প্রোটেক্টেড ভ্যালু প্লেইন টেক্সট হিসেবে দেখতে –AsPlainText অপশন ব্যবহার করতে পারেন (প্রয়োজনে PowerShell ভার্সন আপডেট করুন):
Get-Secret -Vault MyDomainPassdb -Name user1| ConvertFrom-SecureString –AsPlainText
বেশিরভাগ কেসে, উইন্ডোজ নেটওয়ার্কে কাজ করার সময় শুধু পাসওয়ার্ড নয়, ইউজারনেম ও পাসওয়ার্ড দুটোই সংরক্ষণ করতে হয়। এই কেসে, ক্রেডেনশিয়াল 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 স্ক্রিপ্ট এবং কমান্ডগুলিতে সেভ করা পাসওয়ার্ড ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আমার এক ক্লায়েন্ট নিরাপত্তা এবং অ্যাডমিনিস্ট্রেটিভ অ্যাকাউন্ট সুরক্ষার কারণেই প্রতিটি অ্যাডমিন এবং বিভিন্ন সার্ভিস/টাস্কের জন্য আলাদা আলাদা অ্যাকাউন্ট ব্যবহার করে। একই পাসওয়ার্ড ব্যবহার নিষিদ্ধ, পাসওয়ার্ডগুলো নিয়মিত অডিট হয়। অ্যাডমিনিস্ট্রেটররা folyamত ভিন্ন পাসওয়ার্ড দিয়ে উক্তান হতে 파রিশ বলে।
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-এ ব্যবহার করতে পারেন।