Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Module PowerShell SecretManagement: Quản lý thông tin đăng nhập và bí mật an toàn

Microsoft gần đây đã phát hành module PowerShell SecretManagement rất hữu ích. Bạn có thể sử dụng nó để lưu trữ và sử dụng an toàn mật khẩu đã lưu (bí mật) trong script PowerShell của mình. Module bao gồm hai thành phần: SecretStore vault (kho mật khẩu mặc định), và SecretManagement (engine để truy cập các vault mật khẩu khác nhau). Cả vault SecretStore tích hợp sẵn và vault bí mật của bên thứ ba (như KeePass, LastPass, HashiCorp Vault, Azure Key Vault, Bitwarden, Windows Credential Manager, v.v.) đều được hỗ trợ. Sử dụng SecretManagement, bạn có thể lưu bất kỳ mật khẩu (thông tin đăng nhập) nào vào vault bí mật và truy xuất chúng bất cứ lúc nào. Bạn cũng có thể lưu khóa giấy phép, khóa truy cập và thông tin nhạy cảm khác (kiểu đối tượng Hashtable, Byte, String, SecureString và PSCredential được hỗ trợ).

Cài đặt Module Secret Management

Module SecretManagement yêu cầu Windows PowerShell phiên bản 5.1 hoặc PowerShell Core 6.x, 7.x.

Để cài đặt SecretManagement bằng trình quản lý gói NuGet, hãy chạy lệnh dưới đây:

Install-Module -Name Microsoft.PowerShell.SecretManagement

Để cài đặt vault SecretStore mặc định do Microsoft cung cấp, hãy chạy lệnh sau:

Install-Module -Name Microsoft.PowerShell.SecretStore

Module PowerShell SecretManagement: Quản lý thông tin đăng nhập và bí mật an toàn

Để hiển thị danh sách các cmdlet có sẵn trong module, sử dụng các lệnh này:

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

Module PowerShell SecretManagement: Quản lý thông tin đăng nhập và bí mật an toàn

Tạo kho mật khẩu (SecretStore Vault) qua PowerShell

Trước hết, tạo vault bí mật cục bộ. Tôi sẽ đặt tên là MyDomainPassdb và làm cho nó trở thành kho mật khẩu mặc định.

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

Nếu cài đặt chính sách thực thi script PowerShell của bạn ngăn module chạy, bạn có thể thay đổi cài đặt cho phiên hiện tại như sau:

Set-ExecutionPolicy -Scope Process Unrestricted

Bạn có thể tạo và sử dụng cả vault mật khẩu cục bộ và từ xa.

Lệnh dưới đây hiển thị danh sách các vault mật khẩu đã đăng ký cho người dùng hiện tại:

Get-SecretVault

Module PowerShell SecretManagement: Quản lý thông tin đăng nhập và bí mật an toàn

Tạo mật khẩu chính để truy cập SecretStore Vault của bạn:

Get-SecretStoreConfiguration

Nếu bạn quên mật khẩu chính SecretStore Vault, bạn sẽ không thể truy cập dữ liệu được lưu trữ trong đó.

Mặc định, các cài đặt sau xác định ai và cách nào có thể truy cập kho mật khẩu:

  • Scope – CurrentUser (chỉ người dùng hiện tại có thể truy cập SecretStore)
  • Authentication – Password (truy cập vault bằng mật khẩu chính)
  • PasswordTimeout – 900 – thời lượng phiên (giây) mà bạn không cần nhập lại mật khẩu chính, Bạn có thể kéo dài độ dài phiên: Set-SecretStoreConfiguration -PasswordTimeout 1200
  • Interaction – Prompt (có nhắc nhập mật khẩu chính khi thực hiện thay đổi hay không)

Module PowerShell SecretManagement: Quản lý thông tin đăng nhập và bí mật an toàn

Để tắt yêu cầu mật khẩu chính để truy cập vault bí mật (không khuyến khích), đặt Authentication = None:

Set-SecretStoreConfiguration -Authentication None

Để thay đổi mật khẩu chính, sử dụng cmdlet Set-SecretStorePassword.

Trong Windows, kho mật khẩu cục bộ nằm trong thư mục hồ sơ người dùng %LOCALAPPDATA%\Microsoft\PowerShell\secretmanagement.

Module PowerShell SecretManagement: Quản lý thông tin đăng nhập và bí mật an toàn

Rất tiếc, bạn không thể sử dụng module Secret Management cho Managed Service Accounts (MSA/gMSA) vì không có hồ sơ được tạo cho chúng.

Quản lý thông tin đăng nhập đã lưu bằng Module Secret Management

Cmdlet Set-Secret được sử dụng để thêm bí mật kiểu SecureString vào vault mật khẩu. Chỉ định tên vault và tên mục:

Set-Secret -Vault MyDomainPassdb -Name user1

Nhập mật khẩu (bí mật) bạn muốn lưu trong kho.

Hoặc, bạn có thể lưu giá trị được bảo vệ như sau (ví dụ: khóa GitHub):
Set-Secret -Vault MyDomainPassdb -Name MY_GITHUB_TOKEN -Secret 'GitHub_AUTH_API_Token'

Hãy chú ý khi nhập thông tin riêng tư dưới dạng plain text trong console PowerShell, vì nó được lưu trong lịch sử lệnh PowerShell.

Bạn có thể hiển thị danh sách mục trong vault bí mật:

Get-SecretInfo

Module PowerShell SecretManagement: Quản lý thông tin đăng nhập và bí mật an toàn

Trong PowerShell 7.x, bạn có thể hiển thị giá trị được bảo vệ từ vault mật khẩu dưới dạng plain text bằng tùy chọn –AsPlainText (cập nhật phiên bản PowerShell nếu cần):

Get-Secret -Vault MyDomainPassdb -Name user1| ConvertFrom-SecureString –AsPlainText

Trong hầu hết các trường hợp, bạn phải lưu cả tên người dùng và mật khẩu thay vì chỉ lưu mật khẩu khi làm việc trong mạng Windows. Trong trường hợp này, lưu thông tin đăng nhập dưới dạng đối tượng PSCredential. Bạn cũng có thể thêm metadata với mô tả của mục đã lưu.

Set-Secret -Vault MyDomainPassdb -Name adm_maxbak -Secret (Get-Credential) -Metadata @{description = "AD enterprise admin woshub.com"}

Nếu bạn không muốn nhập tên tài khoản trong cửa sổ Get-Credential, bạn có thể chỉ định nó như sau:

Set-Secret -Vault MyDomainPassdb -name adm_maxbak -Secret (get-credential woshub\adm_maxbak)

Đây là cách bạn có thể hiển thị danh sách mật khẩu đã lưu và mô tả của chúng:

Get-SecretInfo | Ft Name, Metadata

Module PowerShell SecretManagement: Quản lý thông tin đăng nhập và bí mật an toàn

Sử dụng mật khẩu đã lưu từ Secret Vault trong script PowerShell

Bây giờ bạn có thể sử dụng mật khẩu đã lưu trong script và lệnh PowerShell của mình. Ví dụ, một trong khách hàng của tôi đang sử dụng một chục tài khoản cho mỗi quản trị viên và các dịch vụ/nhiệm vụ khác nhau vì lý do bảo mật và bảo vệ tài khoản quản trị. Việc sử dụng cùng một mật khẩu bị cấm, mật khẩu được kiểm tra định kỳ. Quản trị viên thấy việc liên tục nhập các mật khẩu khác nhau rất nhàm chán.

Sử dụng module SecretManagement, bạn có thể lưu trữ an toàn mật khẩu của mình trong vault cục bộ và lấy chúng khi cần thiết.

Ví dụ, để kết nối với máy tính từ xa và chạy lệnh qua PowerShell Remoting, bạn có thể sử dụng mã sau:

Enter-PSSession -ComputerName mun-dc01 -Credential (Get-Secret -Vault MyDomainPassdb -Name adm_maxbak)

Cùng cách đó, bạn có thể kết nối Exchange hoặc Microsoft 365 (trước đây là Office 365) dễ dàng hơn:

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://mun-exch1.woshub.com/PowerShell/ -Authentication Kerberos -Credential (Get-Secret -Vault MyDomainPassdb -Name adm_ex_maxbak)

Hoặc kết nối tenant Azure AD của bạn:

Connect-AzureAD -Credential (Get-Secret -Vault MyDomainPassdb -Name azadm_ maxbak)

Hoặc chỉ lấy thông tin đăng nhập và lưu chúng vào biến PowerShell:

$Cred = Get-Secret -Vault MyDomainPassdb user1

Quản lý mật khẩu và bí mật KeePass với PowerShell

Bạn có thể sử dụng module SecretManagement để truy cập các vault mật khẩu phổ biến khác. Hãy xem cách truy cập mật khẩu đã lưu trong file KeePass (*.kdbx).

Trước hết, cài đặt module SecretManagement để tương tác với KeePass:

Install-Module -Name SecretManagement.KeePass

Module PowerShell SecretManagement: Quản lý thông tin đăng nhập và bí mật an toàn

Sau đó đăng ký file vault KeePass nằm trong hồ sơ người dùng của bạn:

Register-SecretVault -Name "KeePassDB" -ModuleName "SecretManagement.Keepass" -VaultParameters @{
Path = "C:\Users\maxbak\Documents\personal_creds.kdbx"
UseMasterPassword = $true
}

Để kiểm tra truy cập vào file KeePass, chạy lệnh:

Test-SecretVault -Name KeePassDB

Module PowerShell SecretManagement: Quản lý thông tin đăng nhập và bí mật an toàn

Nhập mật khẩu chính để truy cập vault KeePass. Nếu bạn nhập đúng mật khẩu, lệnh trả về True.

Sau đó hiển thị danh sách mật khẩu đã lưu trong cơ sở dữ liệu KeePass:

Get-SecretInfo -Vault KeePassDB

Module PowerShell SecretManagement: Quản lý thông tin đăng nhập và bí mật an toàn

Để lưu bí mật mới trong KeePass:

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

Cùng cách đó, bạn có thể kết nối bất kỳ giải pháp vault mật khẩu phổ biến nào khác và sử dụng nó trong PowerShell.