Esta página explica como configurar a autenticação através de um token de autorização para iniciar sessão em clusters registados fora do Google Cloud. Após a configuração, os administradores do cluster podem iniciar sessão nos clusters a partir da consolaGoogle Cloud . São suportados muitos tipos de tokens de portador, conforme especificado na autenticação do Kubernetes. O método mais fácil é criar uma conta de serviço do Kubernetes (KSA) no cluster e usar o respetivo token de portador para iniciar sessão.
Outros métodos de autenticação
Em alternativa à configuração da autenticação através de um token de portador, pode configurar um dos seguintes métodos de autenticação, consoante as necessidades da sua organização:
Identidade Google, que permite aos utilizadores iniciar sessão com a respetiva Google Cloud identidade. Use esta opção se os seus utilizadores já tiverem acesso ao Google Cloud com uma identidade Google.
Se o cluster estiver configurado para usar um fornecedor de identidade OIDC, pode usar esta opção para se autenticar no cluster a partir da Google Cloud consola. Pode saber como configurar o OIDC para clusters do GKE nos seguintes guias:
- Configure clusters para o GKE Identity Service com OIDC. Este guia mostra como configurar a autenticação OIDC num cluster por cluster para todos os tipos de clusters do GKE.
- Configure o serviço de identidade do GKE para uma frota. Esta opção permite-lhe configurar o OIDC ao nível da frota para tipos de clusters suportados. A configuração ao nível da frota é suportada para clusters do GKE no Google Cloud, todos os tipos de clusters do GKE e clusters anexados do EKS na AWS.
Se estes métodos de autenticação fornecidos pela Google não forem adequados para a sua organização, siga as instruções nesta página para configurar a autenticação através de um token de portador.
Conceda funções de IAM para acesso através da Google Cloud consola
Os utilizadores que pretendam ver clusters ligados através da Google Cloud consola precisam, no mínimo, das seguintes funções de IAM:
roles/container.viewer
. Esta função permite que os utilizadores vejam recursos do contentor na consola Google Cloud , incluindo a página Clusters do GKE. Para ver detalhes sobre as autorizações incluídas nesta função, consulte o artigo Funções do Kubernetes Engine na documentação do IAM.roles/gkehub.viewer
. Esta função permite que os utilizadores vejam os clusters fora do Google Cloud na Google Cloud consola. Os utilizadores não precisam desta função se a sua frota não incluir clusters externos Google Cloud. Para ver detalhes sobre as autorizações incluídas nesta função, consulte o artigo Funções do GKE Hub na documentação do IAM.
Execute os seguintes comandos para conceder estas funções:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/container.viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/gkehub.viewer
Substitua o seguinte:
PROJECT_ID
: o ID do projeto do projeto de anfitrião da frota.EMAIL_ADDRESS
: o endereço de email associado à conta do utilizador Google Cloud .
Para mais informações sobre como conceder funções da IAM, consulte o artigo Gerir o acesso a projetos, pastas e organizações na documentação da IAM.
Configure o controlo de acesso baseado em funções
O acesso aos clusters é controlado através do controlo de acesso baseado em funções (CABF) do Kubernetes.
Recomendamos que crie um KSA para cada utilizador que inicie sessão no cluster. A utilização de um token de portador é semelhante à utilização de uma palavra-passe, pelo que cada utilizador deve ter a sua própria conta. A sessão iniciada com o token de portador do KSA faz com que todas as operações sejam executadas como o KSA, restritas pelas funções RBAC detidas pelo KSA.
O KSA tem de ter, pelo menos, as seguintes funções de CABF no cluster para aceder ao mesmo através da consola:
Crie e aplique a cloud-console-reader
função RBAC
Os utilizadores autenticados que queiram aceder aos recursos de um cluster na Google Cloud consola
têm de ter as autorizações do Kubernetes relevantes para o fazer. Se não quiser conceder a esses utilizadores autorizações mais extensas, como as de um administrador do cluster, pode criar uma função RBAC personalizada que inclua as autorizações mínimas para ver os nós, os volumes persistentes, os pods e as classes de armazenamento do cluster. Pode definir este conjunto de
autorizações criando um recurso ClusterRole
RBAC,
cloud-console-reader
, no cluster.
cloud-console-reader
concede aos respetivos utilizadores as autorizações get
, list
e watch
nos nós, volumes persistentes, pods e classes de armazenamento do cluster,
que lhes permitem ver detalhes sobre estes recursos.
kubectl
Para criar o cloud-console-reader
ClusterRole
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
Em seguida, pode conceder esta função aos KSAs, conforme descrito na secção seguinte.
Crie e autorize uma KSA
kubectl
Para criar um KSA e associar-lhe autorizações, siga estes passos:
Crie os recursos KSA e
ClusterRoleBinding
para associar oview
e ocloud-console-reader
RBAC do KubernetesClusterRoles
ao KSA:KSA_NAME=KSA_NAME kubectl create serviceaccount ${KSA_NAME} kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${KSA_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${KSA_NAME}
Substitua o seguinte:
KSA_NAME
: o nome que escolher para o KSAVIEW_BINDING_NAME
: o nome que escolhe para o recursoview
ClusterRoleBinding
; pode dar-lhe qualquer nome, mas pode ser mais fácil dar-lhe o nome da KSACLOUD_CONSOLE_READER_BINDING_NAME
: o nome que escolher para o recursocloud-console-reader
ClusterRoleBinding
; também pode atribuir-lhe qualquer nome
Consoante o acesso que a conta de serviço deve ter, associe funções adicionais ao KSA. Para ver opções, consulte as funções predefinidas do Kubernetes.
Por exemplo, se quiser implementar uma aplicação Kubernetes a partir do Cloud Marketplace, associe a função
cluster-admin
ao KSA:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:KSA_NAME
Substitua
BINDING_NAME
pelo nome da associação de funções do cluster para a conta de serviço.
Autorize outras contas
kubectl
Para todos os outros utilizadores ou contas de serviço que obtenham acesso ao cluster,
crie recursos ClusterRoleBinding
para associar as funções view
e
cloud-console-reader
à respetiva conta:
Associe o
view
e ocloud-console-reader
ClusterRoles
:ACCOUNT_NAME=ACCOUNT_NAME kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${ACCOUNT_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${ACCOUNT_NAME}
Substitua o seguinte:
ACCOUNT_NAME
: a conta de serviço do KubernetesVIEW_BINDING_NAME
: o nome que escolher para o recursoview
ClusterRoleBinding
; pode atribuir-lhe qualquer nome, mas pode ser mais fácil atribuir-lhe o nome do utilizador ou da conta de serviçoCLOUD_CONSOLE_READER_BINDING_NAME
: o nome que escolhe para o recursoview
ClusterRoleBinding
; também pode dar-lhe qualquer nome que quiser
Associe funções adicionais, consoante o acesso que a conta deve ter. Para ver opções, consulte as funções predefinidas do Kubernetes.
Por exemplo, para associar a função
cluster-admin
, execute o seguinte comando:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:ACCOUNT_NAME
Substitua
BINDING_NAME
pelo nome da associação de funções do cluster para a conta de serviço.
Obtenha o token do portador da KSA
kubectl
Para adquirir o token de portador da KSA, execute o seguinte comando:
SECRET_NAME=KSA_NAME-token kubectl apply -f - << __EOF__ apiVersion: v1 kind: Secret metadata: name: "${SECRET_NAME}" annotations: kubernetes.io/service-account.name: "${KSA_NAME}" type: kubernetes.io/service-account-token __EOF__ until [[ $(kubectl get -o=jsonpath="{.data.token}" "secret/${SECRET_NAME}") ]]; do echo "waiting for token..." >&2; sleep 1; done kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 --decode
Substitua KSA_NAME
pelo nome que escolher para o KSA.
A partir do resultado deste comando, copie o token e guarde-o para que os utilizadores possam usar o token para iniciar sessão na Google Cloud consola.