在下列步驟中,您將使用 Azure 原則將 SSH 狀態控制設定部署至測試 Linux VM。
如需背景和概念參考,請參閱 什麼是 SSH 狀態控件?。
如需更進階的逐步解說,請參閱 使用 SSH 狀態控制管理 sshd 設定。
如果您沒有 Azure 帳戶,您可以 建立免費試用。
謹慎
- 本快速入門示範如何套用適用於新可處置測試機器的限制性 sshd 組態。 如果您要將此設定套用至其他計算機,您可以自行鎖定。嘗試 SSH 狀態控制件之類的安全性控制件時,請使用隔離的沙箱環境,即使原則指派發生錯誤也不會重新設定非預期的機器。
先決條件
嘗試本文中的步驟之前,請確定您已具備:
- 您有權建立資源群組、原則指派和虛擬機的 Azure 帳戶。
- 與 Azure 互動的慣用環境,例如:
-
Azure Cloud Shell (建議)
- 注意:範例會使用bash模式。 讀者可能會將範例調整為其他殼層環境,包括 PowerShell。
-
或 已安裝並登入 Azure CLI 的殼層環境
- 在網頁瀏覽器中 或Azure 入口網站
確認您已登入測試環境
使用入口網站中的帳戶資訊來查看您目前的內容。
- 您可以使用
az account show 來查看目前的內容。 若要登入或變更內容,請使用 az account login。
建立資源群組
此範例中 eastus 位置的選擇並不重要。 您可以使用任何可用的 Azure 位置。
az group create --name sshdemo01 --location eastus
將原則指派給資源群組
本快速入門會使用內建原則定義 Configure SSH Posture Control on Linux machines套用稽核和設定行為。
範例指派主要依賴 SSH 狀態控制項預設值(例如埠 22,不允許根存取),且自定義有限(橫幅文字)。
- 流覽至 [原則],然後流覽至 [定義]
- 篩選清單以尋找並選取 [
Configure SSH Posture Control on Linux machines
- 從原則定義頁面,按兩下 [指派]
- 在原則指派工作流程中
- 選擇新的空白資源群組(稍早建立)作為範圍。
- 選擇性:選擇此原則指派的名稱。 根據預設,會使用原則定義的名稱。
- 選擇性:在 [參數] 索引標籤上,覆寫預設值,例如 “banner” 值。
- 注意:規則 'port' 應設定為單一值,以確保稽核和設定案例的適當功能和合規性。
- 完成原則指派的建立。
# Note this example is from a bash shell. Other shells may require different handling of special characters and variables
RG_ID=$(az group show --resource-group sshdemo01 --query id --output tsv)
az policy assignment create --policy "e22a2f03-0534-4d10-8ea0-aa25a6113233" --name "Configure SSH Posture test machine" --scope "$RG_ID" --params '{"banner":{"value":"CONTOSO SYSTEMS. Unauthorized use will be prosecuted."}}' --mi-system-assigned --role "Guest Configuration Resource Contributor" --identity-scope "$RG_ID" --location eastus
謹慎
無論您是使用入口網站或 CLI,在繼續之前,請先檢查您剛才建立的原則指派範圍。 如果範圍錯誤地設定為稍早建立的新空白資源群組以外的任何專案,則應該立即更正,以避免混淆非預期的機器。
建立測試 VM 並準備電腦設定
- 建立 Linux 虛擬機
- 如果尚未存在,請新增系統指派的身分識別
- 新增電腦組態擴充功能(在入口網站中標示為適用於Linux的 Azure Machine Configuration)
建立具有系統指派身分識別的Linux VM
az vm create --name sshdemo01 --resource-group sshdemo01 --image Ubuntu2204 --assign-identity [system]
安裝計算機設定代理程式,作為 Azure VM 擴充功能
az vm extension set --resource-group sshdemo01 --vm-name sshdemo01 --name ConfigurationForLinux --publisher Microsoft.GuestConfiguration --enable-auto-upgrade
提示
在本快速入門中,機器設定的必要條件(VM 具有受控識別和代理程序擴充功能)會在建立 VM 期間直接解決。 您可以透過 Deploy prerequisites to enable Guest Configuration policies on virtual machines 內建原則方案,大規模滿足這些必要條件。
繼續前休息一下
現在會自動執行數個步驟。 這些步驟可能需要幾分鐘的時間。 因此,請至少等候 15 分鐘,然後再繼續進行。
觀察結果
使用下列步驟,您可以看到:
- 有多少部機器符合規範(或不符合)
- 在生產規模上特別有用,您可能會有數千部機器
- 哪些機器符合規範(或不符合)
- 針對指定的電腦,哪些個別規則符合規範(或不符合)
下列 Azure CLI 範例來自 bash 環境。 若要使用另一個殼層環境,您可能需要調整行尾行為、引號規則、字元逸出等範例。
有多少部機器符合規範(或不符合):
QUERY="guestconfigurationresources
| where name contains 'LinuxSshServerSecurityBaseline'
| extend complianceStatus = tostring(properties.complianceStatus)
| summarize machineCount = count() by complianceStatus
"
az graph query -q "$QUERY" --query data --output table
# Sample output from an environment with two machines:
#
# complianceStatus machineCount
# ---------------- ------------
# Pending 1
# Compliant 1
哪些機器符合規範(或不符合):
QUERY="guestconfigurationresources
| where name contains 'LinuxSshServerSecurityBaseline'
| project
machine = split(properties.targetResourceId,'/')[-1],
complianceStatus = properties.complianceStatus,
lastComplianceStatusChecked = properties.lastComplianceStatusChecked
"
az graph query -q "$QUERY" --query data --output table
# Sample output from an environment with two machines:
#
# machine complianceStatus lastComplianceStatusChecked
# ------- ---------------- ---------------------------
# sshdemovm01 Compliant 2/15/2024 11:07:21 PM
# sshdemovm02 Pending 1/1/0001 12:00:00 AM
針對指定的計算機,哪些個別規則符合規範(或不符合):
QUERY="GuestConfigurationResources
| where name contains 'LinuxSshServerSecurityBaseline'
| project report = properties.latestAssignmentReport,
machine = split(properties.targetResourceId,'/')[-1],
lastComplianceStatusChecked=properties.lastComplianceStatusChecked
| mv-expand report.resources
| project machine,
rule = report_resources.resourceId,
ruleComplianceStatus = report_resources.complianceStatus,
ruleComplianceReason = report_resources.reasons[0].phrase,
lastComplianceStatusChecked
"
az graph query -q "$QUERY" --query data --output table
# Sample output from an environment where audit-and-configure behavior was selected, such that all settings became compliant:
#
# machine rule ruleComplianceStatus ruleComplianceReason
# ------- --------------- ------ ------
# sshdemovm01 Ensure permissions on /etc/ssh/sshd_config are configured true Access to '/etc/ssh/sshd_config' matches required ...
# sshdemovm01 Ensure SSH is configured to meet best practices (protocol 2) true 'Protocol 2' is found uncommented in /etc/ssh/sshd_config
# sshdemovm01 Ensure SSH is configured to ignore rhosts true The sshd service reports that 'ignorerhosts' is set to 'yes'
# sshdemovm01 Ensure SSH LogLevel is set to INFO true The sshd service reports that 'loglevel' is set to 'INFO'
# sshdemovm01 Ensure SSH MaxAuthTries is configured true The sshd service reports that 'maxauthtries' is set to '6'
# sshdemovm01 Ensure allowed users for SSH access are configured true The sshd service reports that 'allowusers' is set to '*@*'
# sshdemovm01 Ensure denied users for SSH are configured true The sshd service reports that 'denyusers' is set to 'root'
# sshdemovm01 Ensure allowed groups for SSH are configured true The sshd service reports that 'allowgroups' is set to '*'
# sshdemovm01 Ensure denied groups for SSH are configured true The sshd service reports that 'denygroups' is set to 'root'
# sshdemovm01 Ensure SSH host-based authenticationis disabled true The sshd service reports that 'hostbasedauthentication' is ...
# ...
選擇性:新增更多測試機器以體驗調整規模
在本文中,原則已指派給資源群組,該群組一開始是空的,然後取得一個 VM。 雖然這會示範系統端對端運作,但不會提供大規模作業的感覺。 例如,在原則指派合規性檢視中,一部機器的餅圖可能會感到人為。
請考慮手動或透過自動化,將更多測試機器新增至資源群組。 這些可能是 Azure VM 或已啟用 Arc 的機器。 當您看到這些機器符合規範(或甚至失敗)時,您可以獲得更敏銳的 SSH 狀態控制大規模運作感。
選擇性:手動檢查測試計算機以確認結果
開始使用 SSH 狀態控制等新功能時,手動檢查頻外的結果可能很實用。 這有助於建立信賴度和清楚度。 例如,本文中的步驟應該會導致測試 VM 上的修改登入橫幅設定。 您可以嘗試透過 SSH 連線到電腦以查看橫幅,或檢查sshd_config檔案來確認此情況。
清除資源
若要避免持續產生費用,請考慮刪除本文中使用的資源群組。 例如,Azure CLI 命令會 az group delete --name "sshdemo01"
相關內容