借助组织政策,您可以通过程序化方式对组织的资源进行集中控制。作为组织政策管理员,您可以在整个组织中配置政策,以实现以下优势:
- 集中控制以配置关于如何使用组织资源的限制。
- 为开发团队定义和制定安全措施,使其保持在合规性边界内。
- 帮助 Project Owner 及其团队快速行动,同时不违反合规性。
Google Distributed Cloud (GDC) 网闸隔离配置不提供用于创建和管理组织政策的控制台界面或专用 CLI。您必须使用 Kubernetes API 或 kubectl CLI。
与身份和访问权限管理的区别
Identity and Access Management (IAM) 和组织政策具有互补的访问和治理功能:
- IAM 侧重于授予权限。它定义了谁(成员,例如用户、群组或服务账号)可以对哪些资源(资源范围)执行哪些操作(角色)。通过 IAM 角色授予的权限是累加的,没有拒绝规则。
- 组织政策侧重于建立安全防护机制。借助这些政策,管理员可以对整个组织中的资源配置程序化限制,例如停用特定服务,或使用基于属性的访问权限控制 (ABAC) 根据主体属性限制资源修改。组织政策优先于 IAM 角色,即使成员拥有 IAM 角色,组织政策也会阻止操作。
准备工作
在配置组织政策之前,您必须请求必要的权限并准备好环境。
申请 IAM 角色
请与您的 IAM 组织管理员联系,根据您需要执行的任务申请以下 IAM 角色:
- Restricted Service Policy Admin (
gdchrestrictedservice-policy-admin):创建、更新和删除受限服务政策。 - Restrict By Attributes Policy Admin (
gdchrestrictbyattributes-policy-admin):创建、更新和删除基于属性的访问权限控制政策。
准备环境
生成 kubeconfig 文件,以配置 kubectl CLI 访问权限。
配置政策
您可以在 GDC 中配置两种类型的组织政策:
- 受限服务政策 (
GDCHRestrictedService):限制您可以在集群中使用或修改的服务。 - 基于属性的访问权限控制政策 (
GDCHRestrictByAttributes):根据从身份提供方映射的主体属性,有条件地限制对集群中资源的访问。
配置受限服务政策
借助 GDCHRestrictedService 政策类型,您可以通过屏蔽特定 API 来限制可在集群中使用或修改的服务,例如将服务限制为特定项目,或在测试新服务时屏蔽对该服务的访问。在服务资源所在的集群中创建此政策。您可以在集群中为不同的服务或项目创建多个政策实例。
GDCHRestrictedService 支持 CREATE、UPDATE 和 DELETE 操作。如需限制 GET 和 LIST 读取操作,请使用 IAM 角色绑定来授予和撤消访问权限。
配置受限服务政策:
定义政策清单:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GDCHRestrictedService metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: disabledOperations: - DISABLED_OPERATION替换以下内容:
POLICY_NAME:组织政策的名称。API_GROUP:要限制的服务的 API 组,如下面的受支持服务表中所列。KIND:要限制的资源种类,如下面的受支持服务表中所列。DISABLED_OPERATION:此政策屏蔽的操作组。允许的值包括CREATE、UPDATE和DELETE。disabledOperations字段的默认值为*。如需完全停用某项服务,请列出CREATE、UPDATE和DELETE(并指定其所有类型)。
默认情况下,该政策会应用于集群中的所有命名空间。如需将政策范围限定为特定命名空间或项目,请参阅在集群中定义组织政策的范围。
GDCHRestrictedService政策支持 GDC 上的以下部分服务:服务 API 组 种类 Marketplace marketplace.gdc.googMarketplaceServiceVertex AI Workbench aiplatform.gdc.googNotebook数据库服务 - Postgres postgresql.dbadmin.gdc.googDBClusterBackupPlanImportRestore
Transfer Appliance system.gpc.gke.ioTransferApplianceRequest备份 backup.gdc.googBackupRepositoryManagerDataproc Container for Spark(Marketplace 服务) sparkoperator.k8s.ioSparkApplication如果某项服务在表中列出了多种类型(例如数据库服务),您只能指定要限制的个别类型。例如,您可以屏蔽
Restore操作,同时继续允许DBCluster操作。以下示例限制了对 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"使用 kubectl CLI 应用政策:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yaml替换以下内容:
CLUSTER_KUBECONFIG:要应用政策的集群的 kubeconfig 文件POLICY_NAME:组织政策文件的名称
配置基于属性的访问权限控制政策
借助 GDCHRestrictByAttributes 政策类型,您可以创建 ABAC 政策,以根据主体属性有条件地限制对资源的访问。例如,您可以使用此政策类型限制对存储桶的写入或修改操作,以便只有具有特定身份属性(例如 citizenship=USA 或 citizenship=UK)的用户或服务账号才能执行这些操作。
在资源所在的集群中创建此政策。您可以在集群中为不同的资源或项目创建多个政策实例。
配置基于属性的访问权限控制政策:
创建一个补丁 JSON 文件,用于为
IdentityProviderConfig资源映射自定义身份属性:cat <<EOF > attributeMapping-patch.json { "CUSTOM_ATTRIBUTE": "assertion[\"CUSTOM_ATTRIBUTE\"]" } EOF将
CUSTOM_ATTRIBUTE替换为要映射的身份属性的名称,例如citizenship。在
platform命名空间中修补IdentityProviderConfig资源:kubectl --kubeconfig CLUSTER_KUBECONFIG patch \ IdentityProviderConfig IDENTITY_PROVIDER_CONFIG_NAME \ -n platform --type=json \ -p '[{"op":"add","path":"/spec/oidc/attributeMapping", "value": '"$(cat attributeMapping-patch.json)"'}]'替换以下内容:
CLUSTER_KUBECONFIG:身份提供方所在集群的 kubeconfig 文件IDENTITY_PROVIDER_CONFIG_NAME:IdentityProviderConfig资源的名称
定义政策清单:
apiVersion: constraints.global.gatekeeper.sh/v1beta1 kind: GDCHRestrictByAttributes metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: attributes: - CUSTOM_ATTRIBUTE attributeValues: - ALLOWED_ATTRIBUTE_VALUE替换以下内容:
POLICY_NAME:组织政策的名称。API_GROUP:要限制的资源的 API 组,例如object.gdc.goog。KIND:要限制的资源种类,例如Bucket。CUSTOM_ATTRIBUTE:从身份提供方映射的自定义主体属性,例如citizenship。ALLOWED_ATTRIBUTE_VALUE:自定义属性的允许值,例如USA。如果主体的属性与任何允许的值都不匹配,则其请求会被拒绝。
默认情况下,该政策会应用于集群中的所有命名空间。如需将政策范围限定为特定命名空间或项目,请参阅在集群中定义组织政策的范围。
以下示例将
project-foo命名空间中Bucket资源的修改限制为具有citizenship=USA或citizenship=UK属性的主体:apiVersion: constraints.global.gatekeeper.sh/v1beta1 kind: GDCHRestrictByAttributes metadata: name: restrict-by-citizenship spec: match: scope: Namespaced kinds: - apiGroups: - "object.gdc.goog" kinds: - Bucket namespaces: - project-foo parameters: attributes: - "citizenship" attributeValues: - "USA" - "UK"使用 kubectl CLI 应用政策:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yaml替换以下内容:
CLUSTER_KUBECONFIG:要应用政策的集群的 kubeconfig 文件POLICY_NAME:组织政策文件的名称
定义集群内组织政策的应用范围
在定义组织政策时,请确定该政策是应影响所有命名空间、仅影响特定命名空间,还是影响除给定列表之外的所有命名空间。为此,请结合使用政策定义的 .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
parameters:
disabledOperations:
- "UPDATE"
- "CREATE"
- "DELETE"
回滚现有政策
如需停止强制执行现有政策,请使用 kubectl CLI 将其删除。使用 kubeconfig 文件,该文件可让您访问定义了政策的集群以及与政策类型(例如 gdchrestrictedservice-policy-admin 或 gdchrestrictbyattributes-policy-admin)对应的 IAM 角色。
删除组织政策:
kubectl --kubeconfig CLUSTER_KUBECONFIG delete \
POLICY_TYPE/POLICY_NAME
替换以下内容:
CLUSTER_KUBECONFIG:组织政策所在的集群的 kubeconfig 文件POLICY_TYPE:要删除的组织政策的类型,例如GDCHRestrictedService或GDCHRestrictByAttributesPOLICY_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"]