web-dev-qa-db-ja.com

kubectlとサブジェクトに割り当てられた(クラスター)ロールの表示

Kubectlを使用して、クラスターの役割がどのサブジェクトに適用されているかを確認できます。例:

kubectl get clusterrolebindings system:node --all-namespaces -o json                                                                                                                                                                    
{
    "apiVersion": "rbac.authorization.k8s.io/v1beta1",
    "kind": "ClusterRoleBinding",
     ....
     ....
    "subjects": [
        {
            "apiGroup": "rbac.authorization.k8s.io",
            "kind": "Group",
            "name": "system:nodes"
        }
    ]
}

この情報を他の方法で取得したいと考えています。例:「system:nodes」サブジェクトに適用されているすべてのポリシーを一覧表示したい。

どうやってやるの?

7
Jeroen Jacobs

逆インデックス用のAPIはありません。バインディングを検索して、予想されるサブジェクトを含むバインディングをフィルタリングできます。たとえば、bash、jq、kubectlを使用します。

# $1 is kind (User, Group, ServiceAccount)
# $2 is name ("system:nodes", etc)
# $3 is namespace (optional, only applies to kind=ServiceAccount)
function getRoles() {
    local kind="${1}"
    local name="${2}"
    local namespace="${3:-}"

    kubectl get clusterrolebinding -o json | jq -r "
      .items[]
      | 
      select(
        .subjects[]?
        | 
        select(
            .kind == \"${kind}\" 
            and
            .name == \"${name}\"
            and
            (if .namespace then .namespace else \"\" end) == \"${namespace}\"
        )
      )
      |
      (.roleRef.kind + \"/\" + .roleRef.name)
    "
}

$ getRoles Group system:authenticated
ClusterRole/system:basic-user
ClusterRole/system:discovery

$ getRoles ServiceAccount attachdetach-controller kube-system
ClusterRole/system:controller:attachdetach-controller
21
Jordan Liggitt