2.2. 策略概述
使用 Red Hat Advanced Cluster Management for Kubernetes 安全策略框架创建和管理策略。Kubernetes 自定义资源定义实例用于创建策略。
每个 Red Hat Advanced Cluster Management 策略可以至少有一个或多个模板。如需有关策略元素的更多详情,请参阅此页面的 Policy YAML 表部分。
策略需要一个 PlacementRule 或 Placement,用于定义策略文档应用到的集群,以及将 Red Hat Advanced Cluster Management for Kubernetes 策略绑定到放置规则的 PlacementBinding。有关如何定义 PlacementRule
的更多信息,请参阅应用程序生命周期文档中的放置规则。有关如何定义 放置
的更多信息,请参阅集群生命周期文档中的 放置概述。
重要:
为了将策略传播到受管集群,您需要创建一个
PlacementBinding
将您的策略与PlacementRule
或Placement
进行绑定。最佳实践 :在使用
Placement
资源时,使用命令行界面(CLI) 来更新策略。-
除了受管集群命名空间外,您可以在 hub 集群上的任意命名空间中创建策略。每个受管集群在 hub 集群上都有一个命名空间,它与受管集群的名称匹配。如果在受管集群命名空间中创建了一个策略,它将被 Red Hat Advanced Cluster Management for Kubernetes 删除。因此,使用一个其他命名空间,如
policy
。 - 每个客户端和供应商负责确保其受管云环境满足适用于 Kubernetes 集群上托管的工作负载的内部软件工程、安全工程、弹性、安全性以及合规性企业安全标准。使用监管和安全功能来提高可见性并对配置进行修复,以满足标准。
在以下部分了解更多有关策略组件的详细信息:
2.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: spec: dependencies: - apiVersion: policy.open-cluster-management.io/v1 compliance: kind: Policy name: namespace: policy-templates: - objectDefinition: apiVersion: kind: metadata: name: spec: remediationAction: disabled: --- apiVersion: apps.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: placementRef: name: kind: apiGroup: subjects: - name: kind: apiGroup: --- apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: spec: clusterConditions: - type: clusterLabels: matchLabels: cloud:
2.2.2. 策略 YAML 表
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 选填 | 用于指定一组描述策略试图验证的标准集合的安全详情。这里介绍的所有注解都以逗号分隔的字符串表示。 注:您可以在控制台中根据您在策略页面上为策略定义的标准和类别查看策略违反。 |
| 选填 | 与策略相关的安全标准的名称。例如,美国国家标准与技术研究院 (NIST) 和支付卡行业 (PCI)。 |
| 选填 | 安全控制类别是针对一个或多个标准的具体要求。例如,系统和信息完整性类别可能表明您的策略包含一个数据传输协议来保护个人信息,符合 HIPAA 和 PCI 标准的要求。 |
| 选填 | 正在接受检查的安全控制名称。例如,访问控制或系统及信息完整性。 |
| 选填 | 用于创建与满足合规性的额外注意事项相关的依赖关系对象列表。 |
| 必填 | 用于创建一个或多个应用到受管集群的策略。 |
| 选填 | 对于策略模板,这用于创建依赖项对象列表,以及满足合规性的额外注意事项。 |
| 选填 | 用于在验证依赖项条件前将策略模板标记为合规。 |
| 必填 |
将值设为 |
| 可选。 |
指定您的策略的修复。参数值是 重要:有些策略类型可能不支持 enforce 功能。 |
2.2.3. 策略示例文件
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 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: PlacementRule apiGroup: apps.open-cluster-management.io subjects: - name: policy-role kind: Policy apiGroup: policy.open-cluster-management.io --- apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: placement-policy-role spec: clusterConditions: - status: "True" type: ManagedClusterConditionAvailable clusterSelector: matchExpressions: - {key: environment, operator: In, values: ["dev"]}
2.2.4. 放置 YAML 示例文件
PlacementBinding
和 Placement
资源可以与上一策略示例结合使用,以使用集群 Placement
API 而非 PlacementRule
API 部署策略。
--- 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 --- //Depends on if governance would like to use v1beta1 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"]}