Fairwinds开源k8s operator RBAC Manager

介绍

Fairwinds开源k8s operator RBAC Manager

RBAC Manager 旨在简化 Kubernetes 中的授权。这是一个使用新自定义资源支持 RBAC 声明式配置的运算符。您可以指定所需的状态,而不是直接管理角色绑定或服务帐户,RBAC 管理器将进行必要的更改以实现该状态。

这个项目有三个主要目标:

  1. 为 RBAC 提供一种更易于理解和可扩展的声明式方法。
  2. 减少出色的身份验证所需的配置量。
  3. 使用 CI/CD 实现 RBAC 配置更新的自动化。

一个例子

要完全理解 RBAC 管理器的工作原理,通过一个简单的示例会很有帮助。在这个例子中,我们将有一个用户,乔,需要edit访问该web命名空间和view访问api命名空间。

使用 RBAC,这需要创建 2 个角色绑定,第一个授予edit对web命名空间的访问权限。

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: joe-web
  namespace: web
subjects:
- kind: User
  name: joe@example.com
roleRef:
  kind: ClusterRole
  name: edit
  apiGroup: rbac.authorization.k8s.io

第二个授予view对api命名空间的访问权限。

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: joe-api
  namespace: api
subjects:
- kind: User
  name: joe@example.com
roleRef:
  kind: ClusterRole
  name: view
  apiGroup: rbac.authorization.k8s.io

很容易看出这变得多么重复。使用 RBAC Manager,我们可以使用自定义资源来实现相同的结果。

apiVersion: rbacmanager.reactiveops.io/v1beta1
kind: RBACDefinition
metadata:
  name: joe-access
rbacBindings:
  - name: joe
    subjects:
      - kind: User
        name: joe@example.com
    roleBindings:
      - namespace: api
        clusterRole: view
      - namespace: web
        clusterRole: edit

好处

使用 RBAC 定义自定义资源,我们可以将配置量减少一半(或通常更多)。RBAC 管理器被部署为操作员并侦听新的和更新的 RBAC 定义,进行必要的更改以实现所需的状态。

这种方法对于两种特定情况非常有用:

1. 更新角色绑定

不幸的是,无法更改现有 Kubernetes 角色绑定所指的角色。这意味着更改授予用户的角色涉及删除和重新创建 Kubernetes 角色绑定。使用 RBAC 管理器,该过程会在 RBAC 定义更新时自动发生。

2. 检测角色绑定移除

当涉及到 RBAC 配置更改的潜在 CI 自动化时,跟踪角色绑定的删除可能会变得非常棘手。如果您使用的是传统工作流程,其中所需的 Kubernetes 对象在 repo 中表示为 yaml 文件,则创建和更新相当简单,但基于角色绑定被删除来撤销访问是相当棘手的。

使用 RBAC 管理器,每个 RBAC 定义“拥有”它创建的任何资源,并将始终将当前 RBAC 定义中的所需状态与其当前拥有的资源列表进行比较。如果角色绑定不再包含在 RBAC 定义中,RBAC 管理器将自动将其删除。

入门

RBAC 管理器可以通过Helm 图表轻松安装 (打开新窗口)或此存储库中包含的 Kubernetes 部署 YAML:

helm repo add fairwinds-stable https://charts.fairwinds.com/stable
helm install fairwinds-stable/rbac-manager --name rbac-manager --namespace rbac-manager
kubectl apply -f deploy/

在您的集群中安装 RBAC 管理器后,您将能够将 RBAC 定义部署到您的集群。上面以及此存储库的示例目录中都有这些自定义资源的示例。

动态命名空间和标签

在指定角色绑定配置时,RBAC 定义现在可以包括namespaceSelectors代替namespace属性。这在使用动态配置的命名空间时非常有用。

apiVersion: rbacmanager.reactiveops.io/v1beta1
kind: RBACDefinition
metadata:
  name: dev-access
rbacBindings:
  - name: dev-team
    subjects:
      - kind: Group
        name: dev-team
    roleBindings:
      - clusterRole: edit
        namespaceSelector:
          matchLabels:
            team: dev

在上面的示例中,将自动为每个带有team=dev标签的命名空间创建角色绑定。这支持与其他 Kubernetes 标签选择器相同的功能,请阅读官方文档 (打开新窗口)想要查询更多的信息。

进一步阅读

RBAC 定义

RBAC 定义可以管理集群角色绑定、角色绑定和服务帐户。为了更好地理解这些是如何工作的,请阅读我们的RBAC 定义文档。

特定于云的身份验证提示

要在 Kubernetes 中正确配置 RBAC 授权,您首先需要有良好的身份验证。我们提供了一些有用的文档,用于在 AWS、GKE 和 Azure 上使用身份验证。

使用 RBAC 查找提高可见性

我们有一个相关的开源工具,可让您轻松查找 Kubernetes 集群中附加到任何用户、服务帐户或组名的角色和集群角色。如果这听起来很有趣,请查看rbac-lookup (打开新窗口)在 GitHub 上。

执照

Apache 许可证 2.0

RBAC 定义

正如 Kubernetes 部署使 Pod 更易于大规模管理一样,RBAC 定义旨在简化对角色绑定和服务帐户的大规模管理。RBAC 管理器将创建、更新或删除在 RBAC 定义中引用的集群角色绑定、角色绑定或服务帐户。下面是一个更完整的例子:

apiVersion: rbacmanager.reactiveops.io/v1beta1
kind: RBACDefinition
metadata:
  name: rbac-manager-users-example
rbacBindings:
  - name: cluster-admins
    subjects:
      - kind: User
        name: jane@example.com
    clusterRoleBindings:
      - clusterRole: cluster-admin
  - name: web-developers
    subjects:
      - kind: User
        name: dave@example.com
      - kind: User
        name: joe@example.com
    roleBindings:
      - clusterRole: edit
        namespace: web
      - clusterRole: view
        namespace: api
  - name: ci-bot
    subjects:
      - kind: ServiceAccount
        name: ci-bot
        namespace: rbac-manager
    roleBindings:
      - clusterRole: edit
        namespaceSelector:
          matchLabels:
            ci: edit
      - clusterRole: admin
        namespaceSelector:
          matchExpressions:
            - key: app
              operator: In
              values:
                - web
                - queue

在上面的示例中,RBAC Manager 将创建以下资源:

  • 授予 Jane 集群管理员访问权限的集群角色绑定
  • 赋予 Dave 和 Joe 在 Web 命名空间中编辑访问权限的角色绑定
  • 赋予 Dave 和 Joe 在 api 命名空间中查看访问权限的角色绑定
  • rbac-manager 命名空间中名为 ci-bot 的服务帐户
  • 角色绑定(s)表示,授予在所有命名空间与CI-BOT服务帐户的编辑权限ci=edit标签
  • 角色绑定(s)表示,授予在所有命名空间的CI-BOT服务帐户管理权限与app=web或app=queue标签

在这个 repo 的 examples 目录中有更多的 RBAC 定义示例。

升级

升级到 RBAC 管理器 0.4.0

RBAC Manager 0.4.0 是一个巨大的版本,不幸的是包含一些重大的突破性变化。据我们所知,到目前为止,我们是唯一一直在使用这个项目的人,但我们当然仍然不会掉以轻心的改变。我们希望它提供的优势值得升级。这个版本涉及从 Python 到 Go + Kubebuilder 的过渡。此举有许多优点:

  • 使用 client-go 改进测试能力
  • 将 Docker 镜像大小减少 2/3
  • 通过框架使用鼓励使用最佳实践
  • 强类型应该有助于避免引入愚蠢的错误
  • 使用 Kubebuilder 生成文档的潜力

除了这些好处之外,以下是此版本涉及的主要新更改:

  • 新的 RBAC 定义语法
  • 支持多个 RBAC 定义
  • 使用 OwnerReferences 将特定的 RBAC 定义与集群角色绑定、角色绑定或服务帐户相关联
  • 对所有 RBAC 定义字段使用 CRD 验证
  • CRD 从 rbac-manager.reactiveops.io 迁移到 rbacmanager.reactiveops.io
  • 支持群组(在使用 Heptio Authenticator 之类的工具时很有帮助)
  • 一些基本测试到位

升级过程

不幸的是,随着自定义资源定义的更改,此过程将主要涉及删除以前的配置并使用更新的语法创建新的替换配置。在开始此过程之前,请确保您具有不受 RBAC 管理器管理的集群管理员访问权限。此过程的一部分将涉及临时删除这些角色,因此确保您通过单独的集群角色绑定具有集群管理员访问权限非常重要。

  1. 删除任何现有的 RBAC 定义 – 这允许原始 RBAC 管理器版本删除任何关联的角色绑定。
  2. 删除 RBAC Manager 部署配置。
  3. 部署 RBAC Manager 的更新版本。
  4. 使用新语法创建更新的 RBAC 定义(请参阅examples此存储库的目录)。

文档

查看docs.fairwinds.com 上的文档

Fairwinds 的其他项目

喜欢 rbac-manager?查看我们的其他一些项目:

  • Polaris – 为 Kubernetes 资源审计、执行和构建策略,包括 20 多个内置最佳实践检查
  • Goldilocks – 通过将您的内存和 CPU 设置与实际使用情况进行比较来调整您的 Kubernetes 部署规模
  • Pluto – 检测在未来版本中已弃用或删除的 Kubernetes 资源
  • Nova – 检查您的任何 Helm 图表是否有可用更新

Github地址:
https://github.com/FairwindsOps/rbac-manager

内容出处:,

声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。文章链接:http://www.yixao.net/share/28116.html

发表评论

登录后才能评论