创建自定义角色

本页面介绍了如何在 Google Distributed Cloud (GDC) air-gapped 中创建和管理自定义角色。借助自定义角色,您可以管理超出预定义角色中提供的标准权限集的访问权限,从而能够配置权限以满足您的特定条件。

自定义角色遵循最小权限原则,可用于授予执行敏感任务所需的最低访问权限,从而降低安全风险并防止利益冲突。

创建自定义角色可让您:

  • 定义访问权限范围:选择在整个组织或所有项目中应用权限,或将权限限制为仅适用于特定项目。
  • 精细调整访问权限:选择一个或多个已通过预定义角色提供的权限,以自定义对特定任务或职责的访问权限。

本页面适用于平台管理员群组中的受众群体,例如 IT 管理员或安全工程师,他们希望安全地管理对组织资源的访问权限。如需了解详情,请参阅 GDC 气隙环境受众群体文档

如需详细了解角色,请访问预定义角色说明角色定义

准备工作

自定义角色访问权限可在组织级层和项目级层进行管理。只能在创建自定义角色的同一组织或项目中授予访问权限。

如需获得创建和管理自定义角色所需的权限,请让管理员向您授予以下角色之一:

  • 自定义角色组织管理员:在组织或项目中创建和管理自定义角色。此角色包括更新、列出、查看、停用和删除自定义角色的权限。

    组织 IAM 管理员用户可以授予此角色。

  • 自定义角色项目管理员:在项目中创建和管理自定义角色。此角色可用于更新、列出、查看、停用和删除自定义角色。

    项目 IAM 管理员用户可以授予此角色。

详细了解如何为组织项目分配角色权限。

查看角色及其权限

自定义角色由一组您可以分配给用户的权限组成。 如需创建自定义角色,请从现有的预定义角色中选择权限,然后将它们组合起来以满足您的需求。您可以在自定义角色中添加的权限取决于您创建该角色的范围:组织或项目。

本部分介绍了如何列出可用角色(包括预定义角色和自定义角色)并查看其中的权限。您可以利用这些信息执行以下操作:

  • 确定新自定义角色的权限:了解使用 gcloud CLI 创建自定义角色--permissions 标志所需的特定权限字符串。
  • 查看现有角色:检查所选范围(组织或项目)内与任何预定义角色或自定义角色相关联的权限。

使用 GDC 控制台或 gdcloud CLI 列出角色并检查其权限:

控制台

  1. 登录 GDC 控制台。
  2. 在项目选择器中,选择要查看角色的组织或项目。
  3. 在导航菜单中,依次点击身份和访问权限 > 角色

    系统会显示可用预定义角色和自定义角色的列表。

  4. 点击角色名称可查看其详细信息,包括已分配的权限。

    当前范围(组织或项目)内预定义角色列出的权限可包含在新的自定义角色中。

gdcloud

  1. 确保您已安装 gdcloud CLI。如需了解详情,请参阅 gdcloud CLI 概览页面。
  2. 列出可用的角色:

    gdcloud iam roles list ROLE_TYPE \
      --project=PROJECT
    

    替换以下内容:

    • ROLE_TYPE:要列出的角色类型。有效值为 predefinedcustomall
    • PROJECT:您要查看角色的项目命名空间。对于组织范围的角色,请省略 --project 标志。
  3. 查看角色中的具体权限:

    gdcloud iam roles describe ROLE_NAME \
      --project=PROJECT
    

    替换以下内容:

    • ROLE_NAME:角色的 Kubernetes 资源名称。
    • PROJECT:您要查看角色权限的项目命名空间。对于组织范围的角色,请省略 --project 标志。

如需了解更多命令详情和使用示例,请参阅 gdcloud iam roles listgdcloud iam roles describe

创建自定义角色

通过将预定义角色中的权限分组到一起,创建新的自定义角色。 自定义角色会继承其所基于的预定义角色的 IAM 多区域功能。创建自定义角色后,您可以向用户授予访问权限

使用 GDC 控制台、gdcloud CLI 或 API 创建自定义角色:

控制台

  1. 登录 GDC 控制台。
  2. 在项目选择器中,选择要在哪个组织或项目中创建自定义角色。
  3. 在导航菜单中,依次点击身份和访问权限 > 角色
  4. 点击创建自定义角色
  5. 标题字段中,输入自定义角色的标题。
  6. 说明字段中,提供自定义角色的用途说明。
  7. ID 字段中,输入自定义角色的唯一标识符。

    自定义角色 ID 最多可包含 10 个小写字母数字字符,并且在角色创建后无法更改。

  8. 选择发布阶段

  9. 选择自定义角色的范围。

    如果您选择组织,则自定义角色将应用于整个组织中的所有资源。如果您选择项目,则自定义角色将应用于组织中的所有当前项目和未来项目。如果您想指定哪些项目可以访问自定义角色,可以选择仅限选定项目

  10. 点击添加权限

  11. 选中您要分配给自定义角色的一个或多个受支持的权限旁边的复选框。

    可用权限仅限于您选择的范围。如果您在添加权限后更改了范围,则必须确认之前分配的所有权限都已重置。

  12. 点击保存

  13. 点击创建

    您的新自定义角色会显示在角色页面上。

gdcloud

  1. 确保您已安装 gdcloud CLI。如需了解详情,请参阅 gdcloud CLI 概览页面。
  2. 创建自定义角色:

    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:可选。自定义角色的发布阶段。有效值为 ALPHABETAGADISABLED。如果省略此标志,则默认为 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:可选。自定义角色的发布阶段。有效值为 ALPHABETAGADISABLED。如果省略此字段,则默认为 ALPHA
  • TITLE:自定义角色的易记标题。
  • RULES_TYPE:此字段用于定义规则的范围。替换为 globalRules(对于全局 API 中的权限)或 zonalRules(对于区域 API 中的权限)。您无法在同一 CustomRole 资源中同时使用这两个字段。
  • RULES_LIST:缩进的 Kubernetes 标准 RBAC 规则对象列表。列表中的每个对象都会授予权限。您可以使用 gdcloud iam roles describe 检查预定义角色中的权限,从而确定正确的 apiGroupsresourcesverbs,如查看角色及其权限中所述。

    以下示例展示了 globalRules 对象中单个项的结构:

    globalRules:
    - apiGroups: ["storage.global.gdc.goog"]
      resources: ["buckettypes"]
      verbs: ["get", "list", "watch"]
    

    您可以在列表中包含多个项,每项定义一组不同的权限。

管理自定义角色

您负责管理自定义角色的生命周期。当 Distributed Cloud 添加新权限、功能或服务时,它会更新预定义角色。删除预定义角色或从预定义角色中移除权限等更新可能会导致依赖于这些权限的自定义角色无法正常运行。您必须监控这些更新,并手动调整受影响的自定义角色,以确保它们继续按预期运行。

您可以修改、停用或删除自定义角色;不过,您无法修改、停用或删除预定义角色。如需查看所有角色及其特定权限的列表,请参阅查看角色及其权限

修改自定义角色

使用 GDC 控制台、gdcloud CLI 或 API 修改自定义角色:

控制台

  1. 登录 GDC 控制台。
  2. 在项目选择器中,选择要修改自定义角色的组织或项目。
  3. 在导航菜单中,依次点击身份和访问权限 > 角色
  4. 从角色列表中,选择要修改的自定义角色。
  5. 在自定义角色详情页面上,点击修改
  6. 修改自定义角色的详细信息,例如标题、说明、ID 或发布阶段。
  7. (可选)添加或移除分配的权限。
    1. 点击添加权限,从可用权限列表中进行选择。
    2. 如需移除已分配的权限,请选中要移除的权限旁边的复选框,然后点击移除
  8. 点击保存

    系统会显示一条消息,确认您已保存更改。

gdcloud

  1. 确保您已安装 gdcloud CLI。如需了解详情,请参阅 gdcloud CLI 概览页面。
  2. 修改自定义角色:

    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:可选。自定义角色的发布阶段。有效值为 ALPHABETAGADISABLED。如果省略此标志,则默认为 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:可选。自定义角色的发布阶段。有效值为 ALPHABETAGADISABLED。如果省略此字段,则默认为 ALPHA
  • TITLE:自定义角色的易记标题。
  • RULES_TYPE:此字段用于定义规则的范围。替换为 globalRules(对于全局 API 中的权限)或 zonalRules(对于区域 API 中的权限)。您无法在同一 CustomRole 资源中同时使用这两个字段。
  • RULES_LIST:缩进的 Kubernetes 标准 RBAC 规则对象列表。列表中的每个对象都会授予权限。您可以使用 gdcloud iam roles describe 检查预定义角色中的权限,从而确定正确的 apiGroupsresourcesverbs,如查看角色及其权限中所述。

    以下示例展示了 globalRules 对象中单个项的结构:

    globalRules:
    - apiGroups: ["storage.global.gdc.goog"]
      resources: ["buckettypes"]
      verbs: ["get", "list", "watch"]
    

    您可以在列表中包含多个项,每项定义一组不同的权限。

停用自定义角色

停用的自定义角色仍会显示在您的角色列表中,并且仍可分配给用户;不过,该角色不会产生任何影响。您可以随时重新启用自定义角色。

使用 GDC 控制台、gdcloud CLI 或 API 停用自定义角色:

控制台

  1. 登录 GDC 控制台。
  2. 在项目选择器中,选择要停用自定义角色的组织或项目。
  3. 在导航菜单中,依次点击身份和访问权限 > 角色
  4. 在角色列表中,选择要停用的自定义角色。
  5. 在自定义角色详情页面上,点击停用

gdcloud

  1. 确保您已安装 gdcloud CLI。如需了解详情,请参阅 gdcloud CLI 概览页面。
  2. 停用自定义角色:

    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 中的权限)。您无法在同一 CustomRole 资源中同时使用这两个字段。
  • RULES_LIST:缩进的 Kubernetes 标准 RBAC 规则对象列表。列表中的每个对象都会授予权限。您可以使用 gdcloud iam roles describe 检查预定义角色中的权限,从而确定正确的 apiGroupsresourcesverbs,如查看角色及其权限中所述。

    以下示例展示了 globalRules 对象中单个项的结构:

    globalRules:
    - apiGroups: ["storage.global.gdc.goog"]
      resources: ["buckettypes"]
      verbs: ["get", "list", "watch"]
    

    您可以在列表中包含多个项,每项定义一组不同的权限。

删除自定义角色

已删除的角色会从系统中永久移除;不过,您可以使用相同的名称创建新角色。

使用 gdcloud CLI 或 API 删除自定义角色:

gdcloud

  1. 确保您已安装 gdcloud CLI。如需了解详情,请参阅 gdcloud CLI 概览页面。
  2. 删除自定义角色:

    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 文件的路径。此文件与您用于创建或更新角色的文件相同。