3.7. 管理安全策略


创建一个安全策略,根据您指定的安全标准、类别和控制,报告并验证您的集群合规性。

查看以下部分:

3.7.1. 创建安全策略

您可以使用命令行界面 (CLI) 或者从控制台创建安全策略。

需要的访问权限: 集群管理员

重要 :您必须定义放置规则和放置绑定,才能将策略应用到特定集群。为 Cluster selector 字段输入有效的值,以定义 PlacementRulePlacementBinding。如需有效表达式,请参阅 Kubernetes 文档中的支持基于集合的要求的资源。查看 Red Hat Advanced Cluster Management 策略所需的对象定义:

  • PlacementRule:定义必须部署策略的集群选择器
  • PlacementBinding :将放置绑定到放置规则。

策略概述中查看策略 YAML 文件的更多描述。

3.7.1.1. 使用命令行界面创建安全策略

完成以下步骤,使用命令行界面 (CLI) 创建策略:

  1. 运行以下命令来创建策略:

    kubectl create -f policy.yaml -n <policy-namespace>
  2. 定义策略使用的模板。要编辑 .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"]
  3. 定义 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
  4. 定义一个 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 查看您的安全策略:

  1. 运行以下命令,查看具体安全策略的详情:

    kubectl get policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace> -o yaml
  2. 运行以下命令,查看您的安全策略的描述:

    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 选项卡来过滤策略列表。

选择一个策略来查看更多详情。此时会显示 DetailsClustersTemplates 标签页。当无法决定集群或策略状态时,会显示以下信息: 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。已创建一个 PlacementBindingPlacementRule注: 如果您删除放置绑定,策略仍会由策略集放置。

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 删除安全策略:

    1. 运行以下命令来删除安全策略:

      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 对象。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.