TSB 提供了细粒度的权限管理,以控制对 TSB 资源的访问。你可以授予对资源(如组织租户工作空间等)的访问权限。一组权限可以放入角色中,然后可以重复使用这些角色来分配权限给适当的资源,例如用户或团队。一旦定义了角色,就可以使用访问绑定对象将角色绑定到一组用户或团队。

资源模型

为了了解如何处理 TSB 权限,你首先需要了解 TSB 中资源的模型。

在 TSB 中,资源被建模为一个分层树,其中组织是所有资源的根。组织包含一个或多个集群、租户、团队和用户。租户包含一个或多个工作空间。最后,工作空间可以包含一个或多个网关组、流量组和安全组。

注意
在本文档中,术语“配置组”用于指代所有网关组、流量组和安全组。
image

角色

角色是一组针对特定资源的权限。例如,你可以创建一个允许对工作空间进行读/写权限的角色,并且对其父租户仅允许读权限。

下面是可用的权限列表:

权限(操作) 描述
Read 允许读取资源。
Write 允许更新资源。
Create 允许创建子资源。
Delete 允许删除资源。
SetPolicy 允许将资源的控制委派给其他用户。

(*1) 当用户创建子资源时,用户将被授予新创建的资源的所有权,因此对它们具有完全控制权。

TSB 附带了一些内置角色,具有一组最常见情况的权限:

角色 读取 写入 创建 删除 SetPolicy
管理员
编辑
创建者
写手
读者

管理员编辑角色都旨在赋予资源树的所有权(完全控制)。但是,管理员角色适用于系统管理员,而编辑角色适用于仅拥有资源树的用户或团队。

创建者角色适用于可以创建自己的资源并查看其他资源的用户。例如,具有创建者角色的用户可以读取工作空间中的所有资源,包括由其他用户创建的资源,但对于他们在该工作空间中创建的资源拥有完全所有权。

相比之下,写手角色只允许用户读取和修改现有资源,但不允许创建新资源。

最后,读者角色仅允许用户读取现有资源。他们将无法执行其他操作。

访问绑定

在 TSB 中,访问绑定对象定义了一组角色与特定 TSB 资源的一组用户/团队之间的绑定。下面显示了AccessBinding的示例。在指定目标资源、角色、用户和团队时,需要使用 FQN。

apiVersion: rbac.tsb.tetrate.io/v2
kind: AccessBindings
metadata:
  fqn: organizations/myorg/tenants/mytenant/workspaces/w1
spec:
  allow:
  - role: rbac/admin
    subjects:
    - user: organizations/myorg/users/alice
    - team: organizations/myorg/teams/platform-team
    - serviceAccount: organizations/myorg/serviceaccounts/sa

角色定义了对资源的权限集,而访问绑定定义了与特定资源相关的一组用户/团队关联的角色。由于团队成员可以更轻松地动态更改,因此通常建议你将权限分配给团队而不是用户,以便具有更大的灵活性。

注意

TSB 将自动为上述任何资源创建一个访问绑定对象,当创建新资源时。这个访问绑定将将创建资源的用户设置为管理员。

例如,如果你创建了一个租户,TSB 将创建一个AccessBindings,将你设置为租户的管理员。

请勿创建新的访问绑定,如果你想将权限授予你的团队,因为你将会覆盖自动创建的访问绑定。为确保不会意外覆盖自动创建的访问绑定,请首先获取目标访问绑定 tctl get,编辑必要部分,然后使用 tctl apply 应用。

完全限定名称

为了明确定义

一个资源,每个资源都有一个完全限定名称(FQN),描述了它们在资源层次结构中的位置。这些名称在你将在示例中使用的对象定义中使用。

以下显示了每个资源使用的命名模式。

资源 FQN
角色 rbac/<role name>
组织 organizations/<org name>
集群 organizations/<org name>/clusters/<cluster name>
服务 organizations/<org name>/services/<service name>
团队 organizations/<org name>/teams/<team name>
用户 organizations/<org name>/users/<user name>
服务帐户 organizations/<org name>/serviceaccounts/<service account name>
WASM 扩展 organizations/<org name>/extensions/<extension name>
租户 organizations/<org name>/tenants/<tenant name>
工作空间 organizations/<org name>/tenants/<tenant name>/workspaces/<workspace name>
应用程序 organizations/<org name>/tenants/<tenant name>/applications/<application name>
API organizations/<org name>/tenants/<tenant name>/applications/<application name>/apis/<api name>
网关组 organizations/<org name>/tenants/<tenant name>/workspaces/<workspace name>/gatewaygroups/<group name>
安全组 organizations/<org name>/tenants/<tenant name>/workspaces/<workspace name>/securitygroups/<group name>
交通组 organizations/<org name>/tenants/<tenant name>/workspaces/<workspace name>/trafficgroups/<group name>
Istio 内部组 organizations/<org name>/tenants/<tenant name>/workspaces/<workspace name>/istiointernalgroups/<group name>

使用角色和权限

当你首次安装 TSB 时,你将使用具有超级管理员特权的平台管理员帐户。出于明显的原因,你不希望让组织的其他成员使用此帐户使用 TSB。你应该创建新用户和团队,或使用从你的 IdP(身份提供者)(如 LDAP、Azure AD 或其他)导入的用户。

在本节中,你将了解如何将角色和权限分配给你的团队的常见场景。出于演示目的,示例将通过使用tctl命令行执行,但你可以通过 Web UI 配置 TSB,效果相同。

对于此示例,请假设你要配置 TSB 以具有以下团队和相应的设置:

团队 描述
平台团队 成员充当组织管理员。他们可以创建租户、工作空间、配置组,并授予特定团队对这些资源的访问权限
应用团队 成员能够配置运行在特定命名空间中的应用程序。具体来说,他们拥有工作空间中的特定流量组的所有权。
安全团队 成员能够读取租户下的所有内容,并在工作空间中配置安全组设置。

示例将引导你逐步配置权限。你需要完成以下所有步骤才能实现所需状态。

请假设在此示例中提到的租户、工作空间、配置组、用户和团队已经创建。另外,请注意,这不是实现相同效果的唯一方法。可能存在满足上述条件的一些角色、权限和绑定的组合。

使用访问绑定的注意事项

在下面的示例中,请务必使用_现有_访问绑定对象,而不是创建新的访问绑定对象。每个资源都存在一个访问绑定。如果创建新的绑定对象,你将实际上覆盖现有的绑定,在大多数情况下应避免这样做。

相反,当你被指示在以下示例中编辑访问绑定时,请确保首先使用 tctl get 获取绑定,进行编辑,然后使用 tctl apply 应用。

例如,如果你正在使用组织AccessBindings,首先获取目标绑定:

tctl get accessbindings organizations/myorg -o yaml > bindings.yaml

然后在进行编辑后,应用绑定:

tctl apply -f bindings -o yaml > bindings.yaml

要获取目标租户的AccessBindings,你将使用tctl get accessbindings organizations/myorg/tenants/tenant1 -o yaml。对于层次结构中下面的其他资源,你需要提供正确的 FQN。

配置平台团队

作为超级管理员用户,你将首先创建平台团队,然后执行任何操作。授予平台团队对必要资源的管理员角色。

在此示例中,将在特定组织myorg上授予平台团队 Admin 角色。获取有关预期组织的AccessBindings对象,并添加平台团队(orgnizations/myorg/teams/platform):

apiVersion: rbac.tsb.tetrate.io/v2
kind: AccessBindings
metadata:
  fqn: organizations/myorg
spec:
  allow:
  - role: rbac/admin
    subjects:
    - team: organizations/myorg/teams/platform
      ...

使用 tctl apply -f 应用上述配置。

其余示例假设上述平台团队已准备好所有必要资源,以便配置可以继续进行。

配置应用团队和工作空间

应用团队应该能够查看租户中的资源,以及能够在工作空间内创建配置组,但不能执行其他操作。在这个示例和其他示例中,假定租户名称为tenant1

要为团队授予对租户的读取权限,请检索用于预期租户的AccessBindings对象,并将应用团队添加为读者:

apiVersion: rbac.tsb.tetrate.io/v2
kind: AccessBindings
metadata:
  fqn: organizations/myorg/tenants/tenant1
spec:
  allow:
  - role: rbac/reader
    subjects:
    - team: organizations/myorg/teams/app
      ...

要为团队授予对工作空间的创建权限,请检索用于预期工作空间的AccessBindings对象,并将应用团队添加为创建者:

apiVersion: rbac.tsb.tetrate.io/v2
kind: AccessBindings
metadata:
  fqn: organizations/myorg/tenants/tenant1/workspaces/w1
spec:
  allow:
  - role: rbac/creator
    subjects:
    - team: organizations/myorg/teams/app

然后使用 tctl apply -f 应用这些配置。

配置安全团队和配置组

在前面的部分中,已经指出应用团队只能访问特定的流量组。然而,由于之前的工作空间AccessBindings定义将创建者角色授予了应用团队,[他们可以随意创建新的配置组。

在下一个场景中,平台团队想要限制应用团队拥有由他们为其创建的特定流量组。

此外,安全团队应具有对平台团队为其创建的特定安全组的类似权限。

要实现这一目标,请再次检索预期租户的AccessBindings,并将安全团队添加为读者,以便他们可以读取租户信息。确保也将应用团队保留在其中。

apiVersion: rbac.tsb.tetrate.io/v2
kind: AccessBindings
metadata:
  fqn: organizations/myorg/tenants/tenant1
spec:
  allow:
  - role: rbac/reader
    subjects:
    - team: organizations/myorg/teams/security
    - team: organizations/myorg/teams/app
    ...

再次检索预期工作空间的AccessBindings。这次从创建者角色中删除应用团队,并将应用团队和安全团队添加为工作空间的读者。

apiVersion: rbac.tsb.tetrate.io/v2
kind: AccessBindings
metadata:
  fqn: organizations/myorg/tenants/tenant1/workspaces/w1
spec:
  allow:
  - role: rbac/reader
    subjects:
    - team: organizations/myorg/teams/app
    - team: organizations/myorg/teams/security
    ...

然后检索预期的TrafficGroupAccessBindings,并将应用团队添加为创建者。假设TrafficGroup由平台团队创建。

apiVersion: rbac.tsb.tetrate.io/v2
kind: AccessBindings
metadata:
  fqn: organizations/myorg/tenants/tenant1/workspaces/w1/trafficgroups/t1
spec:
  allow:
  - role: rbac/creator
    subjects:
    - team: organizations/myorg/teams/app
    ...

类似地,检索并编辑预期的SecurityGroupAccessBindings,并将安全团队添加为创建者。假设SecurityGroup由平台团队创建。

apiVersion: rbac.tsb.tetrate.io/v2
kind: AccessBindings
metadata:
  fqn: organizations/myorg/tenants/tenant1/workspaces/w1/securitygroups/s1
spec:
  allow:
  - role: rbac/creator
    subjects:
    - team: organizations/myorg/teams/security
    ...

然后使用 tctl apply -f 应用这些对象。

一旦所有内容都成功应用,你应该已经在所需的配置中使用了 TSB。

你可以使用以下命令来应用上述配置文件(例如,将配置文件保存为 config.yaml):

tctl apply -f config.yaml

这将会应用配置文件中定义的权限和角色配置。请确保你在执行此操作之前已经创建了所需的资源,如团队、租户、工作空间、配置组等。一旦配置成功应用,TSB 将按照你的需求进行配置。

最后更新于 2024/10/16