3.7. 管理安全策略
创建一个安全策略,根据您指定的安全标准、类别和控制,报告并验证您的集群合规性。
查看以下部分:
3.7.1. 创建安全策略
您可以使用命令行界面 (CLI) 或者从控制台创建安全策略。
需要的访问权限: 集群管理员
重要 :您必须定义放置规则和放置绑定,才能将策略应用到特定集群。为 Cluster selector 字段输入有效的值,以定义 PlacementRule
和 PlacementBinding
。如需有效表达式,请参阅 Kubernetes 文档中的支持基于集合的要求的资源。查看 Red Hat Advanced Cluster Management 策略所需的对象定义:
- PlacementRule:定义必须部署策略的集群选择器。
- PlacementBinding :将放置绑定到放置规则。
在策略概述中查看策略 YAML 文件的更多描述。
3.7.1.1. 使用命令行界面创建安全策略
完成以下步骤,使用命令行界面 (CLI) 创建策略:
运行以下命令来创建策略:
kubectl create -f policy.yaml -n <policy-namespace>
定义策略使用的模板。要编辑
.yaml
文件,添加一个policy-templates
字段来定义模板。您的策略可能类似以下 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"]
定义
PlacementRule
。确保将PlacementRule
更改为通过调整clusterSelector
来指定需要应用策略的集群。查看放置规则示例概述您
PlacementRule
可能类似如下内容:apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: placement1 spec: clusterConditions: - type: ManagedClusterConditionAvailable status: "True" clusterNames: - "cluster1" - "cluster2" - clusterSelector matchLabels: cloud: IBM
定义一个
PlacementBinding
,将您的策略绑定到PlacementRule
。您PlacementBinding
可能类似以下 YAML 示例:apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding1 placementRef: name: placement1 apiGroup: apps.open-cluster-management.io kind: PlacementRule subjects: - name: policy1 apiGroup: policy.open-cluster-management.io kind: Policy
3.7.1.1.1. 通过 CLI 查看您的安全策略
完成以下步骤,通过 CLI 查看您的安全策略:
运行以下命令,查看具体安全策略的详情:
kubectl get policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace> -o yaml
运行以下命令,查看您的安全策略的描述:
kubectl describe policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>
3.7.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' 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 --- apiVersion: apps.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-pod placementRef: name: placement-pod kind: PlacementRule apiGroup: apps.open-cluster-management.io subjects: - name: policy-pod kind: Policy apiGroup: policy.open-cluster-management.io --- apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: placement-pod spec: clusterConditions: [] clusterSelector: matchLabels: cloud: "IBM"
点击 Create Policy。从控制台创建了安全策略。
3.7.1.2.1. 从控制台查看您的安全策略
在控制台中查看任何安全策略及其状态。进入 Governance 页面,以查看您的策略的表列表。注: 您可以选择 Policies 标签页或 Cluster violations 选项卡来过滤策略列表。
选择一个策略来查看更多详情。此时会显示 Details、Clusters 和 Templates 标签页。当无法决定集群或策略状态时,会显示以下信息: No status
。
3.7.1.3. 通过 CLI 创建策略设置
默认情况下,策略集是在没有策略或放置的情况下创建的。您必须为策略集合创建放置,并至少有一个策略存在于集群中。在创建策略集时,您可以添加多个策略。运行以下命令,通过 CLI 创建策略集:
kubectl apply -f <policyset-filename>
3.7.1.4. 从控制台创建策略集
在导航菜单中选择 Governance。然后选择 Policy set 选项卡。选择 Create policy set 按钮并完成表单。添加策略集详情后,选择 提交 按钮。
查看 stable Policyets
,这需要部署策略生成器,PolicySets-table。
3.7.2. 更新安全策略
查看以下部分以了解如何更新安全策略。
3.7.2.1. 通过 CLI 将策略添加到策略集中
运行以下命令来编辑您的策略设置:kubectl edit policysets your-policyset-name
将策略名称添加到策略集的 policies
部分的列表中。使用以下命令在策略集的放置部分中应用添加的策略: kubectl apply -f your-added-policy.yaml
。已创建一个 PlacementBinding
和 PlacementRule
。注: 如果您删除放置绑定,策略仍会由策略集放置。
3.7.2.2. 从控制台在策略集中添加策略
选择 Policy set 选项卡在策略集中添加一个策略。选择 Actions 图标并选择 Edit。此时会出现 Edit policy set 表单。
进入到表单的 Policies 部分,以选择要添加到策略集的策略。
3.7.2.3. 禁用安全策略
您的策略默认是启用的。从控制台禁用您的策略。
登录到 Red Hat Advanced Cluster Management for Kubernetes 控制台后,进入 Governance 页面来查看您的策略的表列表。
选择 Actions 图标 > Disable policy。此时会出现 Disable Policy 对话框。
点击 Disable policy。您的策略已禁用。
3.7.3. 删除安全策略
通过 CLI 或控制台删除安全策略。
通过 CLI 删除安全策略:
运行以下命令来删除安全策略:
kubectl delete policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>
删除策略后,它会从一个或多个目标集群中移除。运行以下命令验证您的策略是否已移除:
kubectl get policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>
从控制台删除安全策略:
在导航菜单中点 Governance 来查看您的策略的表列表。在策略违反表中点击您要删除的策略的 Actions 图标。
点击 Remove。在 Remove policy 对话框中点击 Remove policy
3.7.3.1. 从控制台创建策略集
在 Policy set 选项卡中,选择策略集的 Actions 图标。当您单击 Delete 时,会出现 Permanently delete Policyset? 对话框。
点击 Delete 按钮。
3.7.4. 清理由策略创建的资源
在配置策略中使用 pruneObjectBehavior
参数来清理策略创建的资源。当设置 pruneObjectBehavior
时,仅在删除与其关联的配置策略(或父策略)后,才会清理相关的对象。查看可用于参数的值的以下描述:
-
DeleteIfCreated
:清理策略创建的所有资源。 -
DeleteAll
:清理策略管理的所有资源。 -
None
:这是默认值,维护之前版本中的相同行为,但没有删除相关资源。
您可以在 YAML 中直接设置值,因为您通过 CLI 创建策略。在控制台中,您可以在 Policy 模板 步骤的 Prune Object Behavior 部分中选择值。
注: 如果安装 Operator 的策略使用 pruneObjectBehavior
参数,则需要额外的清理来完成 Operator 卸载。其他清理可能包括删除 operator ClusterServiceVersion
对象。