本页面介绍了如何在 Google Distributed Cloud (GDC) 网闸隔离配置中创建和管理自定义角色。自定义角色让您能够管理预定义角色中提供的标准权限集之外的访问权限,从而使您能够配置权限以满足特定条件。
自定义角色遵循最小权限原则,有助于授予执行敏感任务所需的最低访问权限,从而降低安全风险并防止利益冲突。
创建自定义角色后,您可以:
- 定义访问权限范围:选择在整个组织、所有项目中应用权限,或将权限限制在特定项目中。
- 量身定制精细访问权限:选择已通过预定义角色提供的一项或多项权限,以自定义对特定任务或职责的访问权限。
自定义角色受其创建范围的约束。只能在创建自定义角色的同一组织或项目中授予对自定义角色的访问权限。
本页面适用于平台管理员群组中的受众群体,例如希望安全地管理对组织资源的访问权限的 IT 管理员或安全工程师。如需了解详情,请参阅适用于 GDC 网闸隔离配置文档的受众群体。
准备工作
在创建或管理自定义角色之前,您必须申请必要的权限并准备好环境。
申请 IAM 组织角色
如需在整个组织或项目内创建、更新和删除自定义角色,请与您的 IAM 组织管理员联系,请求获取自定义角色组织管理员 (custom-role-org-admin) 角色。
详细了解如何为组织分配角色权限。
申请 IAM 项目角色
如需在特定项目中创建、更新和删除自定义角色,请与您的 IAM 项目管理员联系,请求获取自定义角色项目管理员 (custom-role-project-admin) 角色。
详细了解如何为项目分配角色权限。
准备环境
如需使用命令行工具创建或管理自定义角色,请完成以下设置:
如需将该 API 与
kubectl搭配使用,还需要进行额外的设置:- 安装 kubectl CLI。
- 为全局 API 服务器生成 kubeconfig 文件,以配置
kubectl访问权限。
查看角色及其权限
自定义角色由一组可分配给用户的权限组成。 如需创建自定义角色,请从现有预定义角色中选择权限,并根据需要进行组合。您可以添加到自定义角色中的权限取决于您创建该角色的范围:组织或项目。
本部分介绍了如何列出可用角色(预定义角色和自定义角色)并查看其中的权限。您可以使用这些信息执行以下操作:
- 确定新自定义角色的权限:了解使用 gdcloud CLI 创建自定义角色时
--permissions标志所需的特定权限字符串。 - 查看现有角色:检查所选范围(组织或项目)内任何预定义角色或自定义角色的相关权限。
使用 GDC 控制台或 gdcloud CLI 列出角色并检查其权限:
控制台
- 登录 GDC 控制台。
- 在项目选择器中,选择您要查看其角色的组织或项目。
在导航菜单中,依次点击身份和访问权限 > 角色。
系统会显示可用的预定义角色和自定义角色列表。
点击角色名称可查看其详细信息,包括分配的权限。
当前范围(组织或项目)内为预定义角色列出的权限是可包含在新的自定义角色中的权限。
gdcloud
- 确保您已安装 gdcloud CLI。如需了解详情,请参阅 gdcloud CLI 概览页面。
列出可用角色:
gdcloud iam roles list \ --type=ROLE_TYPE \ --project=PROJECT替换以下内容:
ROLE_TYPE:要列出的角色类型。有效值为predefined、custom或all。PROJECT:您要在其中查看角色的项目命名空间。对于组织级角色,请省略--project标志。
查看角色中的特定权限:
gdcloud iam roles describe ROLE_NAME \ --project=PROJECT替换以下内容:
ROLE_NAME:角色的 Kubernetes 资源名称PROJECT:您要在其中查看角色权限的项目命名空间。对于组织级角色,请省略--project标志。
如需了解更多命令详情和用法示例,请参阅 gdcloud iam roles list 和 gdcloud iam roles describe。
创建自定义角色
通过将预定义角色中的权限组合在一起,创建新的自定义角色。 自定义角色会继承其所基于的预定义角色的 IAM 多可用区功能。创建自定义角色后,您可以向用户授予访问权限。
使用 GDC 控制台、gdcloud CLI 或 API 创建自定义角色:
控制台
- 登录 GDC 控制台。
- 在项目选择器中,选择要在其中创建自定义角色的组织或项目。
- 在导航菜单中,依次点击身份和访问权限 > 角色。
- 点击创建自定义角色。
- 在标题字段中,输入自定义角色的标题。
- 在说明字段中,提供自定义角色的用途说明。
在 ID 字段中,输入自定义角色的唯一标识符。
自定义角色 ID 最多可以包含 10 个小写字母数字字符,并且在角色创建后无法更改。
选择发布阶段。
选择自定义角色的范围。
如果您选择组织,则自定义角色会应用于整个组织中的所有资源。如果您选择项目,则自定义角色会应用于组织中的所有当前和未来项目。如果您想指定哪些项目可以访问自定义角色,可以选择仅限所选项目。
点击添加权限。
选中要分配给自定义角色的一个或多个受支持权限旁边的复选框。
可用权限仅限于您选择的范围。如果您在添加权限后更改范围,则必须确认所有先前分配的权限均已重置。
点击保存。
点击创建。
您的新自定义角色会显示在角色页面上。
gdcloud
- 确保您已安装 gdcloud CLI。如需了解详情,请参阅 gdcloud CLI 概览页面。
创建自定义角色:
gdcloud iam roles create ROLE_ID \ --title=TITLE \ --description=DESCRIPTION \ --permissions=PERMISSIONS --stage=LAUNCH_STAGE替换以下内容:
ROLE_ID:自定义角色的唯一标识符。自定义角色 ID 最多可以包含 10 个小写字母数字字符,并且可以包含连字符。自定义角色 ID 在角色创建后无法更改。TITLE:自定义角色的易记称谓DESCRIPTION:自定义角色用途的说明PERMISSIONS:您要为自定义角色授予的权限的逗号分隔列表如需详细了解如何查找正确的权限字符串,请参阅查看角色及其权限。每个权限字符串都必须按照 gdcloud iam roles create 中的指南进行格式设置,其中
iamRoleName是包含该权限的预定义角色的 Kubernetes 资源名称。您可以在角色定义页面中或使用 gdcloud iam roles list 命令找到角色的 Kubernetes 资源名称。LAUNCH_STAGE:可选。自定义角色的发布阶段。有效值为ALPHA、BETA、GA或DISABLED。如果省略此标志,则默认为ALPHA。
如需查看必需和可选标志的完整列表以及使用示例,请参阅 gdcloud iam roles create。
或者,您也可以在 YAML 文件中定义自定义角色,并使用
--file标志:gdcloud iam roles create ROLE_ID --file=YAML_FILE_PATH将
YAML_FILE_PATH替换为包含必需标志和可选标志的 YAML 文件的路径。如果您使用--file标志,则系统会忽略所有其他标志,例如--title、--description和--permissions。
API
使用 kubectl 创建并应用 CustomRole 自定义资源:
kubectl apply -f - <<EOF
apiVersion: iam.global.gdc.goog/v1
kind: CustomRole
metadata:
name: ROLE_NAME
namespace: NAMESPACE
spec:
metadata:
description: DESCRIPTION
id: ROLE_ID
scope: SCOPE
stage: LAUNCH_STAGE
title: TITLE
RULES_TYPE:
- RULES_LIST
EOF
替换以下内容:
ROLE_NAME:角色的 Kubernetes 资源名称NAMESPACE:自定义角色的命名空间。对组织级角色和多个项目使用platform。对于项目级角色和单个项目,请使用项目命名空间(例如my-project)。DESCRIPTION:自定义角色用途的说明ROLE_ID:自定义角色的唯一标识符。自定义角色 ID 最多可以包含 10 个小写字母数字字符,并且可以包含连字符。自定义角色 ID 在角色创建后便无法更改。SCOPE:对在platform命名空间中创建的角色使用organization。对于在项目命名空间中创建的角色,请使用project。LAUNCH_STAGE:可选。自定义角色的发布阶段。有效值为ALPHA、BETA、GA或DISABLED。如果省略此字段,则默认为ALPHA。TITLE:自定义角色的易记称谓RULES_TYPE:规则的范围。替换为globalRules(对于全球 API 中的权限)、zonalRules(对于可用区级 API 中的权限)或两者。RULES_LIST:标准 Kubernetes RBAC 规则对象的缩进列表。列表中的每个对象都会授予权限。您可以使用gdcloud iam roles describe检查预定义角色中的权限,从而确定正确的apiGroups、resources和verbs,如查看角色及其权限中所示。以下示例展示了
globalRules对象中单个项的结构:globalRules: - apiGroups: ["storage.global.gdc.goog"] resources: ["buckettypes"] verbs: ["get", "list", "watch"]您可以在列表中添加多个项,每个项定义一组不同的权限。
管理自定义角色
您负责管理自定义角色的生命周期。当 Distributed Cloud 添加新权限、功能或服务时,它会更新预定义角色。删除预定义角色或从预定义角色中移除权限等更新可能会导致依赖这些权限的自定义角色无法正常运行。您必须监控这些更新,并手动调整受影响的自定义角色,以确保它们继续按预期运行。
您可以修改、停用或删除自定义角色;但是,您无法修改、停用或删除预定义角色。如需查看所有角色及其特定权限的列表,请参阅查看角色及其权限。
修改自定义角色
使用 GDC 控制台、gdcloud CLI 或 API 修改自定义角色:
控制台
- 登录 GDC 控制台。
- 在项目选择器中,选择要在其中修改自定义角色的组织或项目。
- 在导航菜单中,依次点击身份和访问权限 > 角色。
- 从角色列表中,选择要修改的自定义角色。
- 在自定义角色详情页面中,点击修改。
- 修改自定义角色详细信息,例如标题、说明、ID 或发布阶段。
- (可选)添加或移除已分配的权限。
- 点击添加权限,从可用权限列表中进行选择。
- 如需移除已分配的权限,请选中要移除的权限旁边的复选框,然后点击移除。
点击保存。
系统会显示一条消息,确认您已保存更改。
gdcloud
- 确保您已安装 gdcloud CLI。如需了解详情,请参阅 gdcloud CLI 概览页面。
修改自定义角色:
gdcloud iam roles update ROLE_ID \ --title=TITLE \ --description=DESCRIPTION \ --permissions=PERMISSIONS --stage=LAUNCH_STAGE替换以下内容:
ROLE_ID:自定义角色的唯一标识符TITLE:自定义角色的易记称谓DESCRIPTION:自定义角色用途的说明PERMISSIONS:您要为自定义角色授予的权限的逗号分隔列表如需详细了解如何查找正确的权限字符串,请参阅查看角色及其权限。每个权限字符串都必须按照 gdcloud iam roles create 中的指南进行格式设置,其中
iamRoleName是包含该权限的预定义角色的 Kubernetes 资源名称。您可以在角色定义页面中或使用 gdcloud iam roles list 命令找到角色的 Kubernetes 资源名称。LAUNCH_STAGE:可选。自定义角色的发布阶段。有效值为ALPHA、BETA、GA或DISABLED。如果省略此标志,则默认为ALPHA。
如需查看必需和可选标志的完整列表以及用法示例,请参阅 gdcloud iam roles update。
或者,您也可以在自定义角色的 YAML 文件中更新该角色,并使用
--file标志:gdcloud iam roles update ROLE_ID --file=YAML_FILE_PATH将
YAML_FILE_PATH替换为包含更新后的必需标志和可选标志的 YAML 文件的路径。如果您使用--file标志,则系统会忽略所有其他标志,例如--title、--description和--permissions。
API
使用 kubectl 修改 CustomRole 自定义资源:
kubectl apply -f - <<EOF
apiVersion: iam.global.gdc.goog/v1
kind: CustomRole
metadata:
name: ROLE_NAME
namespace: NAMESPACE
spec:
metadata:
description: DESCRIPTION
id: ROLE_ID
scope: SCOPE
stage: LAUNCH_STAGE
title: TITLE
RULES_TYPE:
- RULES_LIST
EOF
替换以下内容:
ROLE_NAME:角色的 Kubernetes 资源名称NAMESPACE:自定义角色的命名空间。对组织级角色和多个项目使用platform。对于项目级角色和单个项目,请使用项目命名空间(例如my-project)。DESCRIPTION:自定义角色用途的说明ROLE_ID:自定义角色的唯一标识符。自定义角色 ID 最多可以包含 10 个小写字母数字字符,并且可以包含连字符。自定义角色 ID 在角色创建后便无法更改。SCOPE:对在platform命名空间中创建的角色使用organization。对于在项目命名空间中创建的角色,请使用project。LAUNCH_STAGE:可选。自定义角色的发布阶段。有效值为ALPHA、BETA、GA或DISABLED。如果省略此字段,则默认为ALPHA。TITLE:自定义角色的易记称谓RULES_TYPE:规则的范围。替换为globalRules(对于全球 API 中的权限)、zonalRules(对于可用区级 API 中的权限)或两者。RULES_LIST:标准 Kubernetes RBAC 规则对象的缩进列表。列表中的每个对象都会授予权限。您可以使用gdcloud iam roles describe检查预定义角色中的权限,从而确定正确的apiGroups、resources和verbs,如查看角色及其权限中所示。以下示例展示了
globalRules对象中单个项的结构:globalRules: - apiGroups: ["storage.global.gdc.goog"] resources: ["buckettypes"] verbs: ["get", "list", "watch"]您可以在列表中添加多个项,每个项定义一组不同的权限。
停用自定义角色
停用的自定义角色仍会保留在角色列表中,并且仍可分配给用户;不过,该角色不会产生任何影响。您可以随时重新启用自定义角色。
使用 GDC 控制台、gdcloud CLI 或 API 停用自定义角色:
控制台
- 登录 GDC 控制台。
- 在项目选择器中,选择要在其中停用自定义角色的组织或项目。
- 在导航菜单中,依次点击身份和访问权限 > 角色。
- 在角色列表中,选择要停用的自定义角色。
- 在自定义角色详情页面上,点击停用。
gdcloud
- 确保您已安装 gdcloud CLI。如需了解详情,请参阅 gdcloud CLI 概览页面。
停用自定义角色:
gdcloud iam roles update ROLE_ID --stage=DISABLED替换以下内容:
ROLE_ID:自定义角色的唯一标识符
如需了解详情,请参阅 gdcloud iam roles update。
API
通过将 stage 字段更改为 DISABLED 来停用 CustomRole 自定义资源。确保所有其他字段都与您要停用的自定义角色的当前值匹配。
kubectl apply -f - <<EOF
apiVersion: iam.global.gdc.goog/v1
kind: CustomRole
metadata:
name: ROLE_NAME
namespace: NAMESPACE
spec:
metadata:
description: DESCRIPTION
id: ROLE_ID
scope: SCOPE
stage: DISABLED
title: TITLE
RULES_TYPE:
- RULES_LIST
EOF
替换以下内容:
ROLE_NAME:角色的 Kubernetes 资源名称NAMESPACE:自定义角色的命名空间。对组织级角色和多个项目使用platform。对于项目级角色和单个项目,请使用项目命名空间(例如my-project)。DESCRIPTION:自定义角色用途的说明ROLE_ID:自定义角色的唯一标识符。自定义角色 ID 最多可以包含 10 个小写字母数字字符,并且可以包含连字符。自定义角色 ID 在角色创建后便无法更改。SCOPE:对在platform命名空间中创建的角色使用organization。对于在项目命名空间中创建的角色,请使用project。TITLE:自定义角色的易记标题RULES_TYPE:规则的范围。替换为globalRules(对于全球 API 中的权限)、zonalRules(对于可用区级 API 中的权限)或两者。RULES_LIST:标准 Kubernetes RBAC 规则对象的缩进列表。列表中的每个对象都会授予权限。您可以使用gdcloud iam roles describe检查预定义角色中的权限,从而确定正确的apiGroups、resources和verbs,如查看角色及其权限中所示。以下示例展示了
globalRules对象中单个项的结构:globalRules: - apiGroups: ["storage.global.gdc.goog"] resources: ["buckettypes"] verbs: ["get", "list", "watch"]您可以在列表中添加多个项,每个项定义一组不同的权限。
删除自定义角色
已删除的角色会从系统中永久移除;不过,您可以创建同名的新角色。
使用 gdcloud CLI 或 API 删除自定义角色:
gdcloud
- 确保您已安装 gdcloud CLI。如需了解详情,请参阅 gdcloud CLI 概览页面。
删除自定义角色:
gdcloud iam roles delete ROLE_ID --project=PROJECT替换以下内容:
ROLE_ID:自定义角色的唯一标识符PROJECT:您要在其中删除自定义角色的项目命名空间。如果未指定--project标志,则会删除组织级范围的角色。
如需了解详情和使用示例,请参阅 gdcloud iam roles delete。
API
使用 kubectl 删除 CustomRole 自定义资源:
kubectl delete -f CUSTOM_ROLE
将 CUSTOM_ROLE 替换为 CustomRole YAML 文件的路径。这与您用于创建或更新角色的文件相同。