您可以在运行时使用Patch Manager(AWS Systems Manager 中的一项工具)中的基准覆盖功能来定义修补首选项。通过指定包含一个带有补丁基准列表的 JSON 对象的 Amazon Simple Storage Service (Amazon S3) 存储桶来实施。该修补操作使用与主机操作系统匹配的 JSON 对象中提供的基准,而不是应用默认补丁基准中的规则。
重要
BaselineOverride
文件名不能包含以下字符:反引号 (`)、单引号 (')、双引号 (") 和美元符号 ($)。
除非补丁操作使用补丁策略,否则使用 BaselineOverride
参数不会覆盖参数中提供的基准的补丁合规性。输出结果记录在来自 Run Command(AWS Systems Manager 中的一项工具)的标准输出日志中。结果仅打印标记为 NON_COMPLIANT
的软件包。这意味着软件包被标记为 Missing
、 Failed
、 InstalledRejected
或者 InstalledPendingReboot
。
但是,当补丁操作使用补丁策略时,系统会传递关联的 S3 存储桶中的覆盖参数,并更新托管式节点的合规性值。有关补丁策略的更多信息,请参阅 Quick Setup 中的补丁策略配置。
使用快照 ID 的补丁基准覆盖,或者安装覆盖列表参数
在两种情况下,补丁基准覆盖具有值得注意的行为。
同时使用基准覆盖和快照 ID
快照 ID 可确保特定修补命令中的所有托管式节点都应用相同的内容。例如,如果您一次修补 1000 个节点,则补丁相同。
当同时使用快照 ID 和补丁基准覆盖时,快照 ID 优先于补丁基准覆盖。仍将使用基准覆盖规则,但只会对其进行评估一次。在前面的示例中,1000 个托管式节点中的补丁仍始终相同。如果在修补操作的中程,您将引用的 S3 存储桶中的 JSON 文件更改为不同的内容,应用的补丁仍将保持不变。这是因为提供了快照 ID。
同时使用基准覆盖和安装覆盖列表
您不能同时使用这两个参数。如果提供了两个参数,则修补文档将失败,并且不会在托管式节点上执行任何扫描或安装。
代码示例
以下 Python 代码示例说明了如何生成补丁基准覆盖。
import boto3
import json
ssm = boto3.client('ssm')
s3 = boto3.resource('s3')
s3_bucket_name = 'my-baseline-override-bucket'
s3_file_name = 'MyBaselineOverride.json'
baseline_ids_to_export = ['pb-0000000000000000', 'pb-0000000000000001']
baseline_overrides = []
for baseline_id in baseline_ids_to_export:
baseline_overrides.append(ssm.get_patch_baseline(
BaselineId=baseline_id
))
json_content = json.dumps(baseline_overrides, indent=4, sort_keys=True, default=str)
s3.Object(bucket_name=s3_bucket_name, key=s3_file_name).put(Body=json_content)
这将产生类似下面的补丁基准覆盖。
[
{
"ApprovalRules": {
"PatchRules": [
{
"ApproveAfterDays": 0,
"ComplianceLevel": "UNSPECIFIED",
"EnableNonSecurity": false,
"PatchFilterGroup": {
"PatchFilters": [
{
"Key": "PRODUCT",
"Values": [
"*"
]
},
{
"Key": "CLASSIFICATION",
"Values": [
"*"
]
},
{
"Key": "SEVERITY",
"Values": [
"*"
]
}
]
}
}
]
},
"ApprovedPatches": [],
"ApprovedPatchesComplianceLevel": "UNSPECIFIED",
"ApprovedPatchesEnableNonSecurity": false,
"GlobalFilters": {
"PatchFilters": []
},
"OperatingSystem": "AMAZON_LINUX_2",
"RejectedPatches": [],
"RejectedPatchesAction": "ALLOW_AS_DEPENDENCY",
"Sources": []
},
{
"ApprovalRules": {
"PatchRules": [
{
"ApproveUntilDate": "2021-01-06",
"ComplianceLevel": "UNSPECIFIED",
"EnableNonSecurity": true,
"PatchFilterGroup": {
"PatchFilters": [
{
"Key": "PRODUCT",
"Values": [
"*"
]
},
{
"Key": "CLASSIFICATION",
"Values": [
"*"
]
},
{
"Key": "SEVERITY",
"Values": [
"*"
]
}
]
}
}
]
},
"ApprovedPatches": [
"open-ssl*"
],
"ApprovedPatchesComplianceLevel": "UNSPECIFIED",
"ApprovedPatchesEnableNonSecurity": false,
"GlobalFilters": {
"PatchFilters": []
},
"OperatingSystem": "CENTOS",
"RejectedPatches": [
"python*"
],
"RejectedPatchesAction": "ALLOW_AS_DEPENDENCY",
"Sources": []
}
]