在 Kyma 中管理用户和授权

学习目标

  • 描述 Kyma 中的用户和授权

Kyma 中的用户和授权

注意

在本课中,我们侧重于通过 Kyma Dashboard 手动分配授权。预配和联合(federation)方法不在本学习旅程的讨论范围内。

Kyma 的安全性构建在 Kubernetes 稳健的基于角色的访问控制(RBAC)系统之上,该系统确保用户和服务拥有执行操作所需的权限,同时不损害平台的安全性。通过精确的角色分配和 API 定义,Kyma 允许对资源进行细粒度的访问控制。RBAC 概念包括角色和角色绑定、集群角色和集群角色绑定的使用,以及基于 API 组和动词(Verbs)对这些角色的定义。RBAC 概念与 SAP BTP 账户层面的角色和角色集合概念完全解耦、相互独立。

您可以在此处进一步了解 RBAC:使用 RBAC 授权

如果您是更具技术背景的人员,例如管理员或开发人员,则需要与 Kyma 的底层集群进行交互。为此,您需要登录 Kyma dashboard。要登录此 dashboard,必须将您的用户添加到 Kyma 环境中。用户仍存储在身份提供者中,只是与 Kyma 环境建立链接。当您通过 RBAC 中的角色绑定将正确的角色或集群角色绑定到用户后,您就能够与底层集群中的属性、对象和元素进行交互,或对它们执行操作。

如果您更偏向最终用户,或者在 SAP BTP 账户层面我们称之为业务用户,那么您交互的是部署并运行在 Kyma 环境中的服务和应用程序。如果开发人员遵循了使用 XSUAA 服务的建议,则授权是通过子账户层面的角色和角色集合、经由 SAP BTP cockpit 授予的。对于这种场景,您可以像在之前课程中学到的那样使用一切功能。

注意

后续概念仅适用于所谓的使用基于 RBAC 系统的集群角色的平台用户。

当您想要为 Kyma 内的用户分配授权时,需要使用角色(roles)和集群角色(cluster roles)。两者非常相似,但在细节上有细微差别。

集群角色

这些是适用于整个 Kubernetes 集群的权限集合。它们通常用于需要在集群级别管理资源的管理任务。示例任务包括创建命名空间、管理节点或配置集群范围的策略。

角色

与集群角色不同,角色仅限于特定命名空间。它们定义该命名空间内资源的权限,从而实现更细粒度的控制。

创建集群角色时,您需要定义规则,以及可选的标签和注解。借助这些元素,您可以定义角色的接收者所获得的结构和授权。

标签

标签是附加到 Pod 和服务等对象的键值对。标签有助于识别和组织资源,并在选择器中大量用于将资源分组,以便执行部署和服务等操作。标签必须是键值对,其中键和值都是字符串。

注解

注解是与标签类似的键值对,但它们用于向对象附加不用于选择目的的元数据。它们存储非标识性信息,这些信息对外部工具或存储有关对象的任意元数据可能很有用。

规则

在角色和集群角色的上下文中,规则是定义可以对哪些资源执行哪些操作的核心组件。它们定义角色和集群角色中包含的权限集合。它们指定可以在特定 API 组或资源中对特定资源执行的操作(动词)。

API 组

Kubernetes 中的 API 组用于组织资源,以便更好地管理和扩展 API。它们在 RBAC 中至关重要,通过为每个资源指定适当的 API 组来定义精确的权限。这确保了 Kubernetes 集群内不同资源集合之间安全高效的访问控制。我们可以将 API 组分为两种类型:

  • 核心 API 组: 包含 Pod、服务、节点等基本 Kubernetes 资源。访问这些资源时无需指定 API 组。

  • 具名 API 组: 使用附加资源扩展 API,每个组都有自己的版本和资源。

常见的 API 组包括:

apps: 管理应用程序

batch: 处理批处理

networking.k8s.io: 管理网络

rbac.authorization.k8s.io: 管理 RBAC 资源

以及更多

资源

指定这些规则适用的资源。这可以是任何 Kubernetes 对象,例如 Pod、服务、节点等。

动词

动词表示可以对资源执行的特定操作。这些动词对于定义用户、组或服务账户在 Kubernetes 集群中拥有哪些权限至关重要。常见的动词包括:

get: 获取特定资源的详细信息。

list: 列出特定类型的所有资源。

create: 创建新资源。

update: 修改现有资源。

delete: 删除资源。

以及更多

以下是一个对一切拥有完全访问权限的集群角色示例(不推荐):

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-admin
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]

以下是一个用于管理名为 my-namespace 的命名空间中的 Pod 和服务的授权的角色示例:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: developer
namespace: my-namespace
rules:
- apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "list", "create", "delete"]

您想要确定 Kyma 环境中已创建并存在的集群角色。为此,您需要导航到 Kyma dashboard 并使用侧边栏菜单:Configuration → Cluster Roles。您可以看到所有现有的集群角色,并选择它们以显示角色详细信息。如果您需要更改现有角色,只需选择 Edit。如果您想确定或更改角色而不是集群角色,过程完全相同,只是您需要先通过 Kyma dashboard 进入相应的命名空间。

当您想要创建集群角色时,需要导航到 Kyma dashboard 并使用侧边栏菜单:Configuration → Cluster Roles。要创建新的集群角色,请选择 Create。您需要在可视化表单或 YAML 格式中定义所有必需的属性。为加速集群角色的创建,您可以使用预定义模板,例如只读模板或无限制授权模板,并根据需要进行调整。要完成集群角色的创建,您需要再次选择 Create 进行保存。集群角色本身不会立即生效。您需要创建集群角色绑定来授予授权。如果您想创建角色而不是集群角色,过程完全相同,只是您需要先通过 Kyma dashboard 进入相应的命名空间。

要将(集群)角色分配给例如管理员或开发人员,您需要创建(集群)角色绑定。创建(集群)角色绑定时,您需要定义若干属性:角色类型、要绑定的角色以及主体(subjects),即接收者,以及可选的标签和注解。注解和标签的使用方式与(集群)角色创建中完全相同。

角色绑定

角色绑定用于将角色中定义的权限授予特定命名空间内的某个用户或一组用户。

集群角色绑定

集群角色绑定用于将 ClusterRole 中定义的权限授予整个集群中的某个用户、一组用户或服务账户。

角色类型

这可以是集群角色,也可以是命名空间级别的普通角色。

提示

创建集群角色绑定时,类型固定为集群角色。

角色

您已创建并想要分配给某人的(集群)角色。选择基于角色名称。

主体

主体是(集群)角色绑定的接收者。通过绑定,他们获得相应的授权。Kyma 中有三种类型的主体:

用户

用户是可以登录并与系统交互的个人。用户经过认证,通常通过 SAP Identity Authentication Service 或任何其他受支持的身份提供者进行。他们的角色和权限受到管理,以确保他们拥有在 Kyma 环境中履行职责所需的适当访问权限。通常,Kyma 中的用户属于技术导向很强的员工。示例:登录以部署和管理服务的开发人员和管理员。

用户组

用户组是共享共同角色和权限的用户集合。通过将用户分组,管理和分配权限变得更加高效。您无需为每个用户单独分配角色,而是可以将角色分配给用户组,组内的所有用户都会继承这些角色。示例:具有部署权限的 Developers 组和具有管理权限的 Admins 组。

服务账户

服务账户是一种特殊类型的账户,供应用程序和服务使用,而不是供个人用户使用。服务账户通常用于机器对机器通信、运行自动化任务,或集成 Kyma 环境中的不同服务。示例:由 CI/CD 流水线工具用于自动化微服务和应用程序的部署。

以下是一个角色绑定示例:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-configmaps
namespace: dev
subjects:
- kind: User
name: johndoe
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: read-configmaps
apiGroup: rbac.authorization.k8s.io

以下是一个集群角色绑定示例:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: read-secrets
subjects:
- kind: Group
name: dev-team
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: read-secrets
apiGroup: rbac.authorization.k8s.io

当您想要创建集群角色绑定时,需要导航到 Kyma dashboard 并使用侧边栏菜单:Configuration → Cluster Role Bindings。要创建新的集群角色绑定,请选择 Create。您可以在可视化表单或 YAML 格式中定义所有必需的属性。要完成集群角色绑定的创建并激活该绑定,您需要再次点击 Create 进行保存。如果您想创建角色绑定而不是集群角色绑定,过程完全相同,只是您需要先通过 Kyma dashboard 进入相应的命名空间。

进一步了解 Kyma 和 Kubernetes RBAC

注意

除了使用 Kyma dashboard 通过 RBAC 维护 Kyma 中的(集群)角色和(集群)角色绑定外,您还可以使用 kubectl 完成所有这些任务。

在 Kyma 中管理集群角色

您想要创建一个具有所有只读授权的新集群角色。您想使用相应的模板。

任务 1:在 Kyma 中管理集群角色

练习开始练习(SAP 官方交互式练习)

结果

您已基于模板创建了一个新的集群角色。在真实场景中,您可以更改该角色并添加或删除其他元素,例如标签、注解、规则或动词;下一步,您将创建集群角色绑定,将您的集群角色映射到用户。由于 Kyma 的这些集群角色概念基于 Kubernetes RBAC,您可以在 Kubernetes 文档中找到更多信息:https://kubernetes.io/docs/reference/access-authn-authz/rbac/

本课其余配图

Kyma_Levels

Kyma_Users

Kyma_Roles_Concepts

kyma_roles

kyma_role_creation

Kyma_RoleBindings

kyma_role_bindings