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 策略控制器