本页面介绍如何在 Google Distributed Cloud (GDC) air-gapped 中创建和管理自定义角色。借助自定义角色,您可以管理超出预定义角色中提供的标准权限集的访问权限,从而能够配置权限以满足您的特定条件。
自定义角色遵循最小权限原则,有助于授予敏感任务所需的最低访问权限,从而降低安全风险并防止利益冲突。
创建自定义角色可让您:
- 定义访问权限范围:选择在整个 组织、所有项目或特定项目中应用权限。
- 定制精细的访问权限:选择一个或多个已通过预定义角色提供的权限,以自定义对特定任务或职责的访问权限。
自定义角色受其创建范围的约束。只能在创建自定义角色的同一组织或项目中授予对该自定义角色的访问权限。
本页面适用于平台管理员组内的受众群体,例如 IT 管理员或安全工程师,他们希望安全地管理对组织资源的访问权限。如需了解详情,请参阅 GDC 网闸隔离配置文档的受众群体。
准备工作
在创建或管理自定义角色之前,您必须请求必要的权限并准备好环境。
请求 IAM 组织角色
如需在整个组织或项目内创建、更新和删除自定义角色,请与您的组织 IAM 管理员联系,以请求 Custom Role Org Admin (custom-role-org-admin) 角色。
详细了解如何为 组织分配角色权限。
请求 IAM 项目角色
如需在特定项目内创建、更新和删除自定义角色,请与您的项目 IAM 管理员联系,以请求 Custom Role Project Admin (custom-role-project-admin) 角色。
详细了解如何为 项目分配角色权限。
准备环境
如需使用命令行工具创建或管理自定义角色,请完成以下设置:
如需将 API 与
kubectl搭配使用,还需要进行其他设置:- 安装 kubectl CLI。
- 为全局 API 服务器生成 kubeconfig 文件
以配置
kubectl访问权限。
查看角色及其权限
自定义角色由一组您可以分配给用户的权限组成。 如需创建自定义角色,请从现有预定义角色中选择权限,并将其组合起来以满足您的需求。您可以在自定义角色中包含的权限取决于您创建角色的范围:组织或项目。
本部分介绍如何列出可用角色(包括预定义角色和自定义角色)并查看其中的权限。您可以使用此信息执行以下操作:
- 确定新自定义角色的权限:了解在使用
gdcloud CLI 创建自定义角色时,
--permissions标志所需的特定权限字符串。 - 查看现有角色:检查与所选范围(组织或项目)内的任何 预定义角色或自定义角色关联的权限。
使用 GDC 控制台或 gdcloud CLI 列出角色并检查其权限:
控制台
- 登录 GDC 控制台。
- 在项目选择器中,选择要查看其角色的组织或项目。
在导航菜单中,依次点击 Identity & Access > Roles 。
系统会显示可用预定义角色和自定义角色的列表。
点击角色名称可查看其详细信息,包括分配的权限。
当前范围(组织或项目)内列出的预定义角色的权限是可包含在新自定义角色中的权限。
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 控制台。
- 在项目选择器中,选择要创建自定义角色的组织或项目。
- 在导航菜单中,依次点击 Identity & Access > Roles 。
- 点击创建自定义角色 。
- 在标题 字段中,输入自定义角色的标题。
- 在说明 字段中,提供自定义角色的用途说明。
在 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:您要为自定义角色授予的权限的英文逗号分隔列表如需详细了解如何查找正确的权限字符串,请参阅 查看角色及其权限。 每个权限字符串都必须按照 in 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 控制台。
- 在项目选择器中,选择要修改自定义角色的组织或项目。
- 在导航菜单中,依次点击 Identity & Access > Roles 。
- 从角色列表中,选择要修改的自定义角色。
- 在自定义角色详情页面中,点击修改 。
- 修改自定义角色详情,例如标题、说明、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:您要为自定义角色授予的权限的英文逗号分隔列表如需详细了解如何查找正确的权限字符串,请参阅 查看角色及其权限。 每个权限字符串都必须按照 in 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 控制台。
- 在项目选择器中,选择要停用自定义角色的组织或项目。
- 在导航菜单中,依次点击 Identity & Access > Roles 。
- 在角色列表中,选择要停用的自定义角色。
- 在自定义角色详情页面中,点击停用 。
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 文件的路径。这与您用于创建或更新角色的文件相同。