2.2. 策略概述
要创建和管理策略,请获得可见性和修复以满足标准的配置,请使用 Red Hat Advanced Cluster Management for Kubernetes 安全策略框架。Kubernetes 自定义资源定义实例用于创建策略。除了受管集群命名空间外,您可以在 hub 集群上的任意命名空间中创建策略。如果在受管集群命名空间中创建策略,它将由 Red Hat Advanced Cluster Management 删除。每个 Red Hat Advanced Cluster Management 策略都可以被组织到一个或多个策略模板定义中。有关策略元素的详情,请查看此页面的 Policy YAML 表 部分。
您需要确保受管云环境满足针对 Kubernetes 集群上托管的工作负载的软件工程、安全工程、弹性、安全性和法规合规性的内部企业安全标准。
2.2.1. 先决条件
-
每个策略都需要一个
放置
资源来定义策略文档应用到的集群,以及绑定 Red Hat Advanced Cluster Management for Kubernetes 策略的PlacementBinding
资源。有关如何定义放置资源
的更多信息,请参阅集群生命周期文档中的放置概述。 -
您必须创建
PlacementBinding
将您的策略与一个Placement
绑定,以便将策略应用到受管集群。 -
要使用
放置资源
,您必须将ManagedClusterSet
资源绑定到带有ManagedClusterSetBinding
资源的Placement
资源的命名空间。如需了解更多详细信息 ,请参阅创建 ManagedClusterSetBinding 资源。 -
从控制台为策略创建放置资源时,放置容限的状态会自动添加到
放置资源
中。如需了解更多详细信息,请参阅 为放置添加容限。
最佳实践 :在使用 Placement
资源时,使用命令行界面(CLI) 来更新策略。
在以下部分了解更多有关策略组件的详细信息:
2.2.2. 策略 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.2.3. 策略 YAML 表
查看以下策略参数描述表:
字段 | 可选或必需的 | 描述 |
---|---|---|
| 必填 |
将值设置为 |
| 必填 |
将值设为 |
| 必填 | 用于标识策略资源的名称。 |
| 选填 | 用于指定一组描述策略试图验证的标准集合的安全详情。这里介绍的所有注解都以逗号分隔的字符串表示。 注:您可以在控制台中根据您在策略页面上为策略定义的标准和类别查看策略违反。 |
| 选填 |
当此参数设置为 |
| 选填 |
将此参数设置为 |
| 选填 | 与策略相关的安全标准的名称。例如,美国国家标准与技术研究院 (NIST) 和支付卡行业 (PCI)。 |
| 选填 | 安全控制类别是针对一个或多个标准的具体要求。例如,系统和信息完整性类别可能表明您的策略包含一个数据传输协议来保护个人信息,符合 HIPAA 和 PCI 标准的要求。 |
| 选填 | 正在接受检查的安全控制名称。例如,访问控制或系统及信息完整性。 |
| 必填 |
将值设为 |
| 选填 |
指定您的策略的修复。参数值是 |
| 选填 |
指定在将策略复制到受管集群时是否应复制策略的标签和注解。如果设置为 |
| 选填 | 用于创建与满足合规性的额外注意事项相关的依赖关系对象列表。 |
| 必填 | 用于创建一个或多个应用到受管集群的策略。 |
| 选填 | 对于策略模板,这用于创建依赖项对象列表,以及满足合规性的额外注意事项。 |
| 选填 | 用于在验证依赖项条件前将策略模板标记为合规。 重要:有些策略类型可能不支持 enforce 功能。 |
2.2.4. 策略示例文件
查看以下 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"]}