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.