Gerenciar usuários do Distributed Cloud

Nesta página, explicamos como gerenciar usuários em uma Distributed Cloud.

Quando você cria um cluster do Distributed Cloud, apenas a conta de usuário usada para criar o cluster recebe acesso a ele. Para conceder acesso ao cluster a mais usuários, faça o seguinte:

Conceder as permissões necessárias usando o RBAC do Kubernetes

Nesta seção, descrevemos como conceder à conta de um usuário as permissões necessárias para as necessidades comerciais dele usando o controle de acesso baseado em papéis (RBAC) do Kubernetes. Essas permissões são encapsuladas por vários papéis. Depois de conceder a função apropriada a uma conta de usuário, adicione essa conta ao cluster de destino do Distributed Cloud.

O Distributed Cloud não é compatível com grupos do Identity and Access Management nem com provedores de identidade de terceiros para uso com o RBAC do Kubernetes em clusters do Distributed Cloud.

Você precisa usar os seguintes recursos do Kubernetes para conceder papéis aos usuários:

  • ClusterRole: permite aplicar um conjunto de permissões a qualquer namespace no cluster e também concede acesso a recursos em todo o cluster.
  • ClusterRoleBinding: vincula um recurso ClusterRole a uma conta de usuário.
  • Role: permite aplicar um conjunto de permissões a um namespace específico.
  • RoleBinding: vincula um recurso Role ou ClusterRole a uma conta de usuário em um namespace específico.

Conceder permissões para um administrador de cluster

Quando você cria um cluster do Distributed Cloud, a conta de usuário usada para isso se torna automaticamente o administrador do cluster. Para conceder permissões de administrador do cluster a outros usuários, vincule a conta de usuário de destino à função cluster-admin criando um recurso ClusterRoleBinding e aplique-o ao cluster:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: BINDING_NAME
subjects:
  kind: User
  name: ACCOUNT_NAME
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io    

Substitua:

  • BINDING_NAME: um nome que identifica exclusivamente essa vinculação de função.
  • ACCOUNT_NAME: o nome da conta de usuário de destino.

Também é possível usar o seguinte comando kubectl:

kubectl create clusterrolebinding "BINDING_NAME" \
  --clusterrole cluster-admin --user "ACCOUNT_NAME"

Substitua:

  • BINDING_NAME: um nome que identifica exclusivamente essa vinculação de função.
  • ACCOUNT_NAME: o nome da conta de usuário de destino.

Conceder permissões para um desenvolvedor de aplicativos

Para conceder a um desenvolvedor de aplicativos as permissões necessárias para implantar cargas de trabalho no cluster de destino, faça o seguinte:

  1. Crie um recurso Role que conceda as permissões para criar e gerenciar pods, serviços e implantações no namespace de destino e aplique-o ao cluster:

    apiVersion: rbac.authorization.k8s.io/v1
     kind: Role
     metadata:
       namespace: NAMESPACE
       name: ROLE_NAME
     rules:
       apiGroups: ["apps", ""]
       resources: ["pods", "deployments", "services"]
       verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
    

    Substitua:

    • NAMESPACE: o nome do namespace de destino.
    • ROLE_NAME: um nome que identifica exclusivamente essa função.
  2. Crie um recurso RoleBinding que vincule as contas de usuário de destino à função criada na etapa anterior e aplique ao cluster:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
     namespace: NAMESPACE
     name: BINDING_NAME
    subjects:
     kind: User
     name: ACCOUNT_NAME
     kind: User
     name: ACCOUNT_NAME
    roleRef:
     kind: Role
     name: ROLE_NAME
     apiGroup: rbac.authorization.k8s.io  
    

    Substitua:

    • BINDING_NAME: um nome que identifica exclusivamente essa vinculação de função.
    • NAMESPACE: o nome do namespace de destino.
    • ACCOUNT_NAME: o nome da conta de usuário de destino.
    • ROLE_NAME: o nome da função de destino.

Conceder permissões para um agente de serviço do Cloud Build

Para conceder a um agente de serviço do Cloud Build as permissões necessárias para implantar cargas de trabalho no cluster de destino, faça o seguinte:

  1. Crie um recurso Role que conceda as permissões para criar e gerenciar pods, serviços e implantações no namespace de destino e aplique-o ao cluster:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
     namespace: NAMESPACE
     name: ROLE_NAME
    rules:
     apiGroups: ["apps", ""]
     resources: ["pods", "deployments", "services"]
     verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
    

    Substitua:

    • NAMESPACE: o nome do namespace de destino.
    • ROLE_NAME: um nome que identifica exclusivamente essa função.
  2. Crie um recurso RoleBinding que vincule a conta de agente de serviço do Cloud Build de destino à função criada na etapa anterior e aplique ao cluster:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
     namespace: NAMESPACE
     name: BINDING_NAME
    subjects:
     kind: User
     name: PROJECT_ID@cloudbuild.gserviceaccount.com
    roleRef:
     kind: Role
     name: ROLE_NAME
     apiGroup: rbac.authorization.k8s.io  
    

    Substitua:

    • BINDING_NAME: um nome que identifica exclusivamente essa vinculação de função.
    • NAMESPACE: o nome do namespace de destino.
    • PROJECT_ID: o ID do projeto Google Cloud de destino.
    • ROLE_NAME: o nome da função de destino.

Se você precisar conceder permissões a um agente de serviço do Cloud Build para implantar e gerenciar cargas de trabalho em todos os namespaces do cluster de destino, crie um recurso ClusterRole e um ClusterRoleBinding em vez dos recursos Role e RoleBinding.

Conceder permissões para visualizar informações do cluster

Para conceder as permissões necessárias para ver informações detalhadas sobre o cluster no console do Google Cloud , faça o seguinte:

  1. Crie um recurso ClusterRole que permita ao agente do Connect simular o usuário que precisa ver as informações do cluster no console Google Cloud :

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
     name: ROLE_NAME
    rules:
     apiGroups: [""]
     resources: ["users"]
     verbs: ["impersonate"]
     resourceNames: ["ACCOUNT_NAME"]
    

    Substitua:

    • ROLE_NAME: o nome da função de destino.
    • ACCOUNT_NAME: o nome da conta de usuário de destino.
  2. Crie um recurso ClusterRoleBinding que vincule a conta do agente de serviço do agente do Connect ao papel criado na etapa anterior e aplique ao cluster:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
     name: BINDING_NAME
    subjects:
     kind: ServiceAccount
     name: ACCOUNT_NAME
    roleRef:
     kind: ClusterRole
     name: ROLE_NAME
     apiGroup: rbac.authorization.k8s.io
    

    Substitua:

    • BINDING_NAME: um nome que identifica exclusivamente essa vinculação de função.
    • ACCOUNT_NAME: o nome da conta de usuário de serviço de destino.
    • ROLE_NAME: o nome da função de destino.

É necessário criar um par de recursos ClusterRole e ClusterRoleBinding separado para cada usuário afetado.

Também é possível usar a ferramenta de linha de comando kubectl para conceder as permissões necessárias para visualizar informações do cluster da seguinte maneira:

  1. Crie um recurso ClusterRole que permita ao agente do Connect simular o usuário que precisa ver as informações do cluster no console Google Cloud :

    kubectl create clusterrole "ROLE_NAME" --verb impersonate \
     --resource users --resource-name "ACCOUNT_NAME"
    

    Substitua:

    • ROLE_NAME: o nome da função de destino.
    • ACCOUNT_NAME: o nome da conta de usuário de serviço de destino.
  2. Crie um recurso ClusterRoleBinding que vincule a conta do agente de serviço do agente do Connect ao papel criado na etapa anterior e aplique ao cluster:

    kubectl create clusterrolebinding "BINDING_NAME" --clusterrole \
     "ROLE_NAME" --serviceaccount "ACCOUNT_NAME"
    

    Substitua:

    • BINDING_NAME: um nome que identifica exclusivamente essa vinculação de função.
    • ACCOUNT_NAME: o nome da conta de usuário de serviço de destino.
    • ROLE_NAME: o nome da função de destino.

Usar o gateway do Connect para acessar clusters do Distributed Cloud

Você pode usar o gateway de conexão para acessar seus clusters do Distributed Cloud. Um usuário do gateway de conexão precisa de uma ou mais das seguintes funções, dependendo dos requisitos de negócios:

  • Administrador do Connect Gateway (roles/gkehub.gatewayAdmin): concede acesso à API Connect Gateway. Isso permite o uso da ferramenta de linha de comando kubectl para gerenciar o cluster.
  • Editor do Gateway (roles/gkehub.gatewayEditor): concede acesso de leitura e gravação ao cluster.
  • Leitor do Connect Gateway (roles/gkehub.gatewayReader): concede acesso somente leitura ao cluster.
  • Leitor do GKE Hub (roles/gkehub.viewer): permite recuperar arquivos kubeconfig do cluster.

Para mais informações sobre como usar o gateway do Connect, consulte: