Azure下Ubuntu/RedHat的DSC v3部署及Bash脚本集成咨询
问题1:DSC v3与Azure Policy Guest Configuration的关系确认
DSC v3在Azure环境中针对Linux(Ubuntu/RedHat)节点的管理,确实主要通过Azure Policy Guest Configuration实现,这是官方推荐的集成方式:
- DSC v3配置会被打包为Guest Configuration包,上传至存储账户后,通过Azure Policy分发到目标VM
- Guest Configuration扩展会在VM上执行DSC配置,完成合规性审计或自动修正操作
- 虽然DSC v3支持本地部署,但在Azure生态中,Guest Configuration是大规模管理VM配置合规性的唯一官方集成通道
问题2:将自定义Bash脚本集成到DSC并发布到Azure
要把Falcon Sensor Agent ID检查脚本集成到DSC,可通过nxScript资源(属于nx模块,nxtools通常包含该资源)实现,具体步骤如下:
步骤1:修改DSC配置,嵌入Bash脚本逻辑
替换原有的nxService配置,或添加nxScript资源来执行自定义脚本逻辑。示例配置如下:
Configuration falconSensorWithAgentIdCheck { Import-DscResource -ModuleName 'nx' node localhost { # 自定义脚本:检查并修正Falcon Sensor Agent ID nxScript EnsureFalconSensorValidAgentId { # GetScript:返回当前状态(用于审计报告) GetScript = @' #!/bin/bash # 获取当前Agent ID CURRENT_AGENT_ID=$(falcon-sensor -g --agent-id 2>/dev/null || echo "unknown") # 返回JSON格式结果,供Guest Configuration审计使用 echo '{"CurrentAgentId": "'$CURRENT_AGENT_ID'"}' '@ # TestScript:检查是否合规(0=合规,非0=不合规) TestScript = @' #!/bin/bash # 替换为你的预期Agent ID或动态获取逻辑 EXPECTED_AGENT_ID="your-unique-agent-id" CURRENT_AGENT_ID=$(falcon-sensor -g --agent-id 2>/dev/null || echo "unknown") if [ "$CURRENT_AGENT_ID" == "$EXPECTED_AGENT_ID" ]; then exit 0 # 合规 else exit 1 # 不合规 fi '@ # SetScript:修正不合规状态(仅在Apply模式下执行) SetScript = @' #!/bin/bash EXPECTED_AGENT_ID="your-unique-agent-id" # 设置Agent ID(替换为实际的设置命令) falcon-sensor -s --agent-id "$EXPECTED_AGENT_ID" # 重启服务生效 systemctl restart falcon-sensor.service '@ } # 确保Falcon Sensor服务运行(依赖脚本执行完成) nxService ensureFalconSensorRunning { Name = 'falcon-sensor.service' State = 'running' Enabled = $true DependsOn = '[nxScript]EnsureFalconSensorValidAgentId' } } } # 生成MOF文件 falconSensorWithAgentIdCheck
步骤2:打包配置为Guest Configuration包
使用New-GuestConfigurationPackage打包生成的MOF文件,根据需求选择Type:
$params = @{ Name = 'falconSensorAgentIdCheck' Configuration = './falconSensorWithAgentIdCheck/localhost.mof' Type = 'Apply' # 审计场景用'Audit',自动修正场景用'Apply' Force = $true } New-GuestConfigurationPackage @params
步骤3:上传包到Azure存储账户
将生成的.zip包上传到Azure存储Blob(确保Blob可被Guest Configuration扩展访问,可设置为公开可读或使用SAS URL),获取包的URI。
步骤4:生成并发布Azure Policy
参考你原有的脚本,调整参数生成Policy定义并发布:
$uri = 'your-storage-blob-uri' # 替换为实际的包URI $guid = [guid]::NewGuid().ToString() $PolicyConfig = @{ PolicyId = $guid ContentUri = $uri DisplayName = 'Ensure Falcon Sensor has valid Agent ID' Description = 'Audit or enforce Falcon Sensor runs with the correct unique Agent ID on Linux VMs' Path = './' Platform = 'Linux' Mode = 'ApplyAndAutoCorrect' # 审计用'Audit',自动修正用'ApplyAndAutoCorrect' PolicyVersion = '1.0.0' } # 生成本地Policy JSON文件 New-GuestConfigurationPolicy @PolicyConfig -Verbose # 发布到Azure $JsonPath = './falconSensorAgentIdCheck_ApplyAndAutoCorrect.json' $PolicyJson = Get-Content -Path $JsonPath -Raw New-AzPolicyDefinition -Name 'falcon-sensor-agent-id-compliance' -Policy $PolicyJson -Verbose
关键注意事项
nxScript的三个脚本块(Get/Test/Set)必须是可执行的Bash脚本,TestScript需返回0表示合规,非0表示不合规- 若选择
Apply类型和ApplyAndAutoCorrect模式,需确保VM有足够权限执行SetScript中的命令(如修改Falcon配置、重启服务) - 存储Blob的URI必须能被Guest Configuration扩展访问,建议使用SAS URL或设置容器为公开读取
内容的提问来源于stack exchange,提问作者Thanos
相关产品推荐
相关产品推荐

