【问题标题】:Granting RBAC roles in k8s cluster using terraform使用 terraform 在 k8s 集群中授予 RBAC 角色
【发布时间】:2021-07-15 02:17:51
【问题描述】:

我想将RBAC 规则分配给一个用户,该用户提供对除'create''delete' 使用Terraform 资源中'namespace' 动词之外的所有资源的访问权限。

目前我们的规则如下:

rule {
    api_groups = ["*"]
    resources  = ["*"]
    verbs      = ["*"]
  }

【问题讨论】:

    标签: kubernetes terraform rbac


    【解决方案1】:

    我们可以在Role and ClusterRole documentation 中找到,权限(规则)纯粹是附加的——没有“拒绝”规则:

    角色和集群角色 RBAC 角色或 ClusterRole 包含表示一组权限的规则。权限纯粹是附加的(没有“拒绝”规则)。

    可以找到可能的动词列表here


    您需要提供应该应用于规则中包含的资源的所有动词。
    而不是:

    verbs      = ["*"]
    

    提供所需的动词,例如:

    verbs      = ["get", "list", "patch", "update", "watch"]
    


    例如,我创建了一个 example-role Role 和一个 example_role_binding RoleBinding
    example_role_binding RoleBindingexample-role Role 中定义的权限授予用户john
    注意:有关使用以下资源的详细信息,请参阅kubernetes_rolekubernetes_role_binding 资源文档。

    resource "kubernetes_role" "example_role" {
      metadata {
        name      = "example-role"
        namespace = "default"
      }
    
      rule {
        api_groups = ["*"]
        resources  = ["*"]
        verbs      = ["get", "list", "patch", "update", "watch"]
      }
    }
    
    resource "kubernetes_role_binding" "example_role_binding" {
      metadata {
        name      = "example_role_binding"
        namespace = "default"
      }
      role_ref {
        api_group = "rbac.authorization.k8s.io"
        kind      = "Role"
        name      = "example-role"
      }
    
      subject {
        kind      = "User"
        name      = "john"
        api_group = "rbac.authorization.k8s.io"
      }
    }
    

    另外,我创建了test_user.sh Bash 脚本来快速检查它是否按预期工作:
    注意:您可能需要修改变量namespaceresources , 和 user 以满足您的需求。

    $ cat test_user.sh
    #!/bin/bash
    
    namespace=default
    resources="pods deployments"
    user=john
    
    echo "=== NAMESPACE: ${namespace} ==="
    for verb in create delete get list patch update watch; do
        echo "-- ${verb} --"
        for resource in ${resources}; do
            echo -n "${resource}: "
            kubectl auth can-i ${verb} ${resource} -n ${namespace} --as=${user}
        done
    done
    
    $ ./test_user.sh
    === NAMESPACE: default ===
    -- create --
    pods: no
    deployments: no
    -- delete --
    pods: no
    deployments: no
    -- get --
    pods: yes
    deployments: yes
    -- list --
    pods: yes
    deployments: yes
    ...
    

    【讨论】:

      猜你喜欢
      • 2019-05-21
      • 1970-01-01
      • 2019-06-07
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 2014-11-19
      • 1970-01-01
      相关资源
      最近更新 更多