监管
第 1 章 监管
对于在私有云、多云和混合云环境中部署的工作负载,企业必须满足内部对软件工程、安全工程、弹性、安全性以及规范标准的要求。Red Hat Advanced Cluster Management for Kubernetes 监管功能为企业引进自己的安全策略提供了一个可扩展的策略框架。
继续阅读 Red Hat Advanced Cluster Management 监管框架的相关主题:
1.1. 策略控制器
策略控制器监控并报告集群是否合规。使用 Red Hat Advanced Cluster Management for Kubernetes 策略框架,使用支持的策略模板应用由这些控制器管理的策略。策略控制器管理 Kubernetes 自定义资源定义实例。
策略控制器检查策略违反情况,如果控制器支持强制功能,可以使集群状态合规。查看以下主题以了解有关以下 Red Hat Advanced Cluster Management for Kubernetes 策略控制器的更多信息:
重要: 只有配置策略控制器策略支持 enforce
功能。当策略控制器不支持 enforce
功能时,您必须手动修复策略。
1.1.1. Kubernetes 配置策略控制器
使用配置策略控制器来配置任何 Kubernetes 资源,并在集群中应用安全策略。配置策略控制器与本地 Kubernetes API 服务器通信,以便您可以获取集群中的配置列表。
在安装过程中,配置策略控制器是在受管集群上创建的。配置策略在 hub 集群上的策略的 policy-templates
字段中提供,并由监管框架传播到所选受管集群。
当配置策略控制器的 remediationAction
设置为 InformOnly
时,父策略不会强制执行配置策略,即使父策略中的 remediationAction
被设置为 enforce
。
如果您想将现有的 Kubernetes 清单放入到一个策略,则策略生成器是完成此任务的有用工具。
1.1.1.1. 配置策略示例
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-config spec: namespaceSelector: include: ["default"] exclude: [] matchExpressions: [] matchLabels: {} remediationAction: inform 1 customMessage: compliant: {} noncompliant: {} severity: low evaluationInterval: compliant: noncompliant: object-templates: 2 - complianceType: musthave objectDefinition: apiVersion: v1 kind: Pod metadata: name: pod spec: containers: - image: pod-image name: pod-name ports: - containerPort: 80 - complianceType: musthave objectDefinition: apiVersion: v1 kind: ConfigMap metadata: name: myconfig namespace: default data: testData: hello spec: ...
1.1.1.2. 配置策略 YAML 标
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 策略的名称。 |
| 没有指定命名空间的命名空间对象是必需的 |
决定对象要应用到的受管集群中的命名空间。 |
| 必填 |
指定当策略不合规时要执行的操作。使用以下参数值: |
| 选填 |
根据当前的合规性,使用本节配置配置策略发送的合规性消息,以使用指定的 Go 模板之一。您可以使用配置策略控制器中策略当前状态的 .Policy.status.relatedObjects[*].object
如果您设置了 |
| 选填 | 使用此字段为合规的配置策略配置自定义消息。UTF-8 编码的字符,包括 emoji 和外字符。 |
| 选填 | 使用此字段为不合规的配置策略配置自定义消息。UTF-8 编码字符以及 emoji 和外字符是支持的值。 |
| 必填 |
当策略不合规时,指定严重性。使用以下参数值: |
| 选填 |
指定处于特定合规状态时要评估的策略的频率。使用
当受管集群具有较低资源时,可以将评估间隔设置为长时间轮询间隔,以减少 Kubernetes API 和策略控制器上的 CPU 和内存使用情况。这是持续时间的格式。例如, |
| 选填 |
指定合规策略的评估频率。要启用前面的轮询行为,请将此参数设置为 |
| 选填 |
指定不合规策略的评估频率。要启用前面的轮询行为,请将此参数设置为 |
| 选填 |
用于控制器的 Kubernetes 对象数组(已定义或包含字段子集),以便与受管集群上的对象进行比较。注: 虽然 |
| 选填 |
用于使用原始 YAML 字符串设置对象模板。指定对象模板的条件,其中支持 if-else 语句和 {{- if eq .metadata.name "policy-grc-your-meta-data-name" }} replicas: 2 {{- else }} replicas: 1 {{- end }}
注: 虽然 |
| 必填 | 在受管集群中定义 Kubernetes 对象的所需状态。使用以下动词之一作为参数值:
|
| 选填 |
当将清单的 metadata 部分与集群中的对象比较时覆盖 |
| 选填 |
使用此参数指定是否和在哪里显示集群中的对象与策略中的
默认情况下,如果控制器没有检测区别中的敏感数据,则此参数被设置为 |
| 选填 |
描述在需要更新时删除和重新创建对象的时间。当您将对象设置为 |
| 必填 | 用于控制器的 Kubernetes 对象数组(完整定义或包含字段子集),以便与受管集群上的对象进行比较。 |
| 选填 | 决定在从受管集群中删除策略时是否清理与策略相关的资源。 |
1.1.1.3. 其他资源
如需更多信息,请参阅以下主题:
- 请参阅创建配置策略。
- 有关 hub 集群策略的详情,请参阅 Hub 集群策略框架。
-
请参阅
CM-Configuration-Management
目录获取使用NIST Special Publication 800-53 (Rev. 4) 的,被 Red Hat Advanced Cluster Management 支持的策略示例。 - 有关空运行支持的详情,请查看 Kubernetes 文档 Dry-run。
- 了解策略如何应用到您的 hub 集群,请参阅支持的策略以了解更多详细信息。
- 有关控制器的详情,请参阅策略控制器。
- 自定义策略控制器配置。请参阅策略控制器高级配置。
- 参阅清理由策略创建的资源文档中的有关清理资源及其他相关的内容。
- 请参阅策略生成器。
- 了解如何创建和自定义策略,请参阅监管仪表板。
- 请参阅模板处理。
1.1.2. 证书策略控制器
您可以使用证书策略控制器来检测接近到期的证书,持续时间(小时)过长,或者包含无法与指定模式匹配的 DNS 名称。您可以将证书策略添加到 hub 集群上的策略的 policy-templates
字段中,它使用监管框架传播到所选受管集群。如需有关 hub 集群策略的更多详情,请参阅 Hub 集群策略框架 文档。
通过更新控制器策略中的以下参数来配置和自定义证书策略控制器:
-
minimumDuration
-
minimumCADuration
-
maximumDuration
-
maximumCADuration
-
allowedSANPattern
-
disallowedSANPattern
由于以下情况之一,您的策略可能会变得不合规:
- 当证书过期的时间少于最短持续时间,或超过最长时间时。
- 当 DNS 名称与指定模式匹配时。
证书策略控制器是在受管集群上创建的。控制器与本地 Kubernetes API 服务器通信,以获取包含证书的 secret 列表,并确定所有不合规的证书。
证书策略控制器不支持 enforce
功能。
注: 证书策略控制器仅在 tls.crt
键的 secret 中自动查找证书。如果 secret 存储在不同的键下,添加名为 certificate_key_name
的标签,其值为 key,使证书策略控制器知道在不同的键中。例如,如果 secret 包含存储在名为 sensor-cert.pem
的密钥的证书,请将以下内容添加到 secret: certificate_key_name: sensor-cert.pem
中。
1.1.2.1. 证书策略控制器 YAML 结构
查看证书策略的以下示例,并查看 YAML 表中的元素:
apiVersion: policy.open-cluster-management.io/v1 kind: CertificatePolicy metadata: name: certificate-policy-example spec: namespaceSelector: include: ["default"] exclude: [] matchExpressions: [] matchLabels: {} labelSelector: myLabelKey: myLabelValue remediationAction: severity: minimumDuration: minimumCADuration: maximumDuration: maximumCADuration: allowedSANPattern: disallowedSANPattern:
1.1.2.1.1. 证书策略控制器 YAML 表
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略的名称。 |
| 选填 |
在证书策略中, |
| 必填 |
决定监控 secret 的受管集群中的命名空间。
注: 如果证书策略控制器的 |
| 选填 | 指定识别对象属性。请参阅 Kubernetes 标签和选择器文档。 |
| 必填 |
指定您的策略的修复。将参数值设置为 |
| 选填 |
当策略不合规时,会告知用户的严重性。使用以下参数值: |
| 必填 |
如果没有指定值,则默认为 |
| 选填 |
设定一个与其他证书不同的值来标识可能很快过期的签名证书。如果没有指定参数值,则 CA 证书过期时间作为 |
| 选填 | 指定一个值来标识创建的时间超过您所期望的限制值的证书。参数使用 Golang 的持续时间格式。如需更多信息,请参阅 Golang 解析持续时间。 |
| 选填 | 创建一个值来标识创建的时间超过您定义的限制值的签名的证书。参数使用 Golang 的持续时间格式。如需更多信息,请参阅 Golang 解析持续时间。 |
| 选填 | 正则表达式,必须与您证书中定义的每个 SAN 条目匹配。这个参数会根据特征检查 DNS 名称。如需更多信息,请参阅 Golang 郑则表达式语法。 |
| 选填 | 正则表达式,不能与证书中定义的任何 SAN 条目匹配。这个参数会根据特征检查 DNS 名称。
注:要检测通配符证书,请使用以下 SAN 模式: 如需更多信息,请参阅 Golang 郑则表达式语法。 |
1.1.2.2. 证书策略示例
当在 hub 集群上创建证书策略控制器时,会在受管集群上创建复制策略。请参阅 policy-certificate.yaml
查看证书策略示例。
1.1.2.3. 其他资源
- 请参阅管理安全策略以了解更多详细信息。
- 如需更多主题,请参阅策略控制器介绍。
- 返回 证书简介。
1.1.3. 策略控制器
策略控制器将策略状态范围聚合到同一命名空间中定义的策略。创建策略集合(PolicySet
),以对同一命名空间中的策略进行分组。PolicySet
中的所有策略都放在选定集群中,方法是创建一个 PlacementBinding
来绑定 PolicySet
和 Placement
。策略集已部署到 hub 集群。
另外,当策略是多个策略集的一部分时,现有和新的 Placement
资源保留在策略中。当用户从策略集合中删除策略时,策略不会应用到在策略集合中选择的集群,但放置会保留。策略控制器只检查包括策略设置放置的集群中的违反情况。
备注:
- Red Hat Advanced Cluster Management 示例策略集使用集群放置。如果使用集群放置,请将包含策略的命名空间绑定到受管集群集。有关使用集群放置的详情,请参阅在集群中部署策略。
-
要使用
放置资源
,ManagedClusterSet
资源必须绑定到带有ManagedClusterSetBinding
资源的Placement
资源的命名空间。如需了解更多详细信息 ,请参阅创建 ManagedClusterSetBinding 资源。
在以下部分了解更多有关策略设置结构的详细信息:
1.1.3.1. 策略设置 YAML 结构
您的策略集可能类似以下 YAML 文件:
apiVersion: policy.open-cluster-management.io/v1beta1 kind: PolicySet metadata: name: demo-policyset spec: policies: - policy-demo --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: demo-policyset-pb placementRef: apiGroup: cluster.open-cluster-management.io kind: Placement name: demo-policyset-pr subjects: - apiGroup: policy.open-cluster-management.io kind: PolicySet name: demo-policyset --- apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: demo-policyset-pr spec: predicates: - requiredClusterSelector: labelSelector: matchExpressions: - key: name operator: In values: - local-cluster
1.1.3.2. 策略设置表
查看以下参数表以获详细信息:
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 必填 | 添加策略的配置详情。 |
| 选填 | 要在策略集合中分组的策略列表。 |
1.1.3.3. 策略示例
apiVersion: policy.open-cluster-management.io/v1beta1 kind: PolicySet metadata: name: pci namespace: default spec: description: Policies for PCI compliance policies: - policy-pod - policy-namespace status: compliant: NonCompliant placement: - placementBinding: binding1 placement: placement1 policySet: policyset-ps
1.1.3.4. 其他资源
- 请参阅 Red Hat OpenShift Platform Plus 策略集。
- 请参阅管理安全策略部分中的创建策略部分。
-
另外,查看 stable
PolicySets
,这需要用于部署的 Policy Generator,PolicySets-table。
1.1.4. Operator 策略控制器
Operator 策略控制器允许您在集群中监控和安装 Operator Lifecycle Manager operator。使用 Operator 策略控制器来监控操作器的不同部分的健康状况,并指定如何自动处理对 Operator 的更新。
您还可以使用监管框架将 Operator 策略分发到受管集群,并将策略添加到 hub 集群上的策略的 policy-templates
字段中。
您还可以使用 operator 策略的 operatorGroup
和 subscription
字段中的模板值。如需更多信息,请参阅模板处理。
1.1.4.1. 先决条件
- Operator Lifecycle Manager 必须在受管集群中可用。这在 Red Hat OpenShift Container Platform 中默认启用。
- 需要的访问权限:集群管理员
1.1.4.2. Operator 策略 YAML 表
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 必填 |
如果将 operator 策略的 |
| 选填 |
默认情况下,如果没有指定 |
| 必填 |
指定集群上 Operator 的所需状态。如果设置为 |
| 选填 |
当您强制定义 |
| 必填 | 定义创建 operator 订阅的配置。在以下字段中添加信息以创建 operator 订阅。如果没有条目,会为几个项目选择默认选项:
|
| 选填 |
使用此参数定义与操作器关联的特定场景的合规性行为。您可以单独设置以下选项,其中支持的值为
|
| 必填 |
如果 |
| 选填 |
声明哪些 Operator 版本合规。如果字段为空,则集群中运行的任何版本都被视为合规。如果该字段不为空,则受管集群上的版本必须与列表中的一个版本匹配,以便策略兼容。如果策略被设置为 |
1.1.4.3. 其他资源
- 请参阅模板处理。
-
如需了解更多详细信息 ,请参阅使用
OperatorPolicy
资源 安装 Operator。 - 请参阅 在断开连接的环境中管理 Operator 策略。
- 请参阅 OpenShift Container Platform 文档中的 Subscription 主题。
- 如需了解更多详细信息,请参阅 Operator Lifecycle Manager (OLM)。
- 如需有关 OLM 的常规信息,请参阅 在集群中添加 Operator 文档。
1.2. 模板处理
配置策略和操作器策略支持包含 Golang 文本模板。这些模板在 hub 集群或目标受管集群的运行时使用与该集群相关的配置解决。这可让您使用动态内容定义策略,并通知或强制实施对目标集群自定义的 Kubernetes 资源。
策略定义可以包含 hub 集群和受管集群模板。hub 集群模板首先在 hub 集群中处理,然后将带有已解析 hub 集群模板的策略定义传播到目标集群。受管集群中的控制器处理策略定义中的任何受管集群模板,然后强制执行或验证完全解析的对象定义。
模板必须符合 Golang 模板语言规范,并且从解析的模板生成的资源定义必须是有效的 YAML。如需更多与 Package 模板相关的信息,请参阅 Golang 文档。模板验证中的任何错误都将识别为策略违反情况。当您使用自定义模板功能时,这些值会在运行时被替换。
重要:
-
如果您使用 hub 集群模板传播 secret 或其他敏感数据,则敏感数据存在于 hub 集群上的受管集群命名空间中,以及分发该策略的受管集群中。模板内容在策略中扩展,策略不会由 OpenShift Container Platform ETCD 加密支持加密。要解决这个问题,请使用
fromSecret
或copySecretData
,它会自动加密 secret 中的值,或protect
加密其他值。 当您添加多行字符串值(如 certificate)时,始终在模板管道末尾添加
| toRawJson | toLiteral
语法来处理换行符。例如,如果您要从Secret
资源复制证书并将其包含在ConfigMap
资源中,则模板管道可能类似如下:ca.crt: '{{ fromSecret "openshift-config" "ca-config-map-secret" "ca.crt" | base64dec | toRawJson | toLiteral }}'
toRawJson
模板函数将输入值转换为 JSON 字符串,其中新行转义不会影响 YAML 结构。toLiteral
模板函数从输出中删除外部单引号。例如,当对键处理模板时:'{{ 'hello\nworld' | toRawJson }}'
模板管道,输出为key: '"hello\nworld"'
。键的输出:"{{ 'hello\nworld' | toRawJson | toLiteral }}'
template pipeline iskey: "hello\nworld"
.
如需 hub 集群和受管集群模板的比较,请参阅下表:
1.2.1. hub 集群和受管集群模板的比较
模板 | hub 集群 | 受管集群(managed cluster) |
---|---|---|
Syntax | golang 文本模板规格 | golang 文本模板规格 |
Delimiter | {{hub … hub}} | {{ … }} |
Context |
| 没有上下文变量 |
Access control |
默认情况下,您只能引用与
或者,您可以将
注: 服务帐户必须具有在 hub 集群模板中查找的任何资源 | 您可以引用集群中的任何资源。 |
Functions | 组模板功能,支持对 Kubernetes 资源和字符串操作的动态访问。如需更多信息,请参阅模板功能。有关查询限制,请参阅 Access control 行。
hub 集群上的
等效的调用可能使用以下语法: | 组模板功能,支持对 Kubernetes 资源和字符串操作的动态访问。如需更多信息,请参阅模板功能。 |
Function output storage |
在与受管集群同步前,模板功能的输出存储在 hub 集群上每个适用的受管集群命名空间中的 | 模板功能的输出不存储在策略相关的资源对象中。 |
策略元数据 |
| 没有上下文变量 |
Processing | 在 hub 集群的运行时,处理会在复制策略传播到集群的过程中进行。只有在创建或更新模板时,策略中的策略和 hub 集群模板才会在 hub 集群中处理。 | 在受管集群中进行处理。配置策略定期处理,它使用所引用资源中的数据自动更新解析的对象定义。每当引用的资源更改时,Operator 策略会自动更新。 |
Processing errors | hub 集群模板中的错误显示为策略应用到的受管集群中的违反情况。 | 受管集群模板中的错误会在发生违反情况的特定目标集群中以违反的形式显示。 |
继续阅读以下主题:
1.2.2. 模板功能
使用 {{hub … hub}}
分隔符或受管集群上的 {{ … }}
分隔符引用 Kubernetes 资源,如特定于资源和通用的模板功能。为方便起见,您可以使用特定于资源的功能,并使资源内容更易于访问。
1.2.2.1. 模板功能描述
如果您使用通用的函数 lookup
,它更为高级,请熟悉正在查找的资源的 YAML 结构。除了这些功能外,实用程序功能(如 base64enc
、base64dec
、indent
、autoindent
、toInt
、toBool
等等)。
要将模板符合 YAML 语法,您必须使用引号或块字符(|
或 > )在策略资源中将模板定义为字符串。这会导致解析的模板值也是字符串。要覆盖此功能,请使用
toInt
或 toBool
作为模板中的最终功能,以启动进一步处理,强制将值解释为整数或布尔值。
继续阅读以查看支持的一些自定义模板功能的描述和示例:
1.2.2.1.1. fromSecret
fromSecret
功能返回 secret 中给定 data 键的值。查看该功能的以下语法:
func fromSecret (ns string, secretName string, datakey string) (dataValue string, err error)
使用此功能时,请输入 Kubernetes Secret
资源的命名空间、名称和数据键。在 hub 集群模板中使用函数时,您必须使用用于策略的同一命名空间。如需了解更多详细信息,请参阅模板处理。
查看在目标集群中强制执行 Secret
资源的以下配置策略:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-fromsecret namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: apiVersion: v1 data: 1 USER_NAME: YWRtaW4= PASSWORD: '{{ fromSecret "default" "localsecret" "PASSWORD" }}' 2 kind: Secret 3 metadata: name: demosecret namespace: test type: Opaque remediationAction: enforce severity: low
重要: 当您添加多行字符串值时,证书始终会在模板管道末尾添加 | toRawJson | toLiteral
语法来处理换行符。例如,如果您要从 Secret
资源复制证书并将其包含在 ConfigMap
资源中,则模板管道可能类似如下:
ca.crt: '{{ fromSecret "openshift-config" "ca-config-map-secret" "ca.crt" | base64dec | toRawJson | toLiteral }}'
-
toRawJson
模板函数将输入值转换为 JSON 字符串,其中新行转义不会影响 YAML 结构。 -
toLiteral
模板函数从输出中删除外部单引号。例如,当对键处理模板时:'{{ 'hello\nworld' | toRawJson }}'
模板管道,输出为key: '"hello\nworld"'
。键的输出:"{{ 'hello\nworld' | toRawJson | toLiteral }}'
template pipeline iskey: "hello\nworld"
.
1.2.2.1.2. fromConfigmap
fromConfigMap
功能返回配置映射中给定 data 键的值。使用此功能时,请输入 Kubernetes ConfigMap
资源的命名空间、名称和数据键。您必须使用 hub 集群模板中的功能用于策略的同一命名空间。如需了解更多详细信息,请参阅模板处理。
查看该功能的以下语法:
func fromConfigMap (ns string, configmapName string, datakey string) (dataValue string, err Error)
查看在目标受管集群中强制执行 Kubernetes 资源的以下配置策略:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-fromcm-lookup namespace: test-templates spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: kind: ConfigMap 1 apiVersion: v1 metadata: name: demo-app-config namespace: test data: 2 app-name: sampleApp app-description: "this is a sample app" log-file: '{{ fromConfigMap "default" "logs-config" "log-file" }}' 3 log-level: '{{ fromConfigMap "default" "logs-config" "log-level" }}' 4 remediationAction: enforce severity: low
1.2.2.1.3. fromClusterClaim
fromClusterClaim
功能返回 ClusterClaim
资源中的 Spec.Value
的值。查看该功能的以下语法:
func fromClusterClaim (clusterclaimName string) (dataValue string, err Error)
查看在目标受管集群中强制执行 Kubernetes 资源的配置策略示例:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-clusterclaims 1 namespace: default spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: kind: ConfigMap apiVersion: v1 metadata: name: sample-app-config namespace: default data: 2 platform: '{{ fromClusterClaim "platform.open-cluster-management.io" }}' 3 product: '{{ fromClusterClaim "product.open-cluster-management.io" }}' version: '{{ fromClusterClaim "version.openshift.io" }}' remediationAction: enforce severity: low
1.2.2.1.4. lookup
lookup
功能将 Kubernetes 资源作为 JSON 兼容映射返回。使用此功能时,输入 Kubernetes 资源的 API 版本、类型、命名空间、名称和可选标签选择器。您必须在 hub 集群模板中使用与策略相同的命名空间。如需了解更多详细信息,请参阅模板处理。
如果请求的资源不存在,则返回空映射。如果资源不存在,并且值提供给另一个模板功能,您可能会得到以下错误: invalid value; expected string
。
注: 使用默认
模板功能,因此为后续模板功能提供了正确的类型。请参阅 Sprig 开源 部分。
查看该功能的以下语法:
func lookup (apiversion string, kind string, namespace string, name string, labelselector ...string) (value string, err Error)
有关标签选择器示例,请参阅 Kubernetes 标签和选择器 文档的额外资源部分。查看在目标受管集群中强制执行 Kubernetes 资源的配置策略示例:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-lookup namespace: test-templates spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: kind: ConfigMap apiVersion: v1 metadata: name: demo-app-config namespace: test data: 1 app-name: sampleApp app-description: "this is a sample app" metrics-url: | 2 http://{{ (lookup "v1" "Service" "default" "metrics").spec.clusterIP }}:8080 remediationAction: enforce severity: low
1.2.2.1.5. base64enc
base64enc
功能返回以 base64
编码的输入 data string
值。使用这个功能时,输入字符串值。查看该功能的以下语法:
func base64enc (data string) (enc-data string)
查看以下使用 base64enc
功能的配置策略示例:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-fromsecret namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... data: USER_NAME: '{{ fromConfigMap "default" "myconfigmap" "admin-user" | base64enc }}'
1.2.2.1.6. base64dec
base64dec
功能返回一个以 base64
解码的输入的 enc-data string
值。使用这个功能时,输入字符串值。查看该功能的以下语法:
func base64dec (enc-data string) (data string)
查看以下使用 base64enc
功能的配置策略示例:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-fromsecret namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... data: app-name: | "{{ ( lookup "v1" "Secret" "testns" "mytestsecret") .data.appname ) | base64dec }}"
1.2.2.1.7. indent
indent
功能会返回经过 padded 的 data string
。使用这个功能时,输入带有特定空格数的数据字符串。查看该功能的以下语法:
func indent (spaces int, data string) (padded-data string)
查看以下使用 indent
功能的配置策略示例:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-fromsecret namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... data: Ca-cert: | {{ ( index ( lookup "v1" "Secret" "default" "mycert-tls" ).data "ca.pem" ) | base64dec | indent 4 }}
1.2.2.1.8. autoindent
autoindent
函数的作用类似于 indent
函数,它根据模板前面的空格数自动决定前导空格的数量。
查看以下使用 autoindent
函数的配置策略示例:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-fromsecret namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... data: Ca-cert: | {{ ( index ( lookup "v1" "Secret" "default" "mycert-tls" ).data "ca.pem" ) | base64dec | autoindent }}
1.2.2.1.9. toInt
toInt
函数处理并返回输入值的整数值。当这是模板中的最后一个功能时,会进一步处理源内容。这是为了确保该值由 YAML 解释为整数。使用这个功能时,输入需要转换为整数的数据。查看该功能的以下语法:
func toInt (input interface{}) (output int)
查看以下使用 toInt
功能的配置策略示例:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-template-function namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... spec: vlanid: | {{ (fromConfigMap "site-config" "site1" "vlan") | toInt }}
1.2.2.1.10. toBool
toBool
函数将输入字符串转换为布尔值,并返回布尔值。当这是模板中的最后一个功能时,会进一步处理源内容。这是为了确保该值被 YAML 解释为布尔值。使用此功能时,请输入需要转换为布尔值的字符串数据。查看该功能的以下语法:
func toBool (input string) (output bool)
查看以下使用 toBool
函数的配置策略示例:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-template-function namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... spec: enabled: | {{ (fromConfigMap "site-config" "site1" "enabled") | toBool }}
1.2.2.1.11. 保护
通过 protect
功能,您可以在 hub 集群策略模板中对字符串进行加密。评估策略时,它将在受管集群上自动解密。查看以下使用 protect
功能的配置策略示例:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-template-function namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... spec: enabled: | {{hub (lookup "v1" "Secret" "default" "my-hub-secret").data.message | protect hub}}
在前面的 YAML 示例中,定义了使用 lookup
功能的现有 hub 集群策略模板。在受管集群命名空间中的复制策略上,值可能类似以下语法 :$ocm_encrypted:okrrBqt72oI+3WT/0vxeI3vGa+wpLD7Z0ZxFMLvL204=
使用的每个加密算法是 256 位密钥的 AES-CBC。对于每个受管集群,每个加密密钥都需要是唯一的,每 30 天自动轮转。
这样可确保您的解密的值永不会存储在受管集群的策略中。
要强制立即轮转,在 hub 集群上删除 policy-encryption-key
Secret 上的 policy.open-cluster-management.io/last-rotated
注解。然后,会重新处理策略以使用新的加密密钥。
1.2.2.1.12. toLiteral
toLiteral
函数会在处理模板字符串后删除任何引号。您可以使用此功能将 JSON 字符串从配置映射字段转换为清单中的 JSON 值。运行以下功能从 key
参数值中删除引号:
key: '{{ "[\"10.10.10.10\", \"1.1.1.1\"]" | toLiteral }}'
使用 toLiteral
功能后,会显示以下更新:
key: ["10.10.10.10", "1.1.1.1"]
1.2.2.1.13. copySecretData
copySecretData
功能复制指定 secret 的所有数据
内容。查看以下函数示例:
complianceType: musthave
objectDefinition:
apiVersion: v1
kind: Secret
metadata:
name: my-secret-copy
data: '{{ copySecretData "default" "my-secret" }}' 1
1.2.2.1.14. copyConfigMapData
copyConfigMapData
功能复制指定配置映射 的所有数据
内容。查看以下函数示例:
complianceType: musthave objectDefinition: apiVersion: v1 kind: ConfigMap metadata: name: my-secret-copy data: '{{ copyConfigMapData "default" "my-configmap" }}'
1.2.2.1.15. getNodesWithExactRoles
getNodesWithExactRoles
函数返回一个节点列表,它只具有您指定的角色,并忽略具有除 node-role.kubernetes.io/worker
角色以外的任何其他角色的节点。查看以下示例功能,您可以在其中选择 "infra"
节点并忽略存储节点:
complianceType: musthave objectDefinition: apiVersion: v1 kind: ConfigMap metadata: name: my-configmap data: infraNode: | {{- range $i,$nd := (getNodesWithExactRoles "infra").items }} node{{ $i }}: {{ $nd.metadata.name }} {{- end }} replicas: {{ len ((getNodesWithExactRoles "infra").items) | toInt }}
1.2.2.1.16. hasNodesWithExactRoles
如果集群只包含您指定的角色的节点,则 hasNodesWithExactRoles
功能会返回 true
值,并忽略具有任何额外角色的节点,node-role.kubernetes.io/worker
角色除外。查看以下函数示例:
complianceType: musthave objectDefinition: apiVersion: v1 kind: ConfigMap metadata: name: my-configmap data: key: '{{ hasNodesWithExactRoles "infra" }}'
1.2.2.1.17. Sprig 开源
Red Hat Advanced Cluster Management 支持 sprig
开源项目中包含的以下模板功能:
Sprig 库 | Functions |
---|---|
加密和安全 |
|
Date |
|
default |
|
字典和字典 |
|
整数数数 |
|
整数片段 |
直到 , |
列表 |
|
字符串函数 |
|
版本比较 |
|
1.2.2.2. 其他资源
- 如需了解更多详细信息,请参阅 模板处理。
- 有关用例,请参阅配置策略中的高级模板处理。
- 有关标签选择器示例,请参阅 Kubernetes 标签和选择器 文档。
- 请参阅 Golang 文档 - 软件包模板。
- 如需了解更多详细信息,请参阅 Sprig Function 文档。
1.2.3. 配置策略中的高级模板处理
使用受管集群和 hub 集群模板来减少在策略定义中为每个目标集群或硬代码配置值创建单独的策略的需求。为安全起见,hub 集群模板中的特定于资源和通用查询功能都仅限于 hub 集群上策略的命名空间。
重要: 如果您使用 hub 集群模板传播 secret 或其他敏感数据,则敏感数据存在于 hub 集群上的受管集群命名空间和发布该策略的受管集群中。模板内容在策略中扩展,策略不会由 OpenShift Container Platform ETCD 加密支持加密。要解决这个问题,请使用 fromSecret
或 copySecretData
,它会自动加密 secret 中的值,或 protect
加密其他值。
继续阅读高级模板用例:
1.2.3.1. 重新处理的特殊注解
hub 集群模板会在策略创建过程中或更新引用的资源时解析到引用资源中的数据。
如果您需要手动启动更新,请使用特殊注解 policy.open-cluster-management.io/trigger-update
来指示模板引用的数据的更改。对特殊注解值的任何更改都会自动启动模板处理。另外,引用资源的最新内容会在传播以在受管集群上处理的策略定义中读取和更新。使用此注解的方法是每次递增值。
1.2.3.2. 对象模板处理
使用 YAML 字符串表示设置对象模板。object-template-raw
参数是一个可选参数,它支持高级模板用例,如 if-else 和 range
功能。以下示例定义了将 species-category: mammal
标签添加到 default
命名空间中的任何 ConfigMap 中,其 name
键等于 Sea Otter
:
object-templates-raw: | {{- range (lookup "v1" "ConfigMap" "default" "").items }} {{- if eq .data.name "Sea Otter" }} - complianceType: musthave objectDefinition: kind: ConfigMap apiVersion: v1 metadata: name: {{ .metadata.name }} namespace: {{ .metadata.namespace }} labels: species-category: mammal {{- end }} {{- end }}
注: 虽然 spec.object-templates
和 spec.object-templates-raw
是可选的,但必须设置两个参数字段中的一个。
查看以下策略示例,它使用高级模板为您的受管集群创建和配置基础架构 MachineSet
对象。
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: create-infra-machineset spec: remediationAction: enforce severity: low object-templates-raw: | {{- /* Specify the parameters needed to create the MachineSet */ -}} {{- $machineset_role := "infra" }} {{- $region := "ap-southeast-1" }} {{- $zones := list "ap-southeast-1a" "ap-southeast-1b" "ap-southeast-1c" }} {{- $infrastructure_id := (lookup "config.openshift.io/v1" "Infrastructure" "" "cluster").status.infrastructureName }} {{- $worker_ms := (index (lookup "machine.openshift.io/v1beta1" "MachineSet" "openshift-machine-api" "").items 0) }} {{- /* Generate the MachineSet for each zone as specified */ -}} {{- range $zone := $zones }} - complianceType: musthave objectDefinition: apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: {{ $infrastructure_id }} name: {{ $infrastructure_id }}-{{ $machineset_role }}-{{ $zone }} namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: {{ $infrastructure_id }} machine.openshift.io/cluster-api-machineset: {{ $infrastructure_id }}-{{ $machineset_role }}-{{ $zone }} template: metadata: labels: machine.openshift.io/cluster-api-cluster: {{ $infrastructure_id }} machine.openshift.io/cluster-api-machine-role: {{ $machineset_role }} machine.openshift.io/cluster-api-machine-type: {{ $machineset_role }} machine.openshift.io/cluster-api-machineset: {{ $infrastructure_id }}-{{ $machineset_role }}-{{ $zone }} spec: metadata: labels: node-role.kubernetes.io/{{ $machineset_role }}: "" taints: - key: node-role.kubernetes.io/{{ $machineset_role }} effect: NoSchedule providerSpec: value: ami: id: {{ $worker_ms.spec.template.spec.providerSpec.value.ami.id }} apiVersion: awsproviderconfig.openshift.io/v1beta1 blockDevices: - ebs: encrypted: true iops: 2000 kmsKey: arn: '' volumeSize: 500 volumeType: io1 credentialsSecret: name: aws-cloud-credentials deviceIndex: 0 instanceType: {{ $worker_ms.spec.template.spec.providerSpec.value.instanceType }} iamInstanceProfile: id: {{ $infrastructure_id }}-worker-profile kind: AWSMachineProviderConfig placement: availabilityZone: {{ $zone }} region: {{ $region }} securityGroups: - filters: - name: tag:Name values: - {{ $infrastructure_id }}-worker-sg subnet: filters: - name: tag:Name values: - {{ $infrastructure_id }}-private-{{ $zone }} tags: - name: kubernetes.io/cluster/{{ $infrastructure_id }} value: owned userDataSecret: name: worker-user-data {{- end }}
1.2.3.3. 绕过模板处理
您可能会创建一个策略,其中包含不是由 Red Hat Advanced Cluster Management 处理的模板。默认情况下,Red Hat Advanced Cluster Management 会处理所有模板。
要绕过 hub 集群的模板处理,必须将 {{ template content }}
改为 {{ `{{ template content }}`
}}
。
另外,您还可以在 Policy
的 ConfigurationPolicy
部分添加以下注解:policy.open-cluster-management.io/disable-templates: "true"
。当包含此注解时,则不需要以前的临时解决方案。为 ConfigurationPolicy
绕过模板处理。
1.2.3.4. 其他资源
- 如需了解更多详细信息,请参阅模板功能。
- 返回到模板处理。
- 如需了解更多详细信息,请参阅 Kubernetes 配置策略控制器。
- 另外,请参阅 备份 etcd 数据。
第 2 章 策略部署
Kubernetes API 用于定义和与策略交互。您需要确保环境满足内部企业安全标准,适用于 Kubernetes 集群上托管的工作负载的软件工程、安全工程、弹性、安全性以及监管合规性。
2.1. 部署选项
CertificatePolicy
、ConfigurationPolicy
和 OperatorPolicy
策略和 Gatekeeper 约束可以通过两种方式部署到受管集群。您可以使用 Hub 集群策略框架 或使用外部工具部署策略,将策略 部署到受管集群。查看每个选项的以下描述:
- hub 集群策略框架
-
第一种方法是利用 hub 集群中的策略框架。这包括在 hub 集群上的
Policy
对象中定义策略和 Gatekeeper 约束,并使用Placement
和PlacementBinding
选择策略部署到哪些集群。策略框架处理发送到受管集群,状态聚合回 hub 集群。Policy
对象在 Red Hat Advanced Cluster Management for Kubernetes 控制台的 Policies 表中表示。 - 使用外部工具部署策略
- 另外,您可以使用外部工具(如 Red Hat OpenShift GitOps)将策略和 Gatekeeper 约束直接提供给受管集群。Red Hat Advanced Cluster Management 控制台中的发现策略表中会显示您的策略,如果配置管理策略已经就位,但需要使用 Red Hat Advanced Cluster Management 策略来补充策略,则可以选择使用 Red Hat Advanced Cluster Management 控制台。
2.1.1. 策略部署比较表
请参阅以下比较表以了解哪个选项支持特定的功能,这有助于决定哪个部署策略更适合您的用例:
功能 | 策略框架 | 使用外部工具部署 |
---|---|---|
hub 集群模板 | 是 | 否 |
受管集群模板 | 是 | 是 |
Red Hat Advanced Cluster Management 控制台支持 | 是 | 是的,您可以从 Discover policies 表中查看外部工具部署的策略。使用外部工具部署的策略不会显示在 Governance Overview 仪表板中。您必须在受管集群中启用搜索。 |
策略分组 |
是的,您可以通过 |
从外部工具部署时,您无法直接在策略上使用策略分组,但每个分组的 Argo CD |
策略事件历史记录 | 您可以查看 hub 集群中存储的每个策略的最后 10 个事件。 | 否,但您可以从每个受管集群的控制器日志中提取策略事件历史记录。 |
策略依赖项 | 是 | 否。或者,您可以使用 Argo CD sync waves 功能来定义依赖项。 |
策略生成器 | 是 | 否 |
OpenShift GitOps 健康检查 您必须为比 2.13 更早的 Argo CD 版本完成额外的配置。 | 是 | 是 |
策略合规历史记录 API (技术预览)(已弃用) | 是 | 否 |
OpenShift GitOps 在受管集群中应用原生 Kubernetes 清单和 Red Hat Advanced Cluster Management 策略 | 不,您必须在 Red Hat Advanced Cluster Management hub 集群中部署策略。 | 是 |
hub 集群上的策略状态指标用于警报 | 是 | 否 |
在违反的策略上运行 Ansible 作业 |
是,使用 | 否 |
2.2. 其他资源
2.3. hub 集群策略框架
要创建和管理策略,获得可见性和修复配置以满足标准,请使用 Red Hat Advanced Cluster Management for Kubernetes 监管安全策略框架。Red Hat Advanced Cluster Management for Kubernetes 监管功能为企业引进自己的安全策略提供了一个可扩展的策略框架。
您可以在 hub 集群上的任何命名空间中创建 Policy
资源,但受管集群命名空间除外。如果您在受管集群命名空间中创建策略,则 Red Hat Advanced Cluster Management 会删除它。每个 Red Hat Advanced Cluster Management 策略都可以组织为一个或多个策略模板定义。如需有关策略元素的更多详情,请参阅本页面上的 Policy YAML 表 部分。
2.3.1. 要求
每个策略都需要一个
Placement
资源来定义策略文档要应用到的集群,以及绑定 Red Hat Advanced Cluster Management for Kubernetes 策略的PlacementBinding
资源。策略资源根据关联的
放置
定义应用到集群,您可以在其中查看与特定条件匹配的受管集群列表。与带有environment=dev
标签的所有集群匹配的放置资源
示例类似以下 YAML:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement-policy-role spec: predicates: - requiredClusterSelector: labelSelector: matchExpressions: - {key: environment, operator: In, values: ["dev"]}
要了解更多有关放置和支持的标准的信息,请参阅集群生命周期文档中的 放置概述。
除了
Placement
资源外,还需要创建一个PlacementBinding
,将放置资源
绑定到策略。与带有environment=dev
标签的所有集群匹配的放置资源
示例类似以下 YAML:apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-policy-role placementRef: name: placement-policy-role 1 kind: Placement apiGroup: cluster.open-cluster-management.io subjects: 2 - name: policy-role kind: Policy apiGroup: policy.open-cluster-management.io
-
要使用
放置资源
,您必须将ManagedClusterSet
资源绑定到带有ManagedClusterSetBinding
资源的Placement
资源的命名空间。如需了解更多详细信息 ,请参阅创建 ManagedClusterSetBinding 资源。 -
从控制台创建策略的
放置资源
时,放置容限的状态会自动添加到Placement
资源中。如需了解更多详细信息,请参阅 向放置添加容限。
最佳实践 :在使用 Placement
资源时,使用命令行界面(CLI) 来更新策略。
2.3.2. hub 集群策略组件
在以下部分了解更多有关策略组件的详细信息:
2.3.2.1. 策略 YAML 结构
创建策略时,必须包含所需的参数字段和值。根据您的策略控制器,您可能需要包含其他可选字段和值。查看策略的以下 YAML 结构:
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: annotations: policy.open-cluster-management.io/standards: policy.open-cluster-management.io/categories: policy.open-cluster-management.io/controls: policy.open-cluster-management.io/description: spec: disabled: remediationAction: dependencies: - apiVersion: policy.open-cluster-management.io/v1 compliance: kind: Policy name: namespace: policy-templates: - objectDefinition: apiVersion: kind: metadata: name: spec: --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: bindingOverrides: remediationAction: subFilter: name: placementRef: name: kind: Placement apiGroup: cluster.open-cluster-management.io subjects: - name: kind: apiGroup: --- apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: spec:
2.3.2.2. 策略 YAML 表
查看下表以了解策略参数描述:
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 选填 | 用于指定一组描述策略试图验证的标准集合的安全详情。这里介绍的所有注解都以逗号分隔的字符串表示。 注:您可以在控制台中根据您在策略页面上为策略定义的标准和类别查看策略违反。 |
| 选填 |
当此参数设置为 |
| 选填 |
将此参数设置为 |
| 选填 | 与策略相关的安全标准的名称。例如,美国国家标准与技术研究院 (NIST) 和支付卡行业 (PCI)。 |
| 选填 | 安全控制类别是针对一个或多个标准的具体要求。例如,系统和信息完整性类别可能表明您的策略包含一个数据传输协议来保护个人信息,符合 HIPAA 和 PCI 标准的要求。 |
| 选填 | 正在接受检查的安全控制名称。例如,访问控制或系统及信息完整性。 |
| 必填 |
将值设为 |
| 选填 |
指定您的策略的修复。参数值是 |
| 选填 |
指定在将策略应用到受管集群时是否应复制策略的标签和注解。如果设置为 |
| 选填 | 用于创建与满足合规性的额外注意事项相关的依赖关系对象列表。 |
| 必填 | 用于创建一个或多个应用到受管集群的策略。 |
| 选填 | 对于策略模板,这用于创建依赖项对象列表,以及满足合规性的额外注意事项。 |
| 选填 | 用于在验证依赖项条件前将策略模板标记为合规。 重要:有些策略类型可能不支持 enforce 功能。 |
2.3.2.3. 策略示例文件
查看以下 YAML 文件,它是角色的配置策略:
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy-role annotations: policy.open-cluster-management.io/standards: NIST SP 800-53 policy.open-cluster-management.io/categories: AC Access Control policy.open-cluster-management.io/controls: AC-3 Access Enforcement policy.open-cluster-management.io/description: spec: remediationAction: inform disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-role-example spec: remediationAction: inform # the policy-template spec.remediationAction is overridden by the preceding parameter value for spec.remediationAction. severity: high namespaceSelector: include: ["default"] object-templates: - complianceType: mustonlyhave # role definition should exact match objectDefinition: apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: sample-role rules: - apiGroups: ["extensions", "apps"] resources: ["deployments"] verbs: ["get", "list", "watch", "delete","patch"] --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-policy-role placementRef: name: placement-policy-role kind: Placement apiGroup: cluster.open-cluster-management.io subjects: - name: policy-role kind: Policy apiGroup: policy.open-cluster-management.io --- apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement-policy-role spec: predicates: - requiredClusterSelector: labelSelector: matchExpressions: - {key: environment, operator: In, values: ["dev"]}
2.3.3. 其他资源
继续阅读 Red Hat Advanced Cluster Management 监管框架的相关主题:
2.3.4. 策略依赖项
只有在集群中的其他策略处于特定状态时,才会使用依赖项来激活策略。当不满足依赖项条件时,策略被标记为 Pending
,资源不会在受管集群上创建。有关策略状态中的条件状态的更多详细信息。
您可以使用策略依赖项来控制对象的应用方式的顺序。例如,如果您有一个 Operator 策略以及 Operator 所管理的资源的另一个策略,您可以设置第二个策略的依赖项,以便它不会尝试创建资源,直到安装 Operator 前不会尝试创建资源。这有助于在受管集群上的性能。
需要的访问权限:策略管理员
查看以下策略依赖项示例,只有 upstream-compliance-operator
策略已在受管集群中合规时才会创建 ScanSettingBinding
:
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: annotations: policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration policy.open-cluster-management.io/standards: NIST SP 800-53 policy.open-cluster-management.io/description: name: moderate-compliance-scan namespace: default spec: dependencies: 1 - apiVersion: policy.open-cluster-management.io/v1 compliance: Compliant kind: Policy name: upstream-compliance-operator namespace: default disabled: false policy-templates: - extraDependencies: 2 - apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy name: scan-setting-prerequisite compliance: Compliant ignorePending: false 3 objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: moderate-compliance-scan spec: object-templates: - complianceType: musthave objectDefinition: apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSettingBinding metadata: name: moderate namespace: openshift-compliance profiles: - apiGroup: compliance.openshift.io/v1alpha1 kind: Profile name: ocp4-moderate - apiGroup: compliance.openshift.io/v1alpha1 kind: Profile name: ocp4-moderate-node settingsRef: apiGroup: compliance.openshift.io/v1alpha1 kind: ScanSetting name: default remediationAction: enforce severity: low
- 1
dependencies
字段在Policy
对象中设置,要求适用于策略中的所有策略模板。- 2
- 可以在单独的策略模板上设置
extraDependencies
字段。例如,可以为配置策略设置 参数,并且定义在策略中设置的任何依赖项
之外必须满足的条件。 - 3
ignorePending
字段可以在每个单独的策略模板上设置,并在计算总体策略合规性时,配置该模板上的Pending
状态是否被视为Compliant
或NonCompliant
。默认情况下,此值设为false
,而Pending
模板会导致策略变为NonCompliant
。当您将其设置为true
时,当此模板为Pending
时,策略仍然可以为Compliant
,这在模板的预期状态下非常有用。
注: 您不能使用依赖项根据另一个集群中的策略状态对一个集群应用策略。
2.3.5. 配置策略合规历史记录 API (技术预览)(已弃用)
如果您希望长期存储 Red Hat Advanced Cluster Management for Kubernetes 策略合规事件,策略合规历史记录 API 是一个可选的技术预览功能。您可以使用 API 获取额外详情,如 spec
字段来审核和排除您的策略,并在策略被禁用或从集群中删除时获取合规性事件。
策略合规历史记录 API 也可以生成以逗号分隔的值(CSV)电子策略合规事件表,以帮助您进行审核和故障排除。
2.3.5.1. 先决条件
策略合规历史记录 API 需要版本 13 或更新版本上的 PostgreSQL 服务器。
一些红帽支持的选项包括使用
registry.redhat.io/rhel9/postgresql-15
容器镜像、registry.redhat.io/rhel8/postgresql-13
容器镜像、postgresql-server
RPM 或postgresql/server
模块。查看适用于您选择的路径的有关设置和配置适用的官方红帽文档。策略合规历史记录 API 与任何标准 PostgreSQL 兼容,不受官方红帽支持的产品的限制。- 此 PostgreSQL 服务器必须可从 Red Hat Advanced Cluster Management hub 集群访问。如果 PostgreSQL 服务器在 hub 集群外部运行,请确保路由和防火墙配置允许 hub 集群连接到 PostgreSQL 服务器的端口 5432。如果在 PostgreSQL 配置中被覆盖,这个端口可能是不同的值。
2.3.5.2. 启用合规性历史记录 API
配置受管集群,将策略合规事件记录到 API。您可以在所有集群或集群子集中启用它。完成以下步骤:
将 PostgreSQL 服务器配置为集群管理员。如果您在 Red Hat Advanced Cluster Management hub 集群中部署了 PostgreSQL,请临时端口转发 PostgreSQL 端口以使用
psql
命令。运行以下命令:oc -n <PostgreSQL namespace> port-forward <PostgreSQL pod name> 5432:5432
在不同的终端中,连接到本地的 PostgreSQL 服务器,使用以下命令:
psql 'postgres://postgres:@127.0.0.1:5432/postgres'
使用以下 SQL 语句为您的 Red Hat Advanced Cluster Management hub 集群创建一个用户和数据库:
CREATE USER "rhacm-policy-compliance-history" WITH PASSWORD '<replace with password>'; CREATE DATABASE "rhacm-policy-compliance-history" WITH OWNER="rhacm-policy-compliance-history";
创建
governance-policy-database
Secret
资源,将此数据库用于策略合规历史记录 API。运行以下命令:oc -n open-cluster-management create secret generic governance-policy-database \ 1 --from-literal="user=rhacm-policy-compliance-history" \ --from-literal="password=rhacm-policy-compliance-history" \ --from-literal="host=<replace with host name of the Postgres server>" \ 2 --from-literal="dbname=ocm-compliance-history" \ --from-literal="sslmode=verify-full" \ --from-file="ca=<replace>" 3
- 1
- 添加安装 Red Hat Advanced Cluster Management 的命名空间。默认情况下,Red Hat Advanced Cluster Management 安装在
open-cluster-management
命名空间中。 - 2
- 添加 PostgresQL 服务器的主机名。如果您在 Red Hat Advanced Cluster Management hub 集群中部署了 PostgreSQL 服务器,且没有在集群外公开,您可以使用
Service
对象作为主机值。格式为 <service name>.<namespace>.svc
。请注意,此方法取决于 Red Hat Advanced Cluster Management hub 集群的网络策略。 - 3
- 您必须在为 PostgreSQL 服务器的 TLS 证书签名的
ca
data 字段中指定证书颁发机构证书文件。如果没有提供这个值,您必须相应地更改 sslmode 值,但不建议这样做,因为它减少了数据库连接的安全性。
添加
cluster.open-cluster-management.io/backup
标签,以备份 Red Hat Advanced Cluster Management hub 集群恢复操作的Secret
资源。运行以下命令:oc -n open-cluster-management label secret governance-policy-database cluster.open-cluster-management.io/backup=""
要对 PostgreSQL 连接进行更多自定义,请直接使用
connectionURL
data 字段,并以 PostgreSQL 连接 URI 格式提供值。密码中的特殊字符必须采用 URL 编码。种选择是使用 Python 生成密码编码的 URL 格式。例如,如果密码是$uper<Secr&t%
>,请运行以下 Python 命令以获取输出%24uper%3CSecr%26t%25%3E
:python -c 'import urllib.parse; import sys; print(urllib.parse.quote(sys.argv[1]))' '$uper<Secr&t%>'
在创建
governance-policy-database
Secret
后,运行 命令以测试策略合规历史记录 API。在同一命名空间中自动创建 OpenShiftRoute
对象。如果 Red Hat Advanced Cluster Management hub 集群上的路由没有使用可信证书,您可以选择在 curl 命令中提供 a-k
标志来跳过 TLS 验证,但不建议这样做:curl -H "Authorization: Bearer $(oc whoami --show-token)" \ "https://$(oc -n open-cluster-management get route governance-history-api -o jsonpath='{.spec.host}')/api/v1/compliance-events"
如果成功,curl 命令会返回类似如下的值:
{"data":[],"metadata":{"page":1,"pages":0,"per_page":20,"total":0}}
如果没有成功,curl 命令可能会返回两个信息之一:
{"message":"The database is unavailable"}
{"message":"Internal Error"}
如果您收到信息,使用以下命令查看
open-cluster-management
命名空间中的 Kubernetes 事件:oc -n open-cluster-management get events --field-selector reason=OCMComplianceEventsDBError
如果您收到来自事件的说明来查看
governance-policy-propagator
日志,请运行以下命令:oc -n open-cluster-management logs -l name=governance-policy-propagator -f
您可能会收到一条错误消息,指出用户、密码或数据库被错误指定。请参见以下消息示例:
2024-03-05T12:17:14.500-0500 info compliance-events-api complianceeventsapi/complianceeventsapi_controller.go:261 The database connection failed: pq: password authentication failed for user "rhacm-policy-compliance-history"
使用以下命令,使用正确的 PostgreSQL 连接设置来更新
governance-policy-database
Secret
资源:oc -n open-cluster-management edit secret governance-policy-database
2.3.5.3. 设置合规性历史记录 API URL
设置策略合规历史记录 API URL,以在受管集群中启用该功能。完成以下步骤:
使用以下命令检索策略合规历史记录 API 的外部 URL:
echo "https://$(oc -n open-cluster-management get route governance-history-api -o=jsonpath='{.spec.host}')"
输出可能类似以下信息,以及 Red Hat Advanced Cluster Management hub 集群的域名:
https://governance-history-api-open-cluster-management.apps.openshift.redhat.com
创建一个类似以下示例的
AddOnDeploymentConfig
对象:apiVersion: addon.open-cluster-management.io/v1alpha1 kind: AddOnDeploymentConfig metadata: name: governance-policy-framework namespace: open-cluster-management spec: customizedVariables: - name: complianceHistoryAPIURL value: <replace with URL from previous command>
-
将
value
参数值替换为您的合规性历史记录外部 URL。
-
将
2.3.5.3.1. 在所有受管集群中启用
在所有受管集群上启用合规历史记录 API,以记录来自受管集群的合规性事件。完成以下步骤:
使用以下命令将
governance-policy-framework
ClusterManagementAddOn
对象配置为使用AddOnDeploymentConfig
:oc edit ClusterManagementAddOn governance-policy-framework
添加或更新
spec.supportedConfigs
数组。您的资源可能有以下配置:- group: addon.open-cluster-management.io resource: addondeploymentconfigs defaultConfig: name: governance-policy-framework namespace: open-cluster-management
2.3.5.3.2. 在单个受管集群中启用合规性历史记录
在单个受管集群上启用合规性历史记录 API,以记录来自受管集群的合规性事件。完成以下步骤:
在受管集群命名空间中配置
governance-policy-framework
ManagedClusterAddOn
资源。使用以下命令,从 Red Hat Advanced Cluster Management hub 集群中运行以下命令:oc -n <manage-cluster-namespace> edit ManagedClusterAddOn governance-policy-framework
-
将 &
lt;manage-cluster-namespace
> 占位符替换为您要启用的受管集群名称。
-
将 &
添加或更新
spec.configs
数组,使其包含类似以下示例的条目:- group: addon.open-cluster-management.io resource: addondeploymentconfigs name: governance-policy-framework namespace: open-cluster-management
要验证配置,请确认受管集群上的部署是否使用
--compliance-api-url
容器参数。运行以下命令:oc -n open-cluster-management-agent-addon get deployment governance-policy-framework -o jsonpath='{.spec.template.spec.containers[1].args}'
输出可能类似以下:
["--enable-lease=true","--hub-cluster-configfile=/var/run/klusterlet/kubeconfig","--leader-elect=false","--log-encoder=console","--log-level=0","--v=-1","--evaluation-concurrency=2","--client-max-qps=30","--client-burst=45","--disable-spec-sync=true","--cluster-namespace=local-cluster","--compliance-api-url=https://governance-history-api-open-cluster-management.apps.openshift.redhat.com"]
任何新的策略合规事件都会记录在策略合规历史记录 API 中。
如果没有记录特定受管集群的策略合规事件,请查看受影响受管集群的
governance-policy-framework
日志:oc -n open-cluster-management-agent-addon logs deployment/governance-policy-framework -f
此时会显示类似以下消息的日志消息。如果
消息
值为空,策略合规历史记录 API URL 不正确,或者存在网络通信问题:024-03-05T19:28:38.063Z info policy-status-sync statussync/policy_status_sync.go:750 Failed to record the compliance event with the compliance API. Will requeue. {"statusCode": 503, "message": ""}
- 如果策略合规历史记录 API URL 不正确,使用以下命令编辑 hub 集群上的 URL:
oc -n open-cluster-management edit AddOnDeploymentConfig governance-policy-framework
+ 注意: 如果您遇到网络通信问题,您必须根据网络基础架构诊断问题。
2.3.5.4. 其他资源
2.3.6. 集成策略生成器
通过集成策略生成器,您可以使用它来自动构建 Red Hat Advanced Cluster Management for Kubernetes 策略。要集成策略生成器,请参阅 策略生成器。
有关您可以使用 Policy Generator 执行的操作示例,请参阅生成安装 Compliance Operator 的策略。
2.3.7. 策略生成器
Policy Generator 是 Red Hat Advanced Cluster Management for Kubernetes 应用程序生命周期订阅 Red Hat OpenShift GitOps 工作流的一部分,该工作流使用 Kustomize 生成 Red Hat Advanced Cluster Management 策略。策略生成器从 Kubernetes 清单 YAML 文件构建 Red Hat Advanced Cluster Management 策略,该文件通过用于配置它的 PolicyGenerator
清单 YAML 文件提供。策略生成器作为 Kustomize 生成器插件实施。有关 Kustomize 的更多信息,请阅读 Kustomize 文档。
查看以下部分以了解有关 Policy Generator 的更多信息:
2.3.7.1. 策略生成器功能
Policy Generator 与 Red Hat Advanced Cluster Management 应用程序生命周期订阅 OpenShift GitOps 工作流集成简化了 Kubernetes 资源对象分发到受管 OpenShift Container Platform 集群,以及通过 Red Hat Advanced Cluster Management 策略的 Kubernetes 集群分布。
使用 Policy Generator 完成以下操作:
- 将任何 Kubernetes 清单文件转换为 Red Hat Advanced Cluster Management 配置策略,包括从 Kustomize 目录创建的清单。
- 在将输入 Kubernetes 清单插入到生成的 Red Hat Advanced Cluster Management 策略前对其进行补丁。
- 生成额外的配置策略,以便您可以通过 Red Hat Advanced Cluster Management for Kubernetes 报告 Gatekeeper 策略违反情况。
- 在 hub 集群上生成策略集。
2.3.7.2. 策略生成器配置结构
策略生成器是一个 Kustomize 生成器插件,它配置了一个 PolicyGenerator
kind 和 policy.open-cluster-management.io/v1
API 版本的清单。继续阅读以了解配置结构:
要使用插件,请在
kustomization.yaml
文件中添加一个generators
部分。查看以下示例:generators: - policy-generator-config.yaml 1
- 1
- 上例中引用的
policy-generator-config.yaml
文件是一个 YAML 文件,其中包含要生成的策略的说明。
简单的
PolicyGenerator
配置文件可能类似以下示例,带有policyDefaults
和policies
:apiVersion: policy.open-cluster-management.io/v1 kind: PolicyGenerator metadata: name: config-data-policies policyDefaults: namespace: policies policySets: [] policies: - name: config-data manifests: - path: configmap.yaml 1
- 1
configmap.yaml
文件代表要包含在策略中的 Kubernetes 清单 YAML 文件。另外,您可以设置 Kustomize 目录的路径,或者设置具有多个 Kubernetes 清单 YAML 文件的目录。查看以下ConfigMap
示例:
apiVersion: v1 kind: ConfigMap metadata: name: my-config namespace: default data: key1: value1 key2: value2
您可以使用
object-templates-raw
清单自动生成带有您添加的内容的ConfigurationPolicy
资源。例如,您可以使用以下语法创建清单文件:object-templates-raw: | {{- range (lookup "v1" "ConfigMap" "my-namespace" "").items }} - complianceType: musthave objectDefinition: kind: ConfigMap apiVersion: v1 metadata: name: {{ .metadata.name }} namespace: {{ .metadata.namespace }} labels: i-am-from: template {{- end }}
创建清单文件后,您可以创建一个
PolicyGenerator
配置文件。请参阅以下 YAML 示例以及路径
,请输入manifest.yaml
文件的路径:apiVersion: policy.open-cluster-management.io/v1 kind: PolicyGenerator metadata: name: config-data-policies policyDefaults: namespace: policies policySets: [] policies: - name: config-data manifests: - path: manifest.yaml
生成的
Policy
资源以及生成的放置资源
和PlacementBinding
资源可能类似以下示例。注: 资源规格在 Policy Generator 配置参考表中 进行了描述。apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement-config-data namespace: policies spec: predicates: - requiredClusterSelector: labelSelector: matchExpressions: [] --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-config-data namespace: policies placementRef: apiGroup: cluster.open-cluster-management.io kind: Placement name: placement-config-data subjects: - apiGroup: policy.open-cluster-management.io kind: Policy name: config-data --- apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: annotations: policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration policy.open-cluster-management.io/standards: NIST SP 800-53 policy.open-cluster-management.io/description: name: config-data namespace: policies spec: disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: config-data spec: object-templates: - complianceType: musthave objectDefinition: apiVersion: v1 data: key1: value1 key2: value2 kind: ConfigMap metadata: name: my-config namespace: default remediationAction: inform severity: low
2.3.7.3. 策略生成器配置参考表
policyDefaults
部分的所有字段( 命名空间
除外)可以被为每个策略覆盖,并且 policySetDefaults
部分中的所有字段都可以覆盖每个策略集。
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 选填 |
如果多个策略使用相同的放置,则使用此名称为生成的 |
| 必填 |
对于 policies 数组中的条目,这里列出的任何默认值都会被覆盖,但 |
| 必填 | 所有策略的命名空间。 |
| 选填 |
决定在将清单与集群上对象进行比较时的策略控制器行为。您可以使用的值是 |
| 选填 |
在将清单元数据部分与集群中的对象进行比较时,会覆盖 |
| 选填 |
|
| 选填 |
|
| 选填 |
|
| 选填 |
策略在 |
| 选填 |
用于对生成的配置策略设置的注解的键值对。例如,您可以通过定义以下参数来禁用策略模板: |
| 选填 |
复制所有策略的标签和注解,并将它们添加到副本策略中。默认设置为 |
| 选填 | 配置策略发送的合规性消息,使其根据当前的合规性使用指定的 Go 模板之一。 |
| 选填 |
策略违反的严重性。默认值为 |
| 选填 |
策略是否被禁用,代表不会传播它,因此结果为没有状态。默认值为 |
| 选填 |
策略的补救机制。参数值是 |
| 没有指定命名空间的命名空间对象是必需的 |
决定对象要应用到的受管集群中的命名空间。 |
| 选填 |
指定处于特定合规状态时要评估的策略的频率。使用
当受管集群具有较低资源时,可以将评估间隔设置为长时间轮询间隔,以减少 Kubernetes API 和策略控制器上的 CPU 和内存使用情况。这是持续时间的格式。例如, |
| 选填 |
指定合规策略的评估频率。如果要启用以前的轮询行为,请将此参数设置为 |
| 选填 |
指定不合规策略的评估频率。如果要启用以前的轮询行为,请将此参数设置为 |
| 选填 |
决定在策略被删除时是否应删除由策略创建或修改的对象。只有在策略补救操作被设置为 |
| 选填 |
描述在需要更新时是否删除并重新创建对象。当您更新 immutable 字段时,
当将 |
| 选填 |
指定是否记录集群中对象与策略中的 |
| 选填 |
应用此策略前必须处于特定合规性状态的对象列表。当 |
| 必填 | 要依赖的对象名称。 |
| 选填 | 要依赖的对象的命名空间。默认为 Policy Generator 设置的策略命名空间。 |
| 选填 |
对象需要处于的合规性状态。默认值为 |
| 选填 |
对象的种类。默认情况下,kind 设置为 |
| 选填 |
对象的 API 版本。默认值为 |
| 选填 | 您要创建的策略的描述。 |
| 选填 |
应用此策略前必须处于特定合规性状态的对象列表。您定义的依赖项会独立于 |
| 必填 | 要依赖的对象名称。 |
| 选填 | 要依赖的对象的命名空间。默认情况下,值设为为 Policy Generator 设置的策略命名空间。 |
| 选填 |
对象需要处于的合规性状态。默认值为 |
| 选填 |
对象的种类。默认值为 |
| 选填 |
对象的 API 版本。默认值为 |
| 选填 |
当 Policy Generator 等待其依赖项达到其所需状态时,绕过合规性状态检查。默认值为 |
| 选填 |
自动生成有关策略的 |
| 选填 |
在策略模板上自动生成 |
| 选填 |
这决定了是否为策略中包含的所有清单生成单一配置策略。如果设置为 |
| 选填 |
将 |
| 选填 |
当策略引用 Kyverno 策略清单时,这决定了在 Kyverno 策略违反时,是否生成额外的配置策略来接收 Red Hat Advanced Cluster Management 中的策略违反情况。默认值为 |
| 选填 |
策略在其 |
| 选填 |
覆盖 Gatekeeper 约束的 |
| 选填 |
策略加入的策略集合的数组。策略设置详情可在 |
| 选填 |
为策略生成放置清单。默认设置为 |
| 选填 |
当一个策略是策略集的一部分时,默认情况下,生成器不会为这个策略生成放置,因为会为策略集生成一个。将 |
| 选填 | 策略的放置配置。这默认为与所有集群匹配的放置配置。 |
| 选填 | 指定一个名称来整合包含相同集群标签选择器的放置。 |
| 选填 |
使用 |
| 选填 |
定义此参数以使用集群中已存在的放置。没有创建 |
| 选填 |
要重复使用现有放置,请指定相对于 |
| 选填 |
|
| 选填 |
|
| 选填 |
|
| 选填 |
策略设置的默认值。为此参数列出的任何默认值都会被 |
| 选填 |
策略的放置配置。这默认为与所有集群匹配的放置配置。有关此字段的描述,请参阅 |
| 选填 |
为策略集合生成放置清单。默认设置为 |
| 必填 |
要创建的策略列表以及覆盖默认值或 |
| 选填 | 您要创建的策略的描述。 |
| 必填 | 要创建的策略的名称。 |
| 必填 |
策略中包含的 Kubernetes 对象清单列表,以及覆盖默认值、此 |
| 必填 |
相对于 支持以下清单:
|
| 选填 |
当 |
| 选填 |
应用到路径上清单的 Kustomize 补丁列表。如果有多个清单,补丁需要设置 |
| 选填 |
策略在其 |
| 选填 |
要创建的策略集合列表,以及覆盖默认值或 |
| 必填 | 要创建的策略的名称。 |
| 选填 | 要创建的策略集的描述。 |
| 选填 |
包括在策略集中的策略列表。如果还指定了 |
2.3.7.4. 其他资源
- 阅读 生成策略来安装 GitOps Operator。
- 如需了解更多详细信息,请参阅策略设置控制器。
- 如需更多信息,请参阅应用 Kustomize。
- 如需了解更多主题,请参阅监管文档。
-
请参阅
kustomization.yaml
文件示例。 - 请参阅 Kubernetes 标签和选择器 文档。
- 如需更多详细信息,请参阅 Gatekeeper。
- 请参阅 Kustomize 文档。
2.3.8. 生成安装 Compliance Operator 的策略
生成将 Compliance Operator 安装到集群中的策略。对于使用 namespaced 安装模式的 Operator,如 Compliance Operator,还需要 OperatorGroup
清单。
完成以下步骤:
创建一个 YAML 文件,其中包含
Namespace
、Subscription
和名为compliance-operator.yaml
的OperatorGroup
清单。以下示例将这些清单安装到compliance-operator
命名空间中:apiVersion: v1 kind: Namespace metadata: name: openshift-compliance --- apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: compliance-operator namespace: openshift-compliance spec: targetNamespaces: - openshift-compliance --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: compliance-operator namespace: openshift-compliance spec: channel: release-0.1 name: compliance-operator source: redhat-operators sourceNamespace: openshift-marketplace
创建
PolicyGenerator
配置文件。查看以下PolicyGenerator
策略示例,该示例在所有 OpenShift Container Platform 受管集群上安装 Compliance Operator:apiVersion: policy.open-cluster-management.io/v1 kind: PolicyGenerator metadata: name: install-compliance-operator policyDefaults: namespace: policies placement: labelSelector: matchExpressions: - key: vendor operator: In values: - "OpenShift" policies: - name: install-compliance-operator manifests: - path: compliance-operator.yaml
将策略生成器添加到
kustomization.yaml
文件中。generators
部分可能类似以下配置:generators: - policy-generator-config.yaml
因此,生成的策略类似于以下文件:
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement-install-compliance-operator namespace: policies spec: predicates: - requiredClusterSelector: labelSelector: matchExpressions: - key: vendor operator: In values: - OpenShift --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-install-compliance-operator namespace: policies placementRef: apiGroup: cluster.open-cluster-management.io kind: Placement name: placement-install-compliance-operator subjects: - apiGroup: policy.open-cluster-management.io kind: Policy name: install-compliance-operator --- apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: annotations: policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration policy.open-cluster-management.io/standards: NIST SP 800-53 policy.open-cluster-management.io/description: name: install-compliance-operator namespace: policies spec: disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: install-compliance-operator spec: object-templates: - complianceType: musthave objectDefinition: apiVersion: v1 kind: Namespace metadata: name: openshift-compliance - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: compliance-operator namespace: openshift-compliance spec: channel: release-0.1 name: compliance-operator source: redhat-operators sourceNamespace: openshift-marketplace - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: compliance-operator namespace: openshift-compliance spec: targetNamespaces: - compliance-operator remediationAction: enforce severity: low
因此,会显示生成的策略。
2.3.9. 监管策略框架架构
使用 Red Hat Advanced Cluster Management for Kubernetes 监管声明周期来增强集群的安全性。产品监管生命周期基于使用支持的策略、流程和程序来管理中央接口页面中的安全性和合规性。参阅以下监管架构图:
查看监管架构图的以下组件描述:
监管策略框架: 前面的镜像表示作为受管集群上的
governance-policy-framework
pod 运行并包含以下控制器的框架:- spec sync controller: 将 hub 集群上的受管集群命名空间中的复制策略同步到受管集群上的受管集群命名空间。
- 状态同步控制器: 在 hub 和受管集群的复制策略中记录来自策略控制器的合规性事件。状态仅包含与当前策略相关的更新,如果策略被删除并重新创建,则不会考虑过去的状态。
-
模板同步控制器: 根据复制策略
spec.policy-templates
条目的定义,在受管集群中创建、更新和删除受管集群命名空间中的对象。 - Gatekeeper 同步控制器: 在对应的 Red Hat Advanced Cluster Management 策略中记录 Gatekeeper 约束审计结果作为合规事件。
- 策略传播器控制器 : 在 Red Hat Advanced Cluster Management hub 集群上运行,并根据绑定到 root 策略的放置在 hub 上的受管集群命名空间中生成复制策略。它还将合规状态从复制策略聚合到根策略状态,并根据绑定到 root 策略的策略自动化启动自动化。
- 监管策略附加控制器 : 在 Red Hat Advanced Cluster Management hub 集群上运行,并管理受管集群中策略控制器的安装。
2.3.9.1. 监管架构组件
监管架构还包括以下组件:
监管仪表板:提供云监管和风险详情的概述信息,其中包括策略和集群违反情况。请参阅 Manage Governance dashboard 部分,以了解 Red Hat Advanced Cluster Management for Kubernetes 策略的结构,以及如何使用 Red Hat Advanced Cluster Management for Kubernetes 监管 仪表板。
备注:
-
当策略传播到受管集群时,首先会复制到 hub 集群上的集群命名空间中,并使用
namespaceName.policyName
命名并标记。在创建策略时,请确保namespaceName.policyName
的长度不超过 63 个字符,因为 Kubernetes 对标签值有限制。 -
当您在 hub 集群中搜索策略时,您可能还会在受管集群命名空间中收到复制策略的名称。例如,如果您在
default
命名空间中搜索policy-dhaz-cert
,hub 集群中的以下策略名称可能也会出现在受管集群命名空间中:default.policy-dhaz-cert
。
-
当策略传播到受管集群时,首先会复制到 hub 集群上的集群命名空间中,并使用
- 基于策略的监管框架: 支持根据与集群关联的属性(如一个地区)支持策略创建和部署到各种受管集群。以下是在开源社区中向集群部署策略的预定义策略和说明的示例。另外,当出现违反策略的情况时,可以将自动化配置为运行并采取用户选择的任何操作。
-
开源社区:在 Red Hat Advanced Cluster Management 策略框架的基础上支持社区贡献。策略控制器和第三方策略也是
open-cluster-management/policy-collection
存储库的一部分。您可以使用 GitOps 贡献和部署策略。
2.3.9.2. 其他资源
2.3.10. 监管仪表板
使用监管( Governance )仪表板创建、查看和编辑您的资源,来管理您的安全策略和策略违反情况。您可以使用命令行和控制台为您的策略创建 YAML 文件。从控制台继续读取 监管 仪表板的详情。
2.3.10.1. 监管页面
Governance 页中显示以下标签页,Policy set, 和 Policies。阅读以下描述以了解显示哪些信息:
概述
在 Overview 选项卡中显示以下摘要卡: Policy set violations,Policy violations,Clusters,Categories, Controls, 和 Standards。
策略集合
创建和管理 hub 集群策略集。
策略(policy)
- 创建和管理安全策略。策略列表列出了以下策略详情: Name、Namespace 和 Cluster violations。
- 您可以编辑、启用或禁用,将补救设置为 inform 或 enforce,或通过选择 Actions 图标来删除策略。您可以通过选择要展开行的下拉箭头来查看特定策略的类别和标准。
- 在 Manage 列对话框中重新排序您的表列。选中要显示的对话框的 Manage 列 图标。要重新排序您的列,请选择 Reorder 图标并移动列名称。对于您想要显示在表中列,点击特定列名称的复选框,然后选择 Save 按钮。
选择多个策略并点击 Actions 按钮来完成批量操作。您还可以点 Filter 按钮自定义您的策略表。
当您在表列表中选择一个策略时,控制台中会显示以下信息标签页:
- Details :选择 Details 选项卡来查看策略详情和放置详情。在 Placement 表中,Compliance 列提供了查看所显示集群的合规性的链接。
- Results :选择 Results 选项卡来查看与放置关联的所有集群的表列表。
- 从 Message 列中,点 View details 链接来查看模板详情、模板 YAML 和相关资源。您还可以查看相关的资源。点 View history 链接查看违反消息以及最后一次报告的时间。
2.3.10.2. 监管自动化配置
如果为特定策略配置了自动化,您可以选择自动化来查看更多详情。查看以下自动化调度频率选项的描述:
-
Manual run:手动将此自动化设置为运行一次。在自动化运行后,它将设置为
disabled
。注:您只能在禁用调度频率时选择 Manual run 模式。 -
Run once mode:违反策略时,自动化将运行一次。在自动化运行后,它将设置为
disabled
。在将自动化设置为禁用
后,您必须继续手动运行自动化。当使用 once mode 时,target_clusters
的额外变量会自动提供违反策略的集群列表。Ansible Automation Platform Job 模板需要为EXTRA VARIABLES
段(也称为extra_vars
)启用PROMPT ON LAUNCH
。 -
运行 everyEvent 模式 :违反策略时,每个受管集群的唯一策略都会运行自动化。使用
DelayAfterRunSeconds
参数在同一集群中重启自动化前设置最小秒数。如果策略在延迟期内违反多次,并保持在违反的状态,则自动化会在延迟期后运行一次。默认值为 0 秒,它仅适用于everyEvent
模式。当您运行everyEvent
模式时,target_clusters
和 Ansible Automation Platform 作业模板的额外变量与 once mode 相同。 -
Disable automation:当调度的自动化被设置为
禁用
时,在更新设置前不会运行自动化。
Ansible Automation Platform 作业的 extra_vars
中会自动提供以下变量:
-
policy_name
:在 hub 集群上启动 Ansible Automation Platform 作业的不合规根策略的名称。 -
policy_namespace
: root 策略的命名空间。 -
hub_cluster
:hub 集群的名称,它由集群
DNS
对象中的值决定。 -
policy_sets
:此参数包含根策略的所有关联的策略集名称。如果策略不在策略集中,policy_set
参数为空。 -
policy_violations
:此参数包含不合规集群名称的列表,值是每个不合规集群的策略status
字段。
2.3.10.3. 其他资源
查看以下主题以了解更多有关创建和更新您的安全策略的信息。
2.3.11. 创建配置策略
您可以使用命令行界面 (CLI) 或者从控制台为配置策略创建 YAML 文件。从控制台创建配置策略时,YAML 编辑器会显示 YAML 文件。
2.3.11.1. 先决条件
- 需要的访问权限 : 管理员或集群管理员
- 如果您有一个现有的 Kubernetes 清单,请考虑使用 Policy Generator 在策略中自动包含清单。请参阅策略生成器文档。
2.3.11.2. 通过 CLI 创建配置策略
完成以下步骤,通过 CLI 创建配置策略:
为您的配置策略创建一个 YAML 文件。运行以下命令:
oc create -f configpolicy-1.yaml
您的配置策略可能类似以下策略:
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy-1 namespace: my-policies policy-templates: - apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: mustonlyhave-configuration spec: namespaceSelector: include: ["default"] exclude: ["kube-system"] remediationAction: inform disabled: false complianceType: mustonlyhave object-templates:
运行以下命令来应用策略:
oc apply -f <policy-file-name> --namespace=<namespace>
运行以下命令,验证并列出策略:
oc get policies.policy.open-cluster-management.io --namespace=<namespace>
您的配置策略已创建。
2.3.11.2.1. 通过 CLI 查看您的配置策略
完成以下步骤,通过 CLI 查看您的配置策略:
运行以下命令,查看具体配置策略的详情:
oc get policies.policy.open-cluster-management.io <policy-name> -n <namespace> -o yaml
运行以下命令,查看您的配置策略的描述:
oc describe policies.policy.open-cluster-management.io <name> -n <namespace>
2.3.11.2.2. 从控制台查看您的配置策略
在控制台中查看任何配置策略及其状态。
从控制台登录到集群后,选择 Governance 来查看您的策略的表列表。注: 您可以选择 All policies 选项卡或者 Cluster violations 选项卡来过滤您的策略表列表。
选择一个策略来查看更多详情。此时会显示 Details、Clusters 和 Templates 标签页。
2.3.11.3. 禁用配置策略
要禁用您的配置策略,请从策略的 Actions 菜单中选择 Disable policy。策略被禁用,但不被删除。
2.3.11.4. 删除配置策略
通过 CLI 或控制台删除配置策略。完成以下步骤:
要从目标集群或集群中删除策略,请运行以下命令:
oc delete policies.policy.open-cluster-management.io <policy-name> -n <namespace>
运行以下命令验证您的策略是否已移除:
oc get policies.policy.open-cluster-management.io <policy-name> -n <namespace>
- 要从控制台删除配置策略,点您要在策略违反表中删除的策略的 Actions 图标,然后点 Delete。
您的策略已删除。
2.3.11.5. 其他资源
- 如需被 Red Hat Advanced Cluster Management 支持的配置策略示例,查看 CM-Configuration-Management 文件夹。
- 或者,请参阅 示例配置策略表,以查看控制器监控的其他配置策略。
2.3.12. 为监管配置 Ansible Automation Platform
Red Hat Advanced Cluster Management for Kubernetes 监管可与 Red Hat Ansible Automation Platform 集成,以创建策略违反自动化。您可以从 Red Hat Advanced Cluster Management 控制台配置自动化。
2.3.12.1. 先决条件
- 支持的 OpenShift Container Platform 版本
- 已安装 Ansible Automation Platform 版本 3.7.3 或更高版本。最佳实践是安装最新支持的 Ansible Automation Platform 版本。如需了解更多详细信息,请参阅 Red Hat Ansible Automation Platform 文档。
从 Operator Lifecycle Manager 安装 Ansible Automation Platform Resource Operator。在 Update Channel 部分中,选择
stable-2.x-cluster-scoped
。选择 All namespaces on the cluster (default) 安装模式。注: 在运行 Ansible Automation Platform 作业模板时,请确保 Ansible Automation Platform 作业模板是幂等的。如果没有 Ansible Automation Platform Resource Operator,您可以在 Red Hat OpenShift Container Platform OperatorHub 页面中找到它。
有关安装和配置 Red Hat Ansible Automation Platform 的更多信息,请参阅设置 Ansible 任务。
2.3.12.2. 从控制台创建策略违反自动化
登录到 Red Hat Advanced Cluster Management hub 集群后,从导航菜单中选择 Governance,然后点 Policies 选项卡来查看策略表。
单击 Automation 列中的 Configure,为特定策略配置自动化。当策略自动化面板出现时,您可以创建自动化。在 Ansible credential 部分中,单击下拉菜单来选择 Ansible 凭据。如果您需要添加凭证,请参阅管理凭证概述。
注:此凭证复制到与策略相同的命名空间中。该凭据供创建用于启动自动化的 AnsibleJob
资源使用。控制台的 Credentials 部分中的 Ansible 凭据更改会被自动更新。
选择了凭据后,单击 Ansible 作业下拉列表来选择作业模板。在 Extra variables 部分,添加来自 PolicyAutomation
的 extra_vars
部分中的参数值。选择自动化的频率。您可以选择 Run once mode、Run everyEvent mode 或 Disable automation。
选择 Submit 保存您的策略违反自动化。当您从 Ansible 作业详情侧面板选择 View Job 链接时,链接会将您定向到 Search 页面上的作业模板。成功创建自动化后,它会显示在 Automation 列中。
注: 当您删除具有关联策略自动化的策略时,策略自动化会在清理过程中自动删除。
您的策略违反自动化是从控制台创建的。
2.3.12.3. 通过 CLI 创建策略违反自动化
完成以下步骤,通过 CLI 配置策略违反自动化:
-
在终端中,使用
oc login
命令登录到 Red Hat Advanced Cluster Management hub 集群。 - 查找或创建您要向其添加自动化的策略。请注意策略名称和命名空间。
使用以下示例创建
PolicyAutomation
资源,作为指南:apiVersion: policy.open-cluster-management.io/v1beta1 kind: PolicyAutomation metadata: name: policyname-policy-automation spec: automationDef: extra_vars: your_var: your_value name: Policy Compliance Template secret: ansible-tower type: AnsibleJob mode: disabled policyRef: policyname
-
上例中的 Automation 模板名称是
Policy Compliance Template
。更改该值,使其与您的任务模板名称匹配。 -
在
extra_vars
部分中,添加您需要传递给 Automation 模板的任何参数。 -
将模式设置为
once
、everyEvent
或disabled
。 -
将
policyRef
设置为您的策略的名称。 -
在与包含 Ansible Automation Platform 凭据的
PolicyAutomation
资源相同的命名空间中创建一个 secret。在上例中,secret 名称为ansible-tower
。使用应用程序生命周期中的示例来查看如何创建 secret。 创建
PolicyAutomation
资源。备注:
可以通过在
PolicyAutomation
资源中添加以下注解来立即运行策略自动化:metadata: annotations: policy.open-cluster-management.io/rerun: "true"
-
当策略为
once
模式时,当策略不合规时自动化将运行。添加名为target_clusters
的extra_vars
变量,值是每个受管集群名称的数组,其中的策略不合规。 -
当策略处于
everyEvent
模式且DelayAfterRunSeconds
超过定义的时间值时,策略不合规,且自动化会针对每个策略违反。
2.4. 使用外部工具进行策略部署
要将 CertificatePolicy
、ConfigurationPolicy
、OperatorPolicy
资源和 Gatekeeper 约束直接部署到受管集群,您可以使用外部工具,如 Red Hat OpenShift GitOps。
2.4.1. 部署工作流
您的 CertificatePolicy
、ConfigurationPolicy
、OperatorPolicy
策略必须位于 open-cluster-management-policies
命名空间中或受管集群命名空间中。其他命名空间中的策略将被忽略,且不会收到状态。如果您使用带有 Argo CD 版本早于 2.13 的 Red Hat OpenShift GitOps 版本,您必须配置 Red Hat Advanced Cluster Management for Kubernetes 策略健康检查
OpenShift GitOps 服务帐户必须具有管理 Red Hat Advanced Cluster Management for Kubernetes 策略的权限。使用 OpenShift GitOps 部署策略,并从监管仪表板的 Discovered 策略表中查看策略。策略按照 策略名称和
kind
字段分组。
2.4.2. 其他资源
第 3 章 策略控制器高级配置
您可以使用 ManagedClusterAddOn
自定义资源自定义受管集群上的策略控制器配置。以下 ManagedClusterAddOns
配置策略框架、Kubernetes 配置策略控制器和证书策略控制器。需要的访问权限:集群管理员
3.1. 配置监管框架的并发性
为每个受管集群配置监管框架的并发性。要更改默认值 2
,请在引号内设置 policy-evaluation-concurrency
注解,使用非零整数。然后,在 hub 集群的受管集群命名空间中将 ManagedClusterAddOn
对象名称上的值设置为 governance-policy-framework
。
请参阅以下 YAML 示例,其中 concurrency 在名为 cluster1
的受管集群中被设置为 2
:
apiVersion: addon.open-cluster-management.io/v1alpha1 kind: ManagedClusterAddOn metadata: name: governance-policy-framework namespace: cluster1 annotations: policy-evaluation-concurrency: "2" spec: installNamespace: open-cluster-management-agent-addon
要设置 client-qps
和 client-burst
注解,请更新 ManagedClusterAddOn
资源并定义参数。
请参阅以下 YAML 示例,其中对每秒的查询设置为 30
,并且名为 cluster1
的受管集群中 burst 被设置为 45
:
apiVersion: addon.open-cluster-management.io/v1alpha1 kind: ManagedClusterAddOn metadata: name: governance-policy-framework namespace: cluster1 annotations: client-qps: "30" client-burst: "45" spec: installNamespace: open-cluster-management-agent-addon
3.2. 配置配置策略控制器的并发
您可以为每个受管集群配置配置策略控制器的并发性,以更改它可以同时评估的配置策略。要更改默认值 2
,请在引号内设置 policy-evaluation-concurrency
注解,使用非零整数。然后,将 ManagedClusterAddOn
对象名称上的值设置为 hub 集群的受管集群命名空间中的 config-policy-controller
。
注:增加并发值会增加 config-policy-controller
pod、Kubernetes API 服务器和 OpenShift API 服务器上的 CPU 和内存使用率。
请参阅以下 YAML 示例,其中 concurrency 在名为 cluster1
的受管集群中被设置为 5
:
apiVersion: addon.open-cluster-management.io/v1alpha1 kind: ManagedClusterAddOn metadata: name: config-policy-controller namespace: cluster1 annotations: policy-evaluation-concurrency: "5" spec: installNamespace: open-cluster-management-agent-addon
3.3. 配置对 API 服务器的请求率
配置配置策略控制器在每个受管集群上进行的 API 服务器的请求率。速率提高了配置策略控制器的响应,这也会增加 Kubernetes API 服务器和 OpenShift API 服务器的 CPU 和内存使用率。默认情况下,请求的速度会根据 policy-evaluation-concurrency
设置进行扩展,并被设置为每秒 30
个查询(QPS),带有 45
burst 值,代表短时间内的请求数。
您可以通过在引号内设置 client-qps
和 client-burst
注解来配置速率和突发。您可以在 hub 集群的受管集群命名空间中将 ManagedClusterAddOn
对象名称上的值设置为 config-policy-controller
。
请参阅以下 YAML 示例,其中对每秒的查询设置为 20
,并且受管集群上 burst 被设置为 100
,名为 cluster1
:
apiVersion: addon.open-cluster-management.io/v1alpha1 kind: ManagedClusterAddOn metadata: name: config-policy-controller namespace: cluster1 annotations: client-qps: "20" client-burst: "100" spec: installNamespace: open-cluster-management-agent-addon
3.4. 配置调试日志
当您为每个策略控制器配置并收集调试日志时,您可以调整日志级别。
注: 缩减调试日志的卷意味着日志中显示较少的信息。
您可以减少策略控制器发出的调试日志,以便在日志中仅显示错误的错误。要减少调试日志,请在注解中将 debug 日志值设置为 -1
。查看每个值代表什么:
-
-1
: 仅限错误日志 -
0
:信息性日志 -
1
: 调试日志 -
2
: 详细的调试日志
要接收 Kubernetes 配置控制器的第二个调试信息级别,请将值为 2
的 log-level
注解添加到 ManagedClusterAddOn
自定义资源中。默认情况下,日志级别
被设置为 0
,这意味着您会收到信息性的消息。查看以下示例:
apiVersion: addon.open-cluster-management.io/v1alpha1 kind: ManagedClusterAddOn metadata: name: config-policy-controller namespace: cluster1 annotations: log-level: "2" spec: installNamespace: open-cluster-management-agent-addon
另外,对于 ConfigurationPolicy
资源中的每个 spec.object-template[]
,您可以将参数 recordDiff
设置为 Log
。objectDefinition
和受管集群上的对象之间的差别记录在受管集群的 config-policy-controller
pod 中。查看以下示例:
这个 ConfigurationPolicy
资源带有 recordDiff: Log
:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: my-config-policy spec: object-templates: - complianceType: musthave recordDiff: Log objectDefinition: apiVersion: v1 kind: ConfigMap metadata: name: my-configmap data: fieldToUpdate: "2"
如果集群中的 ConfigMap
资源列出了 fieldToUpdate: "1"
,则 diff 会出现在 config-policy-controller
pod 日志中,并带有以下信息:
Logging the diff: --- default/my-configmap : existing +++ default/my-configmap : updated @@ -2,3 +2,3 @@ data: - fieldToUpdate: "1" + fieldToUpdate: "2" kind: ConfigMap
重要: 避免记录安全对象的区别。差别以纯文本形式记录。
3.5. 监管指标
策略框架公开显示策略分布和状态的指标。在 hub 集群中使用 policy_governance_info
指标来查看趋势并分析任何策略失败。有关指标概述,请参阅以下主题:
3.5.1. Metric: policy_governance_info
OpenShift Container Platform 监控组件会收集 policy_governance_info
指标。如果启用可观察性,组件会收集一些聚合数据。
注: 如果启用可观察性,请从 Grafana Explore 页面输入对指标的查询。创建策略时,您要创建一个 root 策略。框架监视根策略、放置
资源和 PlacementBindings
资源,以获取有关创建 传播策略的 位置的信息,以将策略分发到受管集群。
对于根和传播策略,如果策略合规,则会记录 0
的指标,如果策略不合规,则记录 1
;如果它处于 unknown 或 pending 状态,则会记录 1。
policy_governance_info
指标使用以下标签:
-
type
:标签值为root
或propagated
。 -
policy
:关联的根策略的名称。 -
policy_namespace
:定义根策略的 hub 集群上的命名空间。 -
cluster_namespace
:分发策略的集群的命名空间。
这些标签和值启用查询来显示集群中可能发生的许多事情,这些情况可能很难跟踪。
注: 如果您不需要指标数据,且对性能或安全性有任何顾虑,您可以禁用指标集合。在传播器部署中,将 DISABLE_REPORT_METRICS
环境变量设置为 true
。您还可以将 policy_governance_info
指标添加到 observability allowlist 作为自定义指标。如需了解更多详细信息,请参阅 添加自定义指标。
3.5.2. Metric: config_policies_evaluation_duration_seconds
config_policies_evaluation_duration_seconds
直方图跟踪集群中准备好评估的所有配置策略所需的秒数。使用以下指标查询直方图:
-
config_policies_evaluation_duration_seconds_bucket
:存储桶是累积的,以秒为单位的以下可能的值:1, 3, 9, 10.5, 15, 30, 60, 90, 90, 120, 180, 300, 450, 600 等。 -
config_policies_evaluation_duration_seconds_count
: 所有事件的计数。 -
config_policies_evaluation_duration_seconds_sum
: 所有值的总和。
使用 config_policies_evaluation_duration_seconds
指标来确定 ConfigurationPolicy
evaluationInterval
设置是否需要为不需要频繁评估的资源密集型策略更改。您还可以以 Kubernetes API 服务器的资源使用率更高的成本增加并发性。如需了解更多详细信息,请参阅配置并发 部分。
要接收有关评估配置策略的时间的信息,请执行类似以下表达式的 Prometheus 查询:
rate(config_policies_evaluation_duration_seconds_sum[10m])/rate (config_policies_evaluation_duration_seconds_count[10m]
open-cluster-management-agent-addon
命名空间中的受管集群上运行的 config-policy-controller
pod 会计算指标。config-policy-controller
默认不会将指标发送到可观察性。
3.6. 验证配置更改
当使用控制器应用新配置时,Cluster Applied
参数会在 ManagedClusterAddOn
中更新。该条件时间戳有助于正确验证配置。例如,这个命令可在 local-cluster
中的 cert-policy-controller
已更新时验证:
oc get -n local-cluster managedclusteraddon cert-policy-controller | grep -B4 'type: ManifestApplied'
您可能会收到以下输出:
- lastTransitionTime: "2023-01-26T15:42:22Z" message: manifests of addon are applied successfully reason: AddonManifestApplied status: "True" type: ManifestApplied
3.7. 其他资源
- 请参阅 Kubernetes 配置策略控制器
- 返回监管主题以获取更多主题。
- 返回到此主题的开头,策略控制器高级配置。
第 4 章 支持的 Red Hat Advanced Cluster Management for Kubernetes 策略
查看支持的策略示例,了解如何在 Red Hat Advanced Cluster Management for Kubernetes 中创建和管理策略时如何在 hub 集群上定义规则、流程和控制。
4.1. 配置策略示例策略表
查看以下示例配置策略:
策略示例 | 描述 |
---|---|
命名空间策略 | 确保环境与命名空间一致。请参阅 Kubernetes 命名空间文档。 |
Pod 策略 | 确保集群工作负载配置。请参阅 Kubernetes Pod 文档。 |
内存用量策略 | 使用限制范围限制工作负载资源使用情况。请参阅限制范围文档。 |
Pod 安全策略(已弃用) | 确保工作负载安全性一致。请参阅 Kubernetes Pod 安全策略文档。 |
角色策略 | 使用角色和角色绑定管理角色绑定。请参阅 Kubernetes RBAC 文档。 |
安全内容约束 (SCC) 策略 | 使用安全性上下文约束管理工作负载权限。请参阅 OpenShift Container Platform 文档中的管理安全性上下文约束文档。 |
ETCD 加密策略 | 确保通过 etcd 加密的数据安全性。请参阅 OpenShift Container Platform 文档中的加密 etcd 数据。 |
Compliance operator 策略 | 部署 Compliance Operator,以利用 OpenSCAP 扫描并强制实施集群的合规性状态。请参阅 OpenShift Container Platform 文档中的了解 Compliance Operator 部分。 |
Compliance operator E8 扫描 | 应用 Compliance operator 策略后,部署 Essential 8 (E8) 扫描来检查 E8 安全配置集的合规性。请参阅 OpenShift Container Platform 文档中的了解 Compliance Operator 部分。 |
Compliance operator CIS 扫描 | 应用 Compliance operator 策略后,部署互联网安全中心 (CIS) 扫描,以检查与 CIS 安全配置集的合规性。请参阅 OpenShift Container Platform 文档中的了解 Compliance Operator 部分。 |
镜像漏洞策略 | 部署 Container Security Operator,并检测集群中运行的 pod 中的已知镜像漏洞。请参阅 Container Security Operator GitHub 仓库。 |
Gatekeeper operator 部署 | Gatekeeper 是一个准入 Webhook,它强制执行基于自定义资源定义的策略,由 Open Policy Agent (OPA)策略引擎运行。请参阅 Gatekeeper 文档。Gatekeeper operator 用于安装 Gatekeeper。如需更多信息,请参阅 Gatekeeper operator 概述。 |
Gatekeeper 合规策略 | 将 Gatekeeper 部署到集群后,部署此示例 Gatekeeper 策略以确保在集群中创建的命名空间标记为指定。如需更多信息,请参阅 集成 Gatekeeper 约束和约束模板。 |
Red Hat OpenShift Platform Plus 策略集 |
Red Hat OpenShift Platform Plus 是混合云套件,用于为多个基础架构安全构建、部署、运行和管理应用程序。您可以使用通过 Red Hat Advanced Cluster Management 应用程序提供的 |
Red Hat OpenShift Container Platform 4.x 还支持 Red Hat Advanced Cluster Management 配置策略。
查看以下策略文档以了解如何应用策略:
更多主题,请参阅监管。
4.2. 命名空间策略
Kubernetes 配置策略控制器负责监控命名空间策略的状态。应用命名空间策略来为您的命名空间定义特定规则。
在以下部分了解更多有关命名空间策略结构的详细信息:
4.2.1. 命名空间策略 YAML 结构
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: namespace: annotations: policy.open-cluster-management.io/standards: policy.open-cluster-management.io/categories: policy.open-cluster-management.io/controls: policy.open-cluster-management.io/description: spec: remediationAction: disabled: policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: spec: remediationAction: severity: object-templates: - complianceType: objectDefinition: kind: Namespace apiVersion: v1 metadata: name: ...
4.2.2. 命名空间策略 YAML 表
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 必填 | 策略的命名空间。 |
| 选填 |
指定您的策略的修复。参数值是 |
| 必填 |
将值设为 |
| 必填 | 用于列出包含必须接受评估或应用到受管集群的 Kubernetes 对象的配置策略。 |
4.2.3. 命名空间策略示例
请参阅 policy-namespace.yaml
以查看策略示例。
如需了解更多详细信息,请参阅管理安全策略。请参阅 Hub 集群策略框架 文档,以及 Kubernetes 配置策略控制器 以了解其他配置策略。
4.3. Pod 策略
Kubernetes 配置策略控制器负责监控 Pod 策略的状态。应用 Pod 策略来为 Pod 定义容器规则。集群中必须存在 pod 才能使用此信息。
在以下部分了解更多有关 pod 策略结构的详细信息:
4.3.1. Pod 策略 YAML 结构
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: namespace: annotations: policy.open-cluster-management.io/standards: policy.open-cluster-management.io/categories: policy.open-cluster-management.io/controls: policy.open-cluster-management.io/description: spec: remediationAction: disabled: policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: spec: remediationAction: severity: namespaceSelector: exclude: include: matchLabels: matchExpressions: object-templates: - complianceType: objectDefinition: apiVersion: v1 kind: Pod metadata: name: spec: containers: - image: name: ...
4.3.2. Pod 策略表
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 必填 | 策略的命名空间。 |
| 选填 |
指定您的策略的修复。参数值是 |
| 必填 |
将值设为 |
| 必填 | 用于列出包含必须接受评估或应用到受管集群的 Kubernetes 对象的配置策略。 |
4.3.3. Pod 策略示例
请参阅 policy-pod.yaml
查看策略示例。
请参阅 Kubernetes 配置策略控制器,以查看配置控制器监控的其他配置策略,并查看 Hub 集群策略框架来查看策略 YAML 结构和其他字段的完整描述。返回到 创建配置策略 文档,以管理其他策略。
4.4. 内存用量策略
Kubernetes 配置策略控制器负责监控内存用量策略的状态。使用内存用量策略来限制或约束您的内存和计算用量。如需更多信息,请参阅 Kubernetes 文档中的限制范围。
在以下部分了解更多有关内存用量策略结构的详细信息:
4.4.1. 内存用量策略 YAML 结构
您的内存用量策略可能类似以下 YAML 文件:
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: namespace: annotations: policy.open-cluster-management.io/standards: policy.open-cluster-management.io/categories: policy.open-cluster-management.io/controls: policy.open-cluster-management.io/description: spec: remediationAction: disabled: policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: spec: remediationAction: severity: namespaceSelector: exclude: include: matchLabels: matchExpressions: object-templates: - complianceType: mustonlyhave objectDefinition: apiVersion: v1 kind: LimitRange metadata: name: spec: limits: - default: memory: defaultRequest: memory: type: ...
4.4.2. 内存用量策略表
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 必填 | 策略的命名空间。 |
| 选填 |
指定您的策略的修复。参数值是 |
| 必填 |
将值设为 |
| 必填 | 用于列出包含必须接受评估或应用到受管集群的 Kubernetes 对象的配置策略。 |
4.4.3. 内存用量策略示例
请参阅 policy-limitmemory.yaml
查看策略示例。如需了解更多详细信息,请参阅管理安全策略。请参阅 Hub 集群策略框架 文档,以及 Kubernetes 配置策略控制器,以查看控制器监控的其他配置策略。
4.5. Pod 安全策略(已弃用)
Kubernetes 配置策略控制器负责监控 Pod 安全策略的状态。应用 Pod 安全策略来保护 Pod 和容器。
在以下部分了解更多有关 Pod 安全策略结构的详细信息:
4.5.1. Pod 安全策略 YAML 结构
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: namespace: annotations: policy.open-cluster-management.io/standards: policy.open-cluster-management.io/categories: policy.open-cluster-management.io/controls: policy.open-cluster-management.io/description: spec: remediationAction: disabled: policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: spec: remediationAction: severity: namespaceSelector: exclude: include: matchLabels: matchExpressions: object-templates: - complianceType: objectDefinition: apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: annotations: seccomp.security.alpha.kubernetes.io/allowedProfileNames: spec: privileged: allowPrivilegeEscalation: allowedCapabilities: volumes: hostNetwork: hostPorts: hostIPC: hostPID: runAsUser: seLinux: supplementalGroups: fsGroup: ...
4.5.2. Pod 安全策略表
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 必填 | 策略的命名空间。 |
| 选填 |
指定您的策略的修复。参数值是 |
| 必填 |
将值设为 |
| 必填 | 用于列出包含必须接受评估或应用到受管集群的 Kubernetes 对象的配置策略。 |
4.5.3. Pod 安全策略示例
对 Pod 安全策略的支持已从 OpenShift Container Platform 中删除,以及 Kubernetes v1.25 及更新的版本。如果应用 PodSecurityPolicy
资源,您可能会收到以下不合规的信息:
violation - couldn't find mapping resource with kind PodSecurityPolicy, please check if you have CRD deployed
- 有关包括弃用通知的更多信息,请参阅 Kubernetes 文档中的 Pod 安全策略。
-
请参阅
policy-psp.yaml
以查看示例策略。如需更多信息,请参阅创建 配置策略。 - 如需有关 策略 YAML 结构的完整描述,请参阅 Hub 集群策略框架 文档,以及 Kubernetes 配置策略控制器,以查看控制器监控的其他配置策略。
4.6. 角色策略
Kubernetes 配置策略控制器负责监控角色策略的状态。在 object-template
中定义角色来为集群中的特定角色设置规则和权限。
在以下部分了解更多有关角色策略结构的详细信息:
4.6.1. 角色策略 YAML 结构
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: namespace: annotations: policy.open-cluster-management.io/standards: policy.open-cluster-management.io/categories: policy.open-cluster-management.io/controls: policy.open-cluster-management.io/description: spec: remediationAction: disabled: policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: spec: remediationAction: severity: namespaceSelector: exclude: include: matchLabels: matchExpressions: object-templates: - complianceType: objectDefinition: apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: rules: - apiGroups: resources: verbs: ...
4.6.2. 角色策略表
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 必填 | 策略的命名空间。 |
| 选填 |
指定您的策略的修复。参数值是 |
| 必填 |
将值设为 |
| 必填 | 用于列出包含必须接受评估或应用到受管集群的 Kubernetes 对象的配置策略。 |
4.6.3. 角色策略示例
应用角色策略来为集群中的特定角色设置规则和权限。如需有关角色的更多信息,请参阅基于角色的访问控制。查看角色策略示例,请参阅 policy-role.yaml
。
要了解如何管理角色策略,请参阅创建配置策略 以了解更多信息。请参阅 Kubernetes 配置策略控制器,以查看监控控制器的其他配置策略。
4.7. 角色绑定策略
Kubernetes 配置策略控制器负责监控角色绑定策略的状态。应用角色绑定策略,将策略绑定到受管集群中的命名空间。
在以下部分了解更多有关命名空间策略结构的详细信息:
4.7.1. 角色绑定策略 YAML 结构
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: namespace: annotations: policy.open-cluster-management.io/standards: policy.open-cluster-management.io/categories: policy.open-cluster-management.io/controls: policy.open-cluster-management.io/description: spec: remediationAction: disabled: policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: spec: remediationAction: severity: namespaceSelector: exclude: include: matchLabels: matchExpressions: object-templates: - complianceType: objectDefinition: kind: RoleBinding # role binding must exist apiVersion: rbac.authorization.k8s.io/v1 metadata: name: subjects: - kind: name: apiGroup: roleRef: kind: name: apiGroup: ...
4.7.2. 角色绑定策略表
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 必填 | 策略的命名空间。 |
| 选填 |
指定您的策略的修复。参数值是 |
| 必填 |
将值设为 |
| 必填 | 用于列出包含必须接受评估或应用到受管集群的 Kubernetes 对象的配置策略。 |
4.7.3. 角色绑定策略示例
请参阅 policy-rolebinding.yaml
查看策略示例。有关策略 YAML 结构和其他字段的完整描述,请参阅 Hub 集群策略框架。请参阅 Kubernetes 配置策略控制器 文档,以了解其他配置策略。
4.8. 安全性上下文约束策略
Kubernetes 配置策略控制器负责监控安全性上下文约束 (SCC) 策略的状态。应用安全性上下文约束 (SCC) 策略,通过在策略中定义条件来控制 Pod 的权限。
在以下部分了解更多有关 SCC 策略的详细信息:
4.8.1. SCC 策略 YAML 结构
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: namespace: annotations: policy.open-cluster-management.io/standards: policy.open-cluster-management.io/categories: policy.open-cluster-management.io/controls: policy.open-cluster-management.io/description: spec: remediationAction: disabled: policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: spec: remediationAction: severity: namespaceSelector: exclude: include: matchLabels: matchExpressions: object-templates: - complianceType: objectDefinition: apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: allowHostDirVolumePlugin: allowHostIPC: allowHostNetwork: allowHostPID: allowHostPorts: allowPrivilegeEscalation: allowPrivilegedContainer: fsGroup: readOnlyRootFilesystem: requiredDropCapabilities: runAsUser: seLinuxContext: supplementalGroups: users: volumes: ...
4.8.2. SCC 策略表
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 必填 | 策略的命名空间。 |
| 选填 |
指定您的策略的修复。参数值是 |
| 必填 |
将值设为 |
| 必填 | 用于列出包含必须接受评估或应用到受管集群的 Kubernetes 对象的配置策略。 |
如需有关 SCC 策略内容的解释,请参阅 OpenShift Container Platform 文档中的管理安全性上下文约束。
4.8.3. SCC 策略示例
应用安全性上下文约束 (SCC) 策略,通过在策略中定义条件来控制 Pod 的权限。如需更多信息,请参阅管理安全性上下文约束。
请参阅 policy-scc.yaml
查看策略示例。有关策略 YAML 结构和其他字段的完整描述,请参阅 Hub 集群策略框架 文档。请参阅 Kubernetes 配置策略控制器 文档,以了解其他配置策略。
4.9. ETCD 加密策略
应用 etcd-encryption
策略,在 ETCD 数据存储中检测或启用敏感数据的加密。Kubernetes 配置策略控制器负责监控 etcd-encryption
策略的状态。如需更多信息,请参阅 OpenShift Container Platform 文档中的 加密 etcd 数据。注 :ETCD 加密策略只支持 Red Hat OpenShift Container Platform 4 及更新的版本。
在以下部分了解更多有关 etcd-encryption
策略结构的详细信息:
4.9.1. ETCD 加密策略 YAML 结构
etcd-encryption
策略可能类似以下 YAML 文件:
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: namespace: annotations: policy.open-cluster-management.io/standards: policy.open-cluster-management.io/categories: policy.open-cluster-management.io/controls: policy.open-cluster-management.io/description: spec: remediationAction: disabled: policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: spec: remediationAction: severity: object-templates: - complianceType: objectDefinition: apiVersion: config.openshift.io/v1 kind: APIServer metadata: name: spec: encryption: ...
4.9.2. ETCD 加密策略表
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 必填 | 策略的命名空间。 |
| 选填 |
指定您的策略的修复。参数值是 |
| 必填 |
将值设为 |
| 必填 | 用于列出包含必须接受评估或应用到受管集群的 Kubernetes 对象的配置策略。 |
4.9.3. ETCD 加密策略示例
如需策略示例,请参阅 policy-etcdencryption.yaml
。请参阅 Hub 集群策略框架 文档和 Kubernetes 配置策略控制器,以查看策略和配置策略字段的更多详情。
4.10. Compliance Operator 策略
您可以使用 Compliance Operator 自动检查许多技术实施,并将这些技术与行业标准、基准和基准的某些方面进行比较。Compliance Operator 不是一个审核员。要符合这些各种标准或认证,您需要参与授权审核员,如限定安全评估者(QSA)、联合授权局(JAB)或其他行业认可的监管机构来评估您的环境。
从 Compliance Operator 生成的建议基于通常可用的信息和实践有关这些标准的信息和实践,并可能会协助您进行补救,但实际合规会负责。与授权审核员合作以实现符合标准。
有关最新更新,请参阅 Compliance Operator 发行注记。
4.10.1. Compliance Operator 策略概述
您可以使用 Compliance Operator 策略在受管集群上安装 Compliance Operator。Compliance operator 策略在 Red Hat Advanced Cluster Management 中作为 Kubernetes 配置策略创建。OpenShift Container Platform 支持 compliance operator 策略。
注: Compliance operator 策略依赖于 OpenShift Container Platform Compliance Operator,它不受 IBM Power 或 IBM Z 架构的支持。如需有关 Compliance Operator 的更多信息,请参阅 OpenShift Container Platform 文档中的了解 Compliance Operator。
4.10.2. Compliance operator 资源
创建合规 Operator 策略时,会创建以下资源:
-
Operator 安装的合规性 operator 命名空间(
openshift- compliance
):
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: comp-operator-ns spec: remediationAction: inform # will be overridden by remediationAction in parent policy severity: high object-templates: - complianceType: musthave objectDefinition: apiVersion: v1 kind: Namespace metadata: name: openshift-compliance
-
用于指定目标命名空间的 operator 组(
compliance-operator
):
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: comp-operator-operator-group spec: remediationAction: inform # will be overridden by remediationAction in parent policy severity: high object-templates: - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: compliance-operator namespace: openshift-compliance spec: targetNamespaces: - openshift-compliance
-
用于引用名称和频道的订阅(
comp-operator-subscription
)。订阅会拉取配置集作为它支持的容器。请参阅以下示例,使用当前版本替换4.x
:
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: comp-operator-subscription spec: remediationAction: inform # will be overridden by remediationAction in parent policy severity: high object-templates: - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: compliance-operator namespace: openshift-compliance spec: channel: "4.x" installPlanApproval: Automatic name: compliance-operator source: redhat-operators sourceNamespace: openshift-marketplace
安装 compliance operator 策略后,会创建以下 pod:compliance-operator
、ocp4
和 rhcos4
。请参阅 policy-compliance-operator-install.yaml
示例。
4.10.3. 其他资源
- 如需更多信息,请参阅 OpenShift Container Platform 文档中的管理 Compliance Operator 部分以了解更多详细信息。
- 安装 compliance Operator 后,您还可以创建并应用 E8 扫描策略和 OpenShift CIS 扫描策略。如需更多信息,请参阅 E8 扫描策略和 OpenShift CIS 扫描策略。
- 要了解如何管理合规 Operator 策略,请参阅管理安全策略以了解更多详细信息。有关 配置策略的更多主题,请参阅 Kubernetes 配置策略控制器。
4.11. E8 扫描策略
一个 Essential 8(E8)扫描策略会部署一个扫描,检查 master 和 worker 节点是否满足 E8 安全配置集。您必须安装 Compliance Operator 以应用 E8 扫描策略。
E8 扫描策略在 Red Hat Advanced Cluster Management 中作为 Kubernetes 配置策略创建。OpenShift Container Platform 支持 E8 扫描策略。如需更多信息,请参阅 OpenShift Container Platform 文档中的管理 Compliance Operator 部分以了解更多详细信息。
4.11.1. E8 扫描策略资源
当您创建 E8 扫描策略时,会创建以下资源:
ScanSettingBinding
资源 (e8
) 用于识别要扫描的配置集:apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: compliance-suite-e8 spec: remediationAction: inform severity: high object-templates: - complianceType: musthave # this template checks if scan has completed by checking the status field objectDefinition: apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSettingBinding metadata: name: e8 namespace: openshift-compliance profiles: - apiGroup: compliance.openshift.io/v1alpha1 kind: Profile name: ocp4-e8 - apiGroup: compliance.openshift.io/v1alpha1 kind: Profile name: rhcos4-e8 settingsRef: apiGroup: compliance.openshift.io/v1alpha1 kind: ScanSetting name: default
一个
ComplianceSuite
资源 (compliance-suite-e8
),用于通过检查status
字段来验证扫描是否已完成:apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: compliance-suite-e8 spec: remediationAction: inform severity: high object-templates: - complianceType: musthave # this template checks if scan has completed by checking the status field objectDefinition: apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceSuite metadata: name: e8 namespace: openshift-compliance status: phase: DONE
一个
ComplianceCheckResult
资源 (compliance-suite-e8-results
),它通过检查ComplianceCheckResult
自定义资源 (CR) 来报告扫描套件的结果:apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: compliance-suite-e8-results spec: remediationAction: inform severity: high object-templates: - complianceType: mustnothave # this template reports the results for scan suite: e8 by looking at ComplianceCheckResult CRs objectDefinition: apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceCheckResult metadata: namespace: openshift-compliance labels: compliance.openshift.io/check-status: FAIL compliance.openshift.io/suite: e8
注: 支持自动补救。将补救操作设置为 enforce
以创建 ScanSettingBinding
资源。
请参阅 policy-compliance-operator-e8-scan.yaml
示例。如需更多信息,请参阅管理安全策略。注: 删除 E8 策略后,它会从目标集群或集群中移除。
4.12. OpenShift CIS 扫描策略
OpenShift CIS 扫描策略会部署一个扫描来检查 master 和 worker 节点是否与 OpenShift CIS 安全基准相符。您必须安装 Compliance operator 以应用 OpenShift CIS 策略。
OpenShift CIS 扫描策略在 Red Hat Advanced Cluster Management 中作为 Kubernetes 配置策略创建。OpenShift Container Platform 支持 OpenShift CIS 扫描策略。如需更多信息,请参阅 OpenShift Container Platform 文档中的了解 Compliance Operator 部分以了解更多详细信息。
4.12.1. OpenShift CIS 资源
创建 OpenShift CIS 扫描策略时,会创建以下资源:
用于识别要扫描的配置集的
ScanSettingBinding
资源 (cis
):apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: compliance-cis-scan spec: remediationAction: inform severity: high object-templates: - complianceType: musthave # this template creates ScanSettingBinding:cis objectDefinition: apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSettingBinding metadata: name: cis namespace: openshift-compliance profiles: - apiGroup: compliance.openshift.io/v1alpha1 kind: Profile name: ocp4-cis - apiGroup: compliance.openshift.io/v1alpha1 kind: Profile name: ocp4-cis-node settingsRef: apiGroup: compliance.openshift.io/v1alpha1 kind: ScanSetting name: default
一个
ComplianceSuite
资源 (compliance-suite-cis
),用于通过检查status
字段来验证扫描是否已完成:apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: compliance-suite-cis spec: remediationAction: inform severity: high object-templates: - complianceType: musthave # this template checks if scan has completed by checking the status field objectDefinition: apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceSuite metadata: name: cis namespace: openshift-compliance status: phase: DONE
一个
ComplianceCheckResult
资源 (compliance-suite-cis-results
),它通过检查ComplianceCheckResult
自定义资源 (CR) 来报告扫描套件的结果:apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: compliance-suite-cis-results spec: remediationAction: inform severity: high object-templates: - complianceType: mustnothave # this template reports the results for scan suite: cis by looking at ComplianceCheckResult CRs objectDefinition: apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceCheckResult metadata: namespace: openshift-compliance labels: compliance.openshift.io/check-status: FAIL compliance.openshift.io/suite: cis
请参阅 policy-compliance-operator-cis-scan.yaml
文件示例。有关创建策略的更多信息,请参阅管理安全策略。
4.13. 镜像漏洞策略
应用镜像漏洞策略,以利用 Container Security Operator 来检测容器镜像是否有漏洞。如果没有安装 Container Security Operator,该策略会在受管集群上安装它。
镜像漏洞策略由 Kubernetes 配置策略控制器负责检查。有关 Security Operator 的更多信息,请参阅 Quay 存储库中的 Container Security Operator。
备注:
- 镜像漏洞策略在断开连接的安装过程中无法正常工作。
-
IBM Power 和 IBM Z 架构不支持 镜像漏洞策略。它依赖于 Quay Container Security Operator。container-security-operator registry 中没有
ppc64le
或s390x
镜像。
查看以下部分以了解更多信息:
4.13.1. 镜像漏洞策略 YAML 结构
在创建容器安全 Operator 策略时,它会涉及以下策略:
创建订阅的策略 (
container-security-operator
) 来引用名称和频道。此配置策略必须将spec.remediationAction
设置为enforce
来创建资源。订阅会拉取配置集,作为订阅支持的容器。查看以下示例:apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-imagemanifestvuln-example-sub spec: remediationAction: enforce # will be overridden by remediationAction in parent policy severity: high object-templates: - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: container-security-operator namespace: openshift-operators spec: # channel: quay-v3.3 # specify a specific channel if desired installPlanApproval: Automatic name: container-security-operator source: redhat-operators sourceNamespace: openshift-marketplace
一个
inform
配置策略来审核ClusterServiceVersion
,以确保容器安全 Operator 安装成功。查看以下示例:apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-imagemanifestvuln-status spec: remediationAction: inform # will be overridden by remediationAction in parent policy severity: high object-templates: - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: namespace: openshift-operators spec: displayName: Red Hat Quay Container Security Operator status: phase: Succeeded # check the CSV status to determine if operator is running or not
一个
inform
配置策略,用于审核镜像漏洞扫描创建的任何ImageManifestVuln
对象。查看以下示例:apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-imagemanifestvuln-example-imv spec: remediationAction: inform # will be overridden by remediationAction in parent policy severity: high namespaceSelector: exclude: ["kube-*"] include: ["*"] object-templates: - complianceType: mustnothave # mustnothave any ImageManifestVuln object objectDefinition: apiVersion: secscan.quay.redhat.com/v1alpha1 kind: ImageManifestVuln # checking for a Kind
4.13.2. 镜像漏洞策略示例
请参阅 policy-imagemanifestvuln.yaml
。如需更多信息,请参阅管理安全策略。请参阅 Kubernetes 配置策略控制器,以查看配置控制器监控的其他配置策略。
4.14. Red Hat OpenShift Platform Plus 策略集
配置并应用 OpenShift Platform Plus 策略集 (openshift-plus
) 来安装 Red Hat OpenShift Platform Plus。
OpenShift Platform Plus 策略集包含两个部署的 PolicySets
。OpenShift Plus 策略集应用设置为安装 OpenShift Platform Plus 产品的多个策略。Red Hat Advanced Cluster Security 安全集群服务和 Compliance Operator 部署到所有 OpenShift Container Platform 受管集群。
4.14.1. 先决条件
- 在 Amazon Web Services (AWS)环境上安装 Red Hat OpenShift Container Platform。
- 安装 Red Hat Advanced Cluster Management for Kubernetes。
- 安装策略生成器 Kustomize 插件。如需更多信息,请参阅策略生成器文档。
4.14.2. OpenShift Platform Plus 策略设置组件
当您将策略设置为 hub 集群时,会安装以下 OpenShift Platform Plus 组件:
组件 | 策略 | 描述 |
---|---|---|
Red Hat Advanced Cluster Security |
| 用于将中央服务器安装到 Red Hat Advanced Cluster Management for Kubernetes hub 集群和受管集群的策略。 |
| 用于接收 Red Hat Advanced Cluster Security 状态的部署。 | |
| 配置 Red Hat Advanced Cluster Security central operator。 | |
| 用于验证 Red Hat Advanced Cluster Security 资源是否已创建的策略。 | |
OpenShift Container Platform |
| 受管 hub 集群。受管集群的管理器。 |
Compliance operator |
| 用于安装 Compliance operator 的策略。 |
Red Hat Quay |
| Red Hat Quay 的配置策略。 |
| 用于安装 Red Hat Quay 的策略。 | |
| 安装到 Red Hat Advanced Cluster Management hub 集群中。 | |
Red Hat Advanced Cluster Management |
| 设置 Red Hat Advanced Cluster Management observability 服务。 |
Red Hat OpenShift Data Platform |
| Red Hat Advanced Cluster Management observability 和 Quay 使用的 hub 集群组件的可用存储。 |
| 用于配置 Red Hat OpenShift Data Platform 状态的策略。 |
4.14.3. 其他资源
- 请参阅使用策略集安装 Red Hat OpenShift Platform Plus。
- 返回到 Policy set controller。
-
查看策略集中包含的所有策略的
openshift-plus
策略示例。
4.15. 管理安全策略
创建一个安全策略,根据您指定的安全标准、类别和控制,报告并验证您的集群合规性。
查看以下部分:
4.15.1. 创建安全策略
您可以使用命令行界面 (CLI) 或者从控制台创建安全策略。
需要的访问权限:集群管理员
重要: 您必须定义放置和放置绑定,才能将策略应用到特定集群。PlacementBinding
资源绑定放置。为 cluster Label selector 字段输入有效值,以定义 Placement
和 PlacementBinding
资源。* 要使用 放置资源
,ManagedClusterSet
资源必须绑定到带有 ManagedClusterSetBinding
资源的 Placement
资源的命名空间。如需了解更多详细信息 ,请参阅创建 ManagedClusterSetBinding 资源。
4.15.1.1. 使用命令行界面创建安全策略
完成以下步骤,使用命令行界面 (CLI) 创建策略:
运行以下命令来创建策略:
oc create -f policy.yaml -n <policy-namespace>
定义策略使用的模板。通过添加
policy-templates
字段来定义模板来编辑 YAML 文件。您的策略可能类似以下 YAML 文件:apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy1 spec: remediationAction: "enforce" # or inform disabled: false # or true namespaceSelector: include: - "default" - "my-namespace" policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: operator # namespace: # will be supplied by the controller via the namespaceSelector spec: remediationAction: "inform" object-templates: - complianceType: "musthave" # at this level, it means the role must exist and must have the following rules apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: example objectDefinition: rules: - complianceType: "musthave" # at this level, it means if the role exists the rule is a musthave apiGroups: ["extensions", "apps"] resources: ["deployments"] verbs: ["get", "list", "watch", "create", "delete","patch"]
定义一个
PlacementBinding
资源,将您的策略绑定到放置资源
。您的PlacementBinding
资源可能类似以下 YAML 示例:apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding1 placementRef: name: placement1 apiGroup: cluster.open-cluster-management.io kind: Placement subjects: - name: policy1 apiGroup: policy.open-cluster-management.io kind: Policy
4.15.1.1.1. 通过 CLI 查看您的安全策略
完成以下步骤,通过 CLI 查看您的安全策略:
运行以下命令,查看具体安全策略的详情:
oc get policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace> -o yaml
运行以下命令,查看您的安全策略的描述:
oc describe policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>
4.15.1.2. 从控制台创建集群安全策略
登录到 Red Hat Advanced Cluster Management 后,进入 Governance 页面并点 Create policy。从控制台创建新策略时,也会在 YAML 编辑器中创建 YAML 文件。要查看 YAML 编辑器,请在 Create policy 表单的开头选择切换来启用它。
完成 Create policy 表单,然后选择 提交按钮。您的 YAML 文件可能类似以下策略:
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy-pod annotations: policy.open-cluster-management.io/categories: 'SystemAndCommunicationsProtections,SystemAndInformationIntegrity' policy.open-cluster-management.io/controls: 'control example' policy.open-cluster-management.io/standards: 'NIST,HIPAA' policy.open-cluster-management.io/description: spec: complianceType: musthave namespaces: exclude: ["kube*"] include: ["default"] pruneObjectBehavior: None object-templates: - complianceType: musthave objectDefinition: apiVersion: v1 kind: Pod metadata: name: pod1 spec: containers: - name: pod-name image: 'pod-image' ports: - containerPort: 80 remediationAction: enforce disabled: false
请参阅以下
PlacementBinding
示例:apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-pod placementRef: name: placement-pod kind: Placement apiGroup: cluster.open-cluster-management.io subjects: - name: policy-pod kind: Policy apiGroup: policy.open-cluster-management.io
请参阅以下
放置
示例:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement-pod spec: predicates: - requiredClusterSelector: labelSelector: matchLabels: cloud: "IBM"
- 可选: 为您的策略添加描述。
- 点击 Create Policy。从控制台创建了安全策略。
4.15.1.2.1. 从控制台查看您的安全策略
在控制台中查看任何安全策略及其状态。
- 进入 Governance 页面,以查看您的策略的表列表。注: 您可以选择 Policies 标签页或 Cluster violations 选项卡来过滤策略列表。
-
选择一个策略来查看更多详情。此时会显示 Details、Clusters 和 Templates 标签页。当无法决定集群或策略状态时,会显示以下信息:
No status
。 - 或者,选择 Policies 选项卡来查看策略列表。展开一个策略行,以查看 Description,Standards,Controls, 和 Categories 详情。
4.15.1.3. 通过 CLI 创建策略设置
默认情况下,策略集是在没有策略或放置的情况下创建的。您必须为策略集合创建放置,并至少有一个策略存在于集群中。在创建策略集时,您可以添加多个策略。
运行以下命令,通过 CLI 创建策略集:
oc apply -f <policyset-filename>
4.15.1.4. 从控制台创建策略集
- 在导航菜单中选择 Governance。
- 选择 Policy set 选项卡。
- 选择 Create policy set 按钮并完成表单。
- 添加您的策略集的详细信息,然后选择 Submit 按钮。
您的策略从 policy 表中列出。
4.15.2. 更新安全策略
了解如何更新安全策略。
4.15.2.1. 通过 CLI 将策略添加到策略集中
运行以下命令来编辑您的策略集:
oc edit policysets <your-policyset-name>
-
将策略名称添加到策略集的
policies
部分的列表中。 - 使用以下命令在策略集的 placement 部分中应用添加的策略:
oc apply -f <your-added-policy.yaml>
PlacementBinding
和 Placement
都被创建。
注: 如果您删除放置绑定,策略仍会由策略集放置。
4.15.2.2. 从控制台在策略集中添加策略
- 选择 Policy set 选项卡,在策略集中添加一个策略。
- 选择 Actions 图标并选择 Edit。此时会出现 Edit policy set 表单。
- 进入到表单的 Policies 部分,以选择要添加到策略集的策略。
4.15.2.3. 禁用安全策略
您的策略默认是启用的。从控制台禁用您的策略。
登录到 Red Hat Advanced Cluster Management for Kubernetes 控制台后,进入 Governance 页面来查看您的策略的表列表。
选择 Actions 图标 > Disable policy。此时会出现 Disable Policy 对话框。
点击 Disable policy。您的策略已禁用。
4.15.3. 删除安全策略
通过 CLI 或控制台删除安全策略。
通过 CLI 删除安全策略:
运行以下命令来删除安全策略:
oc delete policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>
删除策略后,它会从一个或多个目标集群中移除。运行以下命令验证您的策略是否已移除:
oc get policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>
从控制台删除安全策略:
在导航菜单中点 Governance 来查看您的策略的表列表。在策略违反表中点击您要删除的策略的 Actions 图标。
点击 Remove。在 Remove policy 对话框中点击 Remove policy。
4.15.3.1. 从控制台创建策略集
- 在 Policy set 选项卡中,选择策略集的 Actions 图标。当您单击 Delete 时,会出现 Permanently delete Policyset? 对话框。
- 点击 Delete 按钮。
4.15.4. 清理由策略创建的资源
在配置策略中使用 pruneObjectBehavior
参数来清理策略创建的资源。当设置 pruneObjectBehavior
时,仅在删除与其关联的配置策略(或父策略)后,才会清理相关的对象。
查看可用于参数的值的以下描述:
-
DeleteIfCreated
:清理策略创建的所有资源。 -
DeleteAll
:清理策略管理的所有资源。 -
None
:这是默认值,维护之前版本中的相同行为,但没有删除相关资源。
您可以在命令行中创建策略时,直接在 YAML 文件中设置值。
在控制台中,您可以在 Policy 模板 步骤的 Prune Object Behavior 部分中选择值。
备注:
-
如果安装 Operator 的策略定义了
pruneObjectBehavior
参数,则需要额外的清理来完成 Operator 卸载。您可能需要在这个清理过程中删除 operatorClusterServiceVersion
对象。 -
当您在受管集群中禁用
config-policy-addon
资源时,会忽略pruneObjbectBehavior
。要在策略上自动清理相关资源,您必须在禁用附加组件前从受管集群中删除策略。
4.15.5. 策略命令行界面
使用 policytools
命令行界面(CLI),您可以在本地与策略交互,以帮助创建和调试。
template-resolver
template-resolver
是policytools
的子命令,用于解析嵌入策略中的受管集群和 hub 集群模板。template-resolver
从文件或标准输入中读取。要使用 hub 集群模板解析策略,您必须使用导入到 Red Hat Advanced Cluster Management 的受管集群的名称提供
--cluster
-name 参数,您必须提供--hub-kubeconfig
参数,并带有指向 hub 集群的kubeconfig
文件的路径。
policytools
CLI 可从 hub 集群控制台下载。请参阅 命令行工具。
4.15.6. 其他资源
- 在 Hub 集群策略框架中查看策略 YAML 文件的更多描述 [Policy overview]。
- 如需有效表达式,请参阅 Kubernetes 文档中的支持基于集合的要求的资源。
-
查看 stable
Policysets
,这需要用于部署的 Policy Generator,PolicySets-table。 - 有关策略的更多主题,请参阅监管。
4.15.7. 在断开连接的环境中管理 Operator 策略
您可能需要在没有连接到互联网(断开连接)的 Red Hat OpenShift Container Platform 集群上部署 Red Hat Advanced Cluster Management for Kubernetes 策略。如果您使用您部署的策略来部署安装 Operator Lifecycle Manager Operator 的策略,则必须遵循 镜像 Operator 目录 的步骤。
完成以下步骤以验证对 Operator 镜像的访问:
请参阅验证所需软件包可用来验证您与策略一起使用的软件包是否可用。您必须验证由以下策略部署到的任何受管集群使用的每个镜像 registry 的可用性:
-
container-security-operator
-
已弃用:
gatekeeper-operator-product
-
compliance-operator
-
请参阅 配置镜像内容源策略 以验证源是否可用。镜像内容源策略必须存在于每个断开连接的受管集群中,并可使用策略进行部署以简化流程。请参阅以下镜像源位置表:
监管策略类型 镜像源位置 容器安全性
registry.redhat.io/quay
Compliance
registry.redhat.io/compliance
Gatekeeper
registry.redhat.io/rhacm2
4.15.8. 使用策略集合安装 Red Hat OpenShift Platform Plus
继续阅读以获取应用 Red Hat Openshift Platform Plus 策略集的指导。应用 Red Hat OpenShift 策略集时,Red Hat Advanced Cluster Security secured 集群服务和 Compliance Operator 部署到所有 OpenShift Container Platform 受管集群。
4.15.8.1. 先决条件
应用策略集前完成以下步骤:
要允许将订阅应用到集群,您必须应用
policy-configure-subscription-admin-hub.yaml
策略,并将补救操作设置为enforce
。将以下 YAML 复制并粘贴到控制台的 YAML 编辑器中:apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy-configure-subscription-admin-hub annotations: policy.open-cluster-management.io/standards: NIST SP 800-53 policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration spec: remediationAction: inform disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-configure-subscription-admin-hub spec: remediationAction: inform severity: low object-templates: - complianceType: musthave objectDefinition: apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: open-cluster-management:subscription-admin rules: - apiGroups: - app.k8s.io resources: - applications verbs: - '*' - apiGroups: - apps.open-cluster-management.io resources: - '*' verbs: - '*' - apiGroups: - "" resources: - configmaps - secrets - namespaces verbs: - '*' - complianceType: musthave objectDefinition: apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: open-cluster-management:subscription-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: open-cluster-management:subscription-admin subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: kube:admin - apiGroup: rbac.authorization.k8s.io kind: User name: system:admin --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-policy-configure-subscription-admin-hub placementRef: name: placement-policy-configure-subscription-admin-hub kind: Placement apiGroup: cluster.open-cluster-management.io subjects: - name: policy-configure-subscription-admin-hub kind: Policy apiGroup: policy.open-cluster-management.io --- apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement-policy-configure-subscription-admin-hub spec: predicates: - requiredClusterSelector: labelSelector: matchExpressions: - {key: name, operator: In, values: ["local-cluster"]}
要从命令行界面应用前面的 YAML,请运行以下命令:
oc apply -f policy-configure-subscription-admin-hub.yaml
- 安装 Policy Generator kustomize 插件。使用 Kustomize v4.5 或更高版本。请参阅 生成策略来安装 Operator。
策略安装到
policies
命名空间。您必须将该命名空间绑定到ClusterSet
。例如,复制并应用以下示例 YAML 将命名空间绑定到默认的ClusterSet
:apiVersion: cluster.open-cluster-management.io/v1beta2 kind: ManagedClusterSetBinding metadata: name: default namespace: policies spec: clusterSet: default
运行以下命令以从命令行界面应用
ManagedClusterSetBinding
资源:oc apply -f managed-cluster.yaml
满足先决条件后,您可以应用策略集。
4.15.8.2. 应用 Red Hat OpenShift Platform Plus 策略集
-
使用
openshift-plus/policyGenerator.yaml
文件,其中包含 Red Hat OpenShift Plus 的先决条件配置。请参阅openshift-plus/policyGenerator.yaml
。 使用
kustomize
命令将策略应用到您的 hub 集群:kustomize build --enable-alpha-plugins | oc apply -f -
注: 对于您不想安装的 OpenShift Platform Plus 的任何组件,请编辑
policyGenerator.yaml
文件并删除或注释掉这些组件的策略。
4.15.8.3. 其他资源
- 如需了解策略集的概述,请参阅 Red Hat OpenShift Platform Plus 策略集。
- 返回到主题的开头,使用策略集安装 Red Hat OpenShift Platform Plus
4.15.9. 使用 OperatorPolicy 资源安装 Operator
要在受管集群上安装 Operator Lifecycle Manager (OLM)受管 Operator,请使用 Policy
定义中的 OperatorPolicy
策略模板。
4.15.9.1. 创建 OperatorPolicy 资源来安装 Quay
请参阅以下 operator 策略示例,它使用 Red Hat operator 目录在 stable-3.11
频道中安装最新的 Quay Operator:
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: install-quay namespace: open-cluster-management-global-set spec: disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1beta1 kind: OperatorPolicy metadata: name: install-quay spec: remediationAction: enforce severity: critical complianceType: musthave upgradeApproval: None subscription: channel: stable-3.11 name: quay-operator source: redhat-operators sourceNamespace: openshift-marketplace
添加 OperatorPolicy
策略模板后,会使用控制器在集群中创建 operatorGroup
和 subscription
对象。因此,其余安装由 OLM 完成。您可以查看受管集群中 OperatorPolicy
资源的 .status.Conditions
和 .status.relatedObjects
字段中拥有的资源的健康状态。
要验证 Operator 策略状态,请在受管集群中运行以下命令:
oc -n <managed cluster namespace> get operatorpolicy install-quay
4.15.9.2. 其他资源
请参阅 Operator 策略控制器
4.16. 保护 hub 集群
通过增强 hub 集群安全性来保护 Red Hat Advanced Cluster Management for Kubernetes 安装。完成以下步骤:
- 保护 Red Hat OpenShift Container Platform。如需更多信息,请参阅 OpenShift Container Platform 文档中的安全性和合规性。
- 设置基于角色的访问控制(RBAC)。如需更多信息,请参阅基于角色的访问控制。
- 自定义证书,请参阅证书。
- 定义集群凭证,请参阅管理凭证概述
- 查看可帮助您强化集群安全性的策略。请参阅支持的策略。
第 5 章 Gatekeeper operator 概述
Gatekeeper operator 安装 Gatekeeper,它是一个使用审计功能验证 Webhook。从 Operator Lifecycle Manager operator 目录在 Red Hat OpenShift Container Platform 集群上安装 Gatekeeper Operator。使用 Red Hat Advanced Cluster Management for Kubernetes,您可以使用 Gatekeeper operator 策略在 hub 集群上安装 Gatekeeper。安装 Gatekeeper 后,将其用于以下优点:
-
使用 Red Hat Advanced Cluster Management 策略集成在受管集群中部署并检查 Gatekeeper
ConstraintTemplates
和约束。 - 强制基于 Kubernetes 自定义资源定义的策略,该策略与 Open Policy Agent (OPA)一起运行。
- 使用 Gatekeeper 约束评估 Kubernetes API 的 Kubernetes 资源合规性请求。
- 使用 OPA 作为策略引擎,并使用 Rego 作为策略语言。
先决条件: 您需要一个 Red Hat Advanced Cluster Management for Kubernetes 或 Red Hat OpenShift Container Platform Plus 订阅来安装 Gatekeeper,并将 Gatekeeper 策略应用到集群。
如需了解更多有关使用 Gatekeeper operator 的信息,请参阅以下资源:
5.1. 常规支持
要了解从 Gatekeeper operator 获得的支持,请参阅以下列表:
- 支持 Gatekeeper operator 的当前版本、前面的版本以及这些版本的所有 z-stream 版本。
- 获得之前和当前版本的维护支持和相关安全漏洞修复。
- 支持所有接受标准支持的 Red Hat OpenShift Container Platform 版本。注 : 在接受扩展支持的 OpenShift Container Platform 版本或版本上不支持 Gatekeeper operator。
要查看 Gatekeeper operator 的发行注记,请参阅 gatekeeper-operator-bundle。
5.2. Operator 频道
使用 Gatekeeper operator,您可以访问两种类型的频道来帮助您进行升级。这些频道是 stable
频道和 y-stream 版本
频道。
使用 stable
频道,您可以访问最新的可用版本,无论是 x-stream
、y-stream
还是 z-stream
。stable
频道包括最新的 y-stream
频道的最新版本。
使用 y-stream 版本
频道,您可以访问特定 y-stream
版本的所有 z-stream
版本。
5.3. 配置 Gatekeeper operator
从 Operator Lifecycle Manager 目录安装 Gatekeeper Operator,以便在集群中安装 Gatekeeper。在 Red Hat Advanced Cluster Management 中,您可以使用策略来使用监管框架安装 Gatekeeper operator。安装 Gatekeeper operator 后,配置 Gatekeeper operator 自定义资源来安装 Gatekeeper。
5.3.1. 先决条件
- 需要的访问权限 : 集群管理员。
- 了解如何通过完成将 Operator 添加到集群以及 OpenShift Container Platform 文档中的 附加资源部分 来使用 Operator Lifecycle Manager (OLM)和 OperatorHub。
5.3.2. Gatekeeper 自定义资源示例
Gatekeeper operator 自定义资源告诉 Gatekeeper Operator 在集群中启动 Gatekeeper 安装。要安装 Gatekeeper,请使用以下示例 YAML,其中包括示例和默认值:
apiVersion: operator.gatekeeper.sh/v1alpha1 kind: Gatekeeper metadata: name: gatekeeper spec: audit: replicas: 1 auditEventsInvolvedNamespace: Enabled 1 logLevel: DEBUG auditInterval: 10s constraintViolationLimit: 55 auditFromCache: Enabled auditChunkSize: 66 emitAuditEvents: Enabled containerArguments: 2 - name: "" value: "" resources: limits: cpu: 500m memory: 150Mi requests: cpu: 500m memory: 130Mi validatingWebhook: Enabled mutatingWebhook: Enabled webhook: replicas: 3 emitAdmissionEvents: Enabled admissionEventsInvolvedNamespace: Enabled 3 disabledBuiltins: - http.send operations: 4 - "CREATE" - "UPDATE" - "CONNECT" failurePolicy: Fail containerArguments: 5 - name: "" value: "" resources: limits: cpu: 480m memory: 140Mi requests: cpu: 400m memory: 120Mi nodeSelector: region: "EMEA" affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: auditKey: "auditValue" topologyKey: topology.kubernetes.io/zone tolerations: - key: "Example" operator: "Exists" effect: "NoSchedule" podAnnotations: some-annotation: "this is a test" other-annotation: "another test"
- 1
- 对于版本 3.14 及之后的版本,启用
auditEventsInvolvedNamespace
参数来管理您要创建的命名空间审计事件。启用此参数时,Gatekeeper 控制器部署使用以下参数运行:--audit-events-involved-namespace=true
。 - 3
- 对于版本 3.14 及之后的版本,启用
admissionEventsInvolvedNamespace
参数来管理您要创建的命名空间准入事件。当启用此参数时,Gatekeeper 控制器部署使用以下参数运行:--admission-events-involved-namespace=true
。 - 4
- 对于版本 3.14 及更高版本,要管理 webhook 操作,请为
operations
参数使用以下值:"CREATE",
,"UPDATE"
"CONNECT"
, 和"DELETE"
。 - 2 5
- 对于版本 3.17 及更高版本,请通过提供要传递给容器的参数名称和值列表来指定
containerArguments
。从参数名称中省略前导短划线。省略的值被视为true
。如果之前由 operator 或来自其他字段的配置设置了参数,则您提供的参数将被忽略。请参阅以下拒绝列表且当前不支持的标记:-
port
-
prometheus-port
-
health-addr
-
validating-webhook-configuration-name
-
mutating-webhook-configuration-name
-
disable-cert-rotation
-
client-cert-name
-
tls-min-version
-
5.3.3. 为同步详情配置 auditFromCache
对于版本 3.14 或更高版本,Gatekeeper operator 使用 auditFromCache
参数为审计配置公开 Gatekeeper operator 自定义资源中的设置,该参数默认是禁用的。配置 auditFromCache
参数,以从约束中收集资源。
当您将 auditFromCache
参数设置为 Automatic
时,Gatekeeper operator 会从约束中收集资源,并将这些资源插入到 Gatekeeper Config
资源中。如果资源不存在,则 Gatekeeper operator 会创建 Config
资源。
如果将 auditFromCache
参数设置为 Enabled
,则需要使用对象手动将 Gatekeeper Config
资源设置为同步到缓存。如需更多信息,请参阅 Gatekeeper 文档中的配置审计。
要为来自约束的资源集合配置 auditFromCache
参数,请完成以下步骤:
在
Gatekeeper
资源中将auditFromCache
设置为Automatic
。请参见以下示例:apiVersion: operator.gatekeeper.sh/v1alpha1 kind: Gatekeeper metadata: name: gatekeeper spec: audit: replicas: 2 logLevel: DEBUG auditFromCache: Automatic
要验证资源是否已添加到您的
Config
资源中,请查看syncOnly
参数部分是否已添加。运行以下命令:oc get configs.config.gatekeeper.sh config -n openshift-gatekeeper-system
您的
Config
资源可能类似以下示例:apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "openshift-gatekeeper-system" spec: sync: syncOnly: - group: "" version: "v1" kind: "Namespace" - group: "" version: "v1" kind: "Pod"
可选: 您可以运行以下命令来查看 Gatekeeper operator 自定义资源的描述信息:
oc explain gatekeeper.spec.audit.auditFromCache
5.3.4. 其他资源
- 如需更多信息,请参阅 Gatekeeper 文档中的配置审计。
5.4. 管理 Gatekeeper operator 安装策略
使用 Red Hat Advanced Cluster Management 策略在受管集群上安装 Gatekeeper operator 和 Gatekeeper。
需要的访问权限: 集群管理员
要创建、查看和更新 Gatekeeper Operator 安装策略,请完成以下部分:
5.4.1. 使用 Gatekeeper operator 策略安装 Gatekeeper
要安装 Gatekeeper operator 策略,请使用配置策略控制器。在安装过程中,operator 组和订阅会拉取 Gatekeeper operator 将其安装到受管集群中。然后,策略会创建一个 Gatekeeper 自定义资源来配置 Gatekeeper。
Red Hat Advanced Cluster Management 配置策略控制器检查 Gatekeeper operator 策略,并支持 enforce
补救操作。当您将控制器设置为 强制
时,它会在受管集群上自动创建 Gatekeeper operator 对象。
5.4.2. 从控制台创建 Gatekeeper 策略
从控制台创建 Gatekeeper 策略时,您必须将补救 enforce
设置为安装 Gatekeeper。
5.4.2.1. 查看 Gatekeeper operator 策略
要在控制台中查看您的 Gatekeeper operator 策略及其状态,请完成以下步骤:
-
选择
policy-gatekeeper-operator
策略来查看更多详细信息。 - 选择 Clusters 选项卡来查看策略违反情况。
5.4.3. 升级 Gatekeeper 和 Gatekeeper operator
您可以升级 Gatekeeper 和 Gatekeeper operator 的版本。当使用 Gatekeeper operator 策略安装 Gatekeeper operator 时,请注意 upgradeApproval
的值。当您将 upgradeApproval
设置为 Automatic
时,Operator 会自动升级。
如果将 upgradeApproval
设置为 Manual
,则必须为每个安装 Gatekeeper operator 的集群手动批准升级。
5.4.4. 禁用 Gatekeeper operator 策略
要禁用 policy-gatekeeper-operator
策略,请从控制台的 Actions 菜单中选择 Disable 选项,或者从 CLI 设置 spec.disabled: true
。
5.4.5. 删除 Gatekeeper operator 策略
要从 CLI 删除 Gatekeeper operator 策略,请完成以下步骤:
运行以下命令来删除 Gatekeeper operator 策略:
oc delete policies.policy.open-cluster-management.io <policy-gatekeeper-operator-name> -n <namespace>
运行以下命令验证您是否删除了您的策略:
oc get policies.policy.open-cluster-management.io <policy-gatekeeper-operator-name> -n <namespace>
要从控制台删除 Gatekeeper operator 策略,点 policy-gatekeeper-operator
策略的 Actions 图标,然后选择 Delete。
5.4.6. 卸载 Gatekeeper 约束、Gatekeeper 实例和 Gatekeeper operator 策略
要卸载 Gatekeeper 策略,请完成以下部分中的步骤:
5.4.6.1. 删除 Gatekeeper 约束
要从受管集群中删除 Gatekeeper 约束和 ConstraintTemplate
,请完成以下步骤:
-
编辑 Gatekeeper 约束或
ConstraintTemplate
策略。 -
找到用于创建 Gatekeeper
Constraint
和ConstraintTemplate
的模板。 - 从模板列表中删除条目。(如果策略是唯一的模板,则删除该策略。)
- 保存并应用策略。
注: constraint 和 ConstraintTemplate
直接在 policy-templates
中提供,而不是在 ConfigurationPolicy
中提供。
5.4.6.2. 删除 Gatekeeper 实例
要从受管集群中删除 Gatekeeper 实例,请完成以下步骤:
- 编辑 Gatekeeper operator 策略。
-
找到用于创建 Gatekeeper operator 自定义资源的
ConfigurationPolicy
模板。 -
将
ConfigurationPolicy
模板的complianceType
的值改为mustnothave
。更改值会删除 Gatekeeper operator 自定义资源,信号到 Gatekeeper operator 来清理 Gatekeeper 部署。
5.4.6.3. 删除 Gatekeeper operator
要从受管集群中删除 Gatekeeper Operator,请完成以下步骤:
- 编辑 Gatekeeper operator 策略。
-
找到用于创建 Subscription CR 的
OperatorPolicy
模板。 -
将
OperatorPolicy
模板的complianceType
的值改为mustnothave
。
5.4.7. 其他资源
如需了解更多详细信息,请参阅以下资源:
- 集成 Gatekeeper 约束和约束模板。
- 策略 Gatekeeper。
- 有关可用于 Gatekeeper operator 策略的可选参数的说明,请参阅 Gatekeeper Helm Chart。
5.5. 集成 Gatekeeper 约束和约束模板
要创建 Gatekeeper 策略,请使用 ConstraintTemplates
和约束。在 Policy
资源的 policy-templates
中添加模板和限制。查看 Red Hat Advanced Cluster Management 策略中使用 Gatekeeper 约束的以下 YAML 示例:
ConstraintTemplates
和约束: 使用 Red Hat Advanced Cluster Management 策略在 hub 集群上进行多集群发布 Gatekeeper 约束和 Gatekeeper 审计结果聚合。以下示例定义了一个 GatekeeperConstraintTemplate
和 constraint (K8sRequiredLabels
),以确保在所有命名空间中设置了gatekeeper
标签:apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: require-gatekeeper-labels-on-ns spec: remediationAction: inform 1 disabled: false policy-templates: - objectDefinition: apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8srequiredlabels annotations: policy.open-cluster-management.io/severity: low 2 spec: crd: spec: names: kind: K8sRequiredLabels validation: openAPIV3Schema: properties: labels: type: array items: string targets: - target: admission.k8s.gatekeeper.sh rego: | package k8srequiredlabels violation[{"msg": msg, "details": {"missing_labels": missing}}] { provided := {label | input.review.object.metadata.labels[label]} required := {label | label := input.parameters.labels[_]} missing := required - provided count(missing) > 0 msg := sprintf("you must provide labels: %v", [missing]) } - objectDefinition: apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sRequiredLabels metadata: name: ns-must-have-gk annotations: policy.open-cluster-management.io/severity: low 3 spec: enforcementAction: dryrun match: kinds: - apiGroups: [""] kinds: ["Namespace"] parameters: labels: ["gatekeeper"]
- 1
- 因为
remediationAction
被设置为inform
,所以 Gatekeeper 约束的enforcementAction
字段会被覆盖来warn
。这意味着 Gatekeeper 会检测并警告您创建或更新缺少gatekeeper
标签的命名空间。如果策略remediationAction
设置为enforce
,则 Gatekeeper 约束enforcementAction
字段会被覆盖为deny
。在这种情况下,此配置可防止任何用户创建或更新缺少gatekeeper
标签的命名空间。 - 2 3
- 可选:为每个 Gatekeeper 约束或约束模板设置
policy.open-cluster-management.io/severity
注解的严重性值。有效值与其他 Red Hat Advanced Cluster Management 策略类型相同:low
,medium
,high
, 或critical
。
使用前面的策略,您可能会收到以下策略状态消息:
warn - you must provide labels: {"gatekeeper"} (on Namespace default); warn - you must provide labels: {"gatekeeper"} (on Namespace gatekeeper-system)
。当您从策略中删除 Gatekeeper 约束或ConstraintTemplates
时,也会从受管集群中删除约束和ConstraintTemplates
。要从控制台查看特定受管集群的 Gatekeeper 审计结果,请转至策略模板 结果 页面。如果启用了搜索,请查看失败的审计的 Kubernetes 对象的 YAML。
备注:
- 相关 resources 部分仅在 Gatekeeper 生成审计结果时可用。
- Gatekeeper 审计默认每分钟运行一次。审计结果会发回到 hub 集群,以便在受管集群的 Red Hat Advanced Cluster Management 策略状态中查看。
policy-gatekeeper-admission
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-gatekeeper-admission spec: remediationAction: inform 1 severity: low object-templates: - complianceType: mustnothave objectDefinition: apiVersion: v1 kind: Event metadata: namespace: openshift-gatekeeper-system 2 annotations: constraint_action: deny constraint_kind: K8sRequiredLabels constraint_name: ns-must-have-gk event_type: violation
5.5.1. 其他资源
如需了解更多详细信息,请参阅以下资源:
第 6 章 安全概述
管理 Red Hat Advanced Cluster Management for Kubernetes 组件的安全性。使用定义的策略和流程监管集群,以识别并最大程度降低风险。使用策略来定义规则和设置控制。
先决条件:您必须为 Red Hat Advanced Cluster Management for Kubernetes 配置身份验证服务要求。如需更多信息,请参阅 访问控制。
阅读以下主题以了解更多有关保护集群的信息:
6.1. 证书简介
您可以使用各种证书来验证 Red Hat Advanced Cluster Management for Kubernetes 集群的真实性。继续阅读以了解证书管理的信息。
6.1.1. 证书
在 Red Hat Advanced Cluster Management 中运行的服务所需的所有证书都是在 Red Hat Advanced Cluster Management 安装过程中创建的。查看以下由 Red Hat OpenShift Container Platform 组件创建和管理的证书列表:
- OpenShift Service Serving 证书
- Red Hat Advanced Cluster Management Webhook 控制器
- Kubernetes 证书 API
- OpenShift 默认入口
需要的访问权限: 集群管理员
继续阅读以了解有关证书管理的更多信息:
注意 :用户负责证书轮转和更新。
6.1.1.1. Red Hat Advanced Cluster Management hub 集群证书
OpenShift 默认入口证书在技术上是一个 hub 集群证书。安装 Red Hat Advanced Cluster Management 后,会创建可观察性证书,并由可观察性组件使用,以便在 hub 集群和受管集群之间的流量上提供 mutual TLS。
open-cluster-management-observability
命名空间包含以下证书:-
Observability-server-ca-certs
:获取 CA 证书来签署服务器端证书 -
Observability-client-ca-certs
:获取 CA 证书来签署客户端的证书 -
Observability-server-certs
:获取由observability-observatorium-api 部署使用的服务器证书
-
Observability-grafana-certs
:获取observability-rbac-query-proxy
部署使用的客户端证书
-
open-cluster-management-addon-observability
命名空间在受管集群中包含以下证书:-
Observability-managed-cluster-certs
:与 hub 服务器中的observability-server-ca-certs
相同的服务器 CA 证书 -
observability-controller-open-cluster-management.io-observability-signer-client-cert
:由被metrics-collector-deployment
使用的客户证书
-
CA 证书的有效期为五年,其他证书的有效期为一年。所有可观察证书会在过期后自动刷新。查看以下列表以了解证书自动更新时的影响:
- 当剩余的有效时间不超过 73 天时,非 CA 证书将自动续订。续订证书后,相关部署中的 Pod 会自动重启以使用更新的证书。
- 当剩余有效时间不超过一年时,CA 证书会被自动续订。证书被续订后,旧的 CA 不会被删除,而是与更新的 CA 共存。相关部署同时使用旧和更新的证书,并继续工作。旧的 CA 证书在过期时会被删除。
- 当证书被续订时,hub 集群和受管集群之间的流量不会中断。
查看以下 Red Hat Advanced Cluster Management hub 集群证书表:
Namespace | Secret 名称 | Pod 标签 | |
---|---|---|---|
open-cluster-management | channels-apps-open-cluster-management-webhook-svc-ca | app=multicluster-operators-channel | open-cluster-management |
channels-apps-open-cluster-management-webhook-svc-signed-ca | app=multicluster-operators-channel | open-cluster-management | multicluster-operators-application-svc-ca |
app=multicluster-operators-application | open-cluster-management | multicluster-operators-application-svc-signed-ca | app=multicluster-operators-application |
open-cluster-management-hub | registration-webhook-serving-cert signer-secret | 不是必需的 | open-cluster-management-hub |
6.1.1.2. Red Hat Advanced Cluster Management 管理的证书
查看下表,了解包含 Red Hat Advanced Cluster Management 管理的证书和相关 secret 的组件 pod 的总结列表:
Namespace | Secret 名称(如果适用) |
---|---|
open-cluster-management-agent-addon | cluster-proxy-open-cluster-management.io-proxy-agent-signer-client-cert |
open-cluster-management-agent-addon | cluster-proxy-service-proxy-server-certificates |
6.1.1.2.1. 受管集群证书
您可以使用证书与 hub 集群验证受管集群。因此,了解与这些证书关联的故障排除方案非常重要。
受管集群证书会自动刷新。
6.1.1.3. 其他资源
- 在受管集群中使用证书策略控制器来创建和管理证书策略。如需了解更多详细信息,请参阅证书策略控制器。
- 如需了解 使用 SSL/TLS 证书安全地连接到私有托管 Git 服务器的详情,请参阅使用自定义 CA 证书进行安全 HTTPS 连接。
- 如需了解更多详细信息,请参阅 OpenShift Service Serving 证书。
- OpenShift Container Platform 默认入口是 hub 集群证书。如需了解更多详细信息 ,请参阅重新放置 默认入口证书。
- 请参阅主题 的证书简介。
6.1.2. 管理证书
继续阅读以了解有关如何刷新、替换、轮转和列出证书的信息。
6.1.2.1. 刷新 Red Hat Advanced Cluster Management Webhook 证书
您可以刷新 Red Hat Advanced Cluster Management 受管证书,它们是由 Red Hat Advanced Cluster Management 服务创建和管理的证书。
完成以下步骤以刷新 Red Hat Advanced Cluster Management 管理的证书:
运行以下命令,删除与 Red Hat Advanced Cluster Management 管理证书关联的 secret:
oc delete secret -n <namespace> <secret> 1
- 1
- 将
<namespace>
和<secret>
替换为您要使用的值。
运行以下命令,重启与 Red Hat Advanced Cluster Management 受管证书关联的服务:
oc delete pod -n <namespace> -l <pod-label> 1
- 1
- 将
<namespace>
和<pod-label>
替换为 Red Hat Advanced Cluster Management 受管集群证书 表中的值。
注: 如果没有指定
pod-label
,则不会重启任何服务。secret 被重新创建并自动使用。
6.1.2.2. 替换 alertmanager 路由的证书
如果您不想使用 OpenShift 默认入口证书,请通过更新 alertmanager 路由来替换 observability alertmanager 证书。完成以下步骤:
使用以下命令检查可观察证书:
openssl x509 -noout -text -in ./observability.crt
-
将证书上的通用名称 (
CN
) 更改为alertmanager
。 -
使用 alertmanager 路由的主机名更改
csr.cnf
配置文件中的 SAN。 在
open-cluster-management-observability
命名空间中创建以下两个 secret。运行以下命令:oc -n open-cluster-management-observability create secret tls alertmanager-byo-ca --cert ./ca.crt --key ./ca.key oc -n open-cluster-management-observability create secret tls alertmanager-byo-cert --cert ./ingress.crt --key ./ingress.key
6.1.2.3. 轮转 gatekeeper Webhook 证书
完成以下步骤以轮转 gatekeeper Webhook 证书:
使用以下命令编辑包含证书的 secret:
oc edit secret -n openshift-gatekeeper-system gatekeeper-webhook-server-cert
-
删除
data
部分中的以下内容:ca.crt
、ca.key
、tls.crt
和tls.key
。 使用以下命令删除
gatekeeper-controller-manager
pod 来重启 gatekeeper Webhook 服务:oc delete pod -n openshift-gatekeeper-system -l control-plane=controller-manager
gatekeeper Webhook 证书被轮转。
6.1.2.4. 验证证书轮转
按照以下流程验证您的证书是否已轮转:
- 找到要检查的 secret。
-
检查
tls.crt
密钥以验证证书是否可用。 使用以下命令显示证书信息:
oc get secret <your-secret-name> -n open-cluster-management -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text -noout
将
<your-secret-name>
替换为您要验证的 secret 的名称。如果需要,还要更新命名空间和 JSON 路径。检查输出中的
Validity
详情。查看以下Validity
示例:Validity Not Before: Jul 13 15:17:50 2023 GMT 1 Not After : Jul 12 15:17:50 2024 GMT 2
6.1.2.5. 列出 hub 集群受管证书
您可以查看在内部使用 OpenShift Service Serving 证书服务的 hub 集群受管证书列表。运行以下命令列出证书:
for ns in multicluster-engine open-cluster-management ; do echo "$ns:" ; oc get secret -n $ns -o custom-columns=Name:.metadata.name,Expiration:.metadata.annotations.service\\.beta\\.openshift\\.io/expiry | grep -v '<none>' ; echo ""; done
如需更多信息,请参阅附加资源部分中的 OpenShift Service Serving 证书部分。
注:如果启用了可观察性,则还需要额外的命名空间来创建证书。