Kubernetes Role-Based Access Control(RBAC)

Apoie o HackTricks e obtenha benefícios!

Controle de Acesso Baseado em Função (RBAC)

O Kubernetes possui um módulo de autorização chamado Controle de Acesso Baseado em Função (RBAC) que ajuda a definir permissões de utilização para o servidor de API.

O modelo de permissão do RBAC é composto por três partes individuais:

  1. Função/ClusterRole ­– A permissão real. Ele contém regras que representam um conjunto de permissões. Cada regra contém recursos e verbos. O verbo é a ação que será aplicada no recurso.

  2. Assunto (Usuário, Grupo ou ServiceAccount) – O objeto que receberá as permissões.

  3. RoleBinding/ClusterRoleBinding – A conexão entre Função/ClusterRole e o assunto.

A diferença entre "Funções" e "ClusterRoles" é apenas onde a função será aplicada - uma "Função" concederá acesso a apenas um namespace específico, enquanto um "ClusterRole" pode ser usado em todos os namespaces no cluster. Além disso, ClusterRoles também podem conceder acesso a:

  • recursos de escopo de cluster (como nós).

  • endpoints de não recurso (como /healthz).

  • recursos com namespace (como Pods), em todos os namespaces.

A partir do Kubernetes 1.6, as políticas RBAC são ativadas por padrão. Mas para habilitar o RBAC, você pode usar algo como:

kube-apiserver --authorization-mode=Example,RBAC --other-options --more-options

Modelos

No modelo de uma Função ou um ClusterRole, você precisará indicar o nome da função, o namespace (em funções) e, em seguida, os apiGroups, recursos e verbos da função:

  • O apiGroups é uma matriz que contém os diferentes namespaces da API a que essa regra se aplica. Por exemplo, uma definição de Pod usa apiVersion: v1. Ele pode ter valores como rbac.authorization.k8s.io ou [*].

  • O recursos é uma matriz que define a quais recursos essa regra se aplica. Você pode encontrar todos os recursos com: kubectl api-resources --namespaced=true

  • O verbos é uma matriz que contém os verbos permitidos. O verbo no Kubernetes define o tipo de ação que você precisa aplicar ao recurso. Por exemplo, o verbo list é usado em coleções enquanto "get" é usado em um único recurso.

Verbos de Regras

(Esta informação foi retirada daqui)

Verbo HTTPverbo de solicitação

POST

create

GET, HEAD

get (para recursos individuais), list (para coleções, incluindo o conteúdo completo do objeto), watch (para assistir a um recurso individual ou coleção de recursos)

PUT

update

PATCH

patch

DELETE

delete (para recursos individuais), deletecollection (para coleções)

O Kubernetes às vezes verifica a autorização para permissões adicionais usando verbos especializados. Por exemplo:

  • Política de Segurança de Pod

    • verbo use em recursos podsecuritypolicies no grupo de API policy.

  • RBAC

    • verbos bind e escalate em recursos roles e clusterroles no grupo de API rbac.authorization.k8s.io.

  • Autenticação

    • verbo impersonate em usuários, grupos e contas de serviço no grupo API principal e o userextras no grupo de API authentication.k8s.io.

Você pode encontrar todos os verbos que cada recurso suporta executando kubectl api-resources --sort-by name -o wide

Exemplos

Função
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: defaultGreen
  name: pod-and-pod-logs-reader
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log"]
  verbs: ["get", "list", "watch"]
ClusterRole

```yaml

Última actualización