Configurar o controle de acesso baseado em papéis (RBAC, na sigla em inglês)

A autenticação costuma ser combinada com o controle de acesso baseado em papéis (RBAC, na sigla em inglês) do Kubernetes para fornecer um controle de acesso mais refinado aos clusters para usuários autenticados e contas de serviço. É recomendável criar políticas de controle de acesso baseado em função (RBAC) que usem nomes de grupos em vez de identificadores de usuários. Ao vincular suas políticas de RBAC explicitamente a grupos, você pode gerenciar totalmente os privilégios de acesso do usuário com seu provedor de identidade, para que o cluster não precise ser atualizado sempre que os privilégios do usuário forem alterados. Observe que, para configurar o controle de acesso com base na associação a grupos de segurança com OIDC, verifique se o GKE Identity Service está configurado para aceitar informações de associação a grupos do provedor de identidade.

Exemplo

Se você quiser que determinados usuários autenticados tenham acesso aos pods do cluster, crie um ClusterRole que conceda acesso a esses recursos, como no exemplo a seguir:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  # The resource type for which access is granted
  resources: ["pods"]
  # The permissions granted by the ClusterRole
  verbs: ["get", "watch", "list"]

Em seguida, crie um ClusterRoleBinding correspondente para conceder as permissões no ClusterRole aos usuários relevantes. Nesse caso, os membros do grupo de segurança us-east1-cluster-admins e o usuário com o ID u98523-4509823:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-pods-admins
subjects:
  # Grants anyone in the "us-east1-cluster-admins" group
  # read access to Pods in any namespace within this cluster.
- kind: Group
  name: gid-us-east1-cluster-admins # Name is case-sensitive
  apiGroup: rbac.authorization.k8s.io
  # Grants this specific user read access to Pods in any
  # namespace within this cluster
- kind: User
  name: uid-u98523-4509823
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

No exemplo abaixo, essa ClusterRoleBinding concede permissões em ClusterRole ao grupo relevante com o ID 12345678-BBBb-cCCCC-0000-123456789012. Essa configuração é relevante apenas para provedores do Azure AD e está disponível para clusters do Google Distributed Cloud.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: pod-reader-binding
subjects:
  # Retrieves group information for the group ID mentioned
- kind: Group
  name: 12345678-BBBb-cCCCC-0000-123456789012
  apiGroup: rbac.authorization.k8s.io

Para mais informações sobre o uso do RBAC, consulte Configurar o controle de acesso baseado em função e Como usar a autorização do RBAC.

Criar um papel do RBAC para acesso ao console do Google Cloud

Os usuários autenticados com provedores OIDC podem fazer login em clusters no console do Google Cloud e na linha de comando.

Os usuários autenticados que querem acessar os recursos de um cluster no Console do Google Cloud precisam ter as permissões relevantes do Kubernetes para fazer isso. Se você não quiser conceder a esses usuários permissões mais abrangentes, como as de um administrador de cluster, crie um papel personalizado de RBAC que inclua as permissões mínimas para visualizar os nós, volumes permanentes, pods e classes de armazenamento do cluster. Para definir esse conjunto de permissões, crie um recurso de RBAC ClusterRole, cloud-console-reader, no cluster.

cloud-console-reader concede aos usuários as permissões get, list e watch nos nós, volumes permanentes, pods e classes de armazenamento do cluster, o que permite que eles vejam detalhes sobre esses recursos.

kubectl

Para criar o ClusterRole do cloud-console-reader e aplicá-lo ao cluster, execute o seguinte comando:

cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cloud-console-reader
rules:
- apiGroups: [""]
  resources: ["nodes", "persistentvolumes", "pods"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
  resources: ["storageclasses"]
  verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml

É possível conceder esse ClusterRole aos usuários ao configurar suas políticas de permissão, conforme descrito na seção anterior. Os usuários também precisam de permissões do IAM para visualizar clusters no console do Google Cloud.