配置组织政策

组织政策可让您以编程方式集中控制组织的资源。作为组织政策管理员,您可以为整个组织配置政策。

在此版本的 Google Distributed Cloud (GDC) air-gapped 中,没有组织政策的界面或 CLI。您必须使用 API 或 kubectl CLI 来管理这些资源。

优势

配置组织政策可带来以下诸多好处:

  • 集中控制以配置关于如何使用组织资源的限制。
  • 为开发团队界定和建立界限,以确保始终遵从法规。
  • 帮助项目所有者及其团队快速行动,无需担心违反法规。

与 Identity and Access Management 的区别

Identity and Access Management 侧重于,可让管理员授权用户根据权限对特定资源执行操作。

组织政策侧重于什么,管理员可以对特定资源设置限制,以决定它们的配置方式。

可用组织政策类型列表

在此版本的 GDC 中,您可以使用以下政策类型。

GDCHRestrictedService

借助 GDCHRestrictedService 政策类型,您可以限制可在 GDC 上使用的服务。应用后,该政策会阻止使用其引用的 API。例如,您可以使用此政策类型将特定服务的使用限制在某些项目中。您还可以使用该政策完全限制对新 GDC 服务的访问权限,以便在允许团队使用该服务之前先对其进行测试。

在与服务资源相同的集群中创建此政策。您可以针对不同的服务或不同的项目创建此政策的多个实例。

以下是此政策的模板:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
  name: POLICY_NAME
spec:
  match:
    MATCH_SCHEMA
  parameters:
    disabledOperations:
      - DISABLED_OPERATION

替换以下内容:

  • POLICY_NAME:组织政策的名称。

  • MATCH_SCHEMA:要匹配的资源,以满足此限制。如需了解详情,请参阅定义集群内组织政策的范围部分。

  • DISABLED_OPERATION:相应政策会阻止的操作组。允许的值包括 CREATEUPDATEdisabledOperations 字段的默认值为 *

GDCHRestrictedService 政策仅支持 UPDATECREATE 操作。如需限制 GETLISTDELETE 操作,我们建议您使用 IAM 来分配角色。

GDCHRestrictedService 政策仅支持 GDC 上可用服务的以下子集。

服务 API 组 种类
Marketplace marketplace.gdc.goog MarketplaceService
Vertex AI Workbench aiplatform.gdc.goog Notebook
数据库服务 - Postgres postgresql.dbadmin.gdc.goog
  • DBCluster
  • BackupPlan
  • Import
  • Restore
数据库服务 - Oracle oracle.dbadmin.gdc.goog
  • DBCluster
  • BackupPlan
  • Import
Transfer Appliance system.gpc.gke.io TransferApplianceRequest
备份 backup.gdc.goog BackupRepositoryManager
Dataproc Container for Spark(Marketplace 服务) sparkoperator.k8s.io SparkApplication

您不必为给定的服务指定所有种类。您可以通过仅指定相应的种类来限制对服务的部分功能的使用。

例如,如需限制对 Marketplace 服务的更新,请创建以下政策:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
  name: no-update-to-marketplace-service
spec:
  match:
    kinds:
    - apiGroups:
      - "marketplace.gdc.goog"
      kinds:
      - MarketplaceService
  parameters:
    disabledOperations:
      - "UPDATE"

此政策会阻止对任何 marketplace.gdc.goog API 组执行任何 UPDATE 操作,前提是该 API 组的 kind 值为 MarketplaceService。实际上,此政策会阻止任何人修改任何 Marketplace 服务。

如需完全停用某项服务,请在 disabledOperations 参数中同时列出 CREATEUPDATE,并列出此处记录的所有类型。

授予 IAM 角色以管理组织政策

每项组织政策都具有关联的 IAM 角色。向您希望管理相应组织政策的用户和群组授予该 IAM 角色。如需允许用户或群组创建、更新或删除类型为 GDCHRestrictedService 的政策,请为该用户或群组分配 gdchrestrictedservice-policy-manager IAM 角色。

定义集群内组织政策的范围

定义组织政策时,请确定该政策应影响所有命名空间、仅影响特定命名空间,还是影响除给定列表中的命名空间以外的所有命名空间。为此,请结合使用政策定义的 .spec.match.excludedNamespaces.spec.match.namespaceSelector.spec.match.namespaces.spec.match.scope 参数。

如需详细了解这些参数,请参阅组织政策匹配部分页面。例如,如需仅允许在具有标签 owner: dba-team 的命名空间中创建数据库,请创建以下政策:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
  name: db-restricted-to-dbas
spec:
  match:
    scope: Namespaced
    namespaceSelector:
      matchExpressions:
      # We are restricting the use of the service in namespaces that
      # don't have the owner: dba-team label
      - key: owner
        operator: NotIn
        values:
        - dba-team
    kinds:
    - apiGroups:
      - "postgresql.dbadmin.gdc.goog"
      kinds:
      - DBCluster
      - BackupPlan
      - Import
      - Restore
    - apiGroups:
      - "oracle.dbadmin.gdc.goog"
      kinds:
      - DBCluster
      - BackupPlan
      - Import
  parameters:
    disabledOperations:
      - "UPDATE"
      - "CREATE"

回滚现有政策

如需停止强制执行现有政策,请使用 kubectl CLI 将其删除。使用可让您访问定义政策的集群和 gdchrestrictedservice-policy-manager IAM 角色的 kubeconfig 文件。

如需删除组织政策,请运行以下命令:

kubectl --kubeconfig CLUSTER_KUBECONFIG delete \
    GDCHRestrictedService/POLICY_NAME

替换以下内容:

  • CLUSTER_KUBECONFIG:组织政策所在的集群的 kubeconfig 文件。

  • POLICY_NAME:要删除的组织政策的名称。

在审核模式下测试政策

您可以测试政策,而无需强制执行。测试政策,以确保政策在推出之前不会破坏现有系统,或者大致了解某种行为的普遍程度。如需添加测试,请向政策定义添加 enforcementAction。此参数有三个可能的值:

  • deny:政策已强制执行。这是默认设置。
  • dryrun:允许执行操作,但您可以在审核日志和政策状态中看到存在政策违规行为。使用 kubectl --kubeconfig CLUSTER_KUBECONFIG get POLICY_TYPE/POLICY_NAME 检查违规情况。
  • warn:与 dryrun 等效,但测试还会在响应触发政策违规的请求时显示警告。

例如,如需测试停用 Marketplace 的政策,请创建以下政策:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
  name: disable-marketplace-service-project-alice
Spec:
  enforcementAction: warn
  match:
    kinds:
      - apiGroups: ["marketplace.gdc.goog"]
        kinds: ["MarketplaceService"]