在以下步骤中,将使用 Azure Policy 将 SSH 状态控制设置部署到测试 Linux VM。
有关背景和概念性参考,请参阅 什么是 SSH 状态控制?。
有关更高级的演练,请参阅 使用 SSH 状态控制管理 sshd 设置。
如果没有 Azure 帐户,可以 创建免费试用版。
谨慎
- 本快速入门演示如何应用适用于新的可释放测试计算机的限制性 sshd 配置。 如果要将此配置应用于其他计算机,可以自行锁定。尝试安全控制(如 SSH 状态控制)时,请使用隔离的沙盒环境,这样即使策略分配中的错误也不会重新配置意外的计算机。
先决条件
在尝试本文中的步骤之前,请确保已具备:
- 有权创建资源组、策略分配和虚拟机的 Azure 帐户。
- 与 Azure 交互的首选环境,例如:
-
Azure Cloud Shell(建议)
- 注意:示例将使用 bash 模式。 读者可能会将示例适应其他 shell 环境,包括 PowerShell。
- 安装并登录 Azure CLI 或 自己的 shell 环境
- 在 Web 浏览器中 或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
- 在策略定义页中,单击“分配”
- 在策略分配工作流中
- 选择新的空资源组(之前创建)作为范围。
- 可选:为此策略分配选择名称。 默认情况下,使用策略定义的名称。
- 可选:在“参数”选项卡上,重写默认值,例如“横幅”值。
- 注意:规则“端口”应配置为单个值,以确保审核和配置方案的适当功能和符合性。
- 完成策略分配的创建。
# 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 计算机配置)
创建具有系统分配标识的 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 环境。 若要使用另一个 shell 环境,可能需要调整行尾行为、引号规则、字符转义等示例。
符合多少台计算机(或不合规):
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"
相关内容