Where can I get a list of Kubernetes API resources and subresources?

后端 未结 8 1693
庸人自扰
庸人自扰 2020-12-30 22:59

I am trying to configure Kubernetes RBAC in the least-permissive way possible and I want to scope my roles to specific resources and subresouces. I\'ve dug through the doc

8条回答
  •  南笙
    南笙 (楼主)
    2020-12-30 23:43

    The resources, sub-resources and verbs that you need to define RBAC roles are not documented anywhere in a static list. They are available in the discovery documentation, i.e. via the API, e.g. /api/apps/v1.

    The following bash script will list all the resources, sub-resources and verbs in the following format:

    api_version resource: [verb]
    

    where api-version is core for the core resources and should be replaced by "" (an empty quoted string) in your role definition.

    For example, core pods/status: get patch update.

    The script requires jq.

    #!/bin/bash
    SERVER="localhost:8080"
    
    APIS=$(curl -s $SERVER/apis | jq -r '[.groups | .[].name] | join(" ")')
    
    # do core resources first, which are at a separate api location
    api="core"
    curl -s $SERVER/api/v1 | jq -r --arg api "$api" '.resources | .[] | "\($api) \(.name): \(.verbs | join(" "))"'
    
    # now do non-core resources
    for api in $APIS; do
        version=$(curl -s $SERVER/apis/$api | jq -r '.preferredVersion.version')
        curl -s $SERVER/apis/$api/$version | jq -r --arg api "$api" '.resources | .[]? | "\($api) \(.name): \(.verbs | join(" "))"'
    done
    

    WARNING: Note that where no verbs are listed via the api, the output will just show the api version and the resource, e.g.

    core pods/exec:
    

    In the specific instance of the following resources, no verbs are shown via the api, which is wrong (Kubernetes bug #65421, fixed by #65518):

    nodes/proxy
    pods/attach
    pods/exec
    pods/portforward
    pods/proxy
    services/proxy
    

    The supported verbs for these resources are as follows:

    nodes/proxy: create delete get patch update
    pods/attach: create get
    pods/exec: create get
    pods/portforward: create get
    pods/proxy: create delete get patch update
    services/proxy: create delete get patch update
    

    WARNING 2: Sometime Kubernetes checks for additional permissions using specialised verbs that are not listed here. For example, the bind verb is needed for roles and clusterroles resources in the rbac.authorization.k8s.io API group. Details of these specialised verbs are to be found in the docs here.

提交回复
热议问题