Nesta página, você vê as alterações nos escopos de acesso dos clusters que executam a versão 1.10 ou superior do Kubernetes. Essas alterações afetam apenas as interações dos clusters com o Cloud Storage e o Compute Engine.
O que são escopos de acesso?
Os escopos de acesso são o método legado para especificar permissões em nós e em cargas de trabalho executadas em nós se elas estiverem usando o Application Default Credentials (ADC). Nos clusters que executam versões anteriores à 1.10 do Kubernetes, a conta de serviço padrão recebe um conjunto de escopos de acesso padrão. Esses clusters receberam os seguintes escopos de acesso pelo gcloud
e pelo Console do Google Cloud:
compute-rw
concede acesso total de leitura a todos os métodos de API Compute Engine.storage-ro
concede acesso somente leitura a todos os recursos do Cloud Storage, incluindo imagens particulares armazenadas no Container Registry.
Alterações nos escopos de acesso
A partir da versão 1.10 do Kubernetes, a gcloud
e o Console do Cloud não concedem mais o escopo de acesso compute-rw
em novos clusters e novos pools de nós por padrão. Além disso, se --scopes
for especificado em gcloud container create
, a gcloud
não adicionará silenciosamente compute-rw
nem storage-ro
.
Essas alterações garantem que sua conta de serviço padrão tenha apenas as permissões necessárias para a execução do cluster, o que melhora a segurança do projeto.
Minhas cargas de trabalho serão afetadas?
Se as cargas de trabalho não precisarem chamar as APIs a que o acesso é concedido por esses escopos, nenhuma ação será necessária.
No entanto, se as cargas de trabalho exigirem permissão para interagir com o Compute Engine ou Cloud Storage, elas poderão ser afetadas. Recomendamos criar uma conta de serviço personalizada com os papéis equivalentes do gerenciamento de identidade e acesso (IAM).
Se você modificar os escopos e suas cargas de trabalho precisarem de permissão para interagir com o Cloud Storage (incluindo a captura de imagens de contêiner particulares do Container Registry), precisará incluir também o escopo storage-ro.
Como alternativa, para replicar o comportamento de clusters anteriores à versão 1.10, consulte Como reverter a escopos de acesso legados.
Impacto
O Compute Engine e o Cloud Storage retornam erros 403 para aplicativos em execução nos clusters do Kubernetes 1.10 que não tenham os escopos necessários.
Além disso, a resposta a uma solicitação com escopos insuficientes inclui um cabeçalho HTTP detalhando os escopos necessários. Por exemplo:
WWW-Authenticate: Bearer realm="https://accounts.google.com/", error=insufficient_scope, scope="https://www.googleapis.com/auth/compute.readonly"
Como configurar uma conta de serviço personalizada em cargas de trabalho
O IAM é o sistema de controle de acesso para a concessão de papéis autorizados aos usuários e contas de serviço no projeto do GCP. A conta de serviço é uma conta especial do Google que executa tarefas em seu nome, como a implantação de aplicativos. Use o IAM para criar uma conta de serviço e, em seguida, use as vinculações de política do IAM para proteger a conta.
Se as cargas de trabalho exigirem acesso ao Compute Engine, conceda à conta de serviço o papel Administrador do Compute Engine. Se as cargas de trabalho precisarem extrair imagens particulares do Container Registry, conceda o papel Visualizador de objetos do Storage.
Crie uma conta de serviço
Para criar uma conta de serviço personalizada chamada kubernetes-engine-node-sa
, execute os seguintes comandos:
export NODE_SA_NAME=kubernetes-engine-node-sa
gcloud iam service-accounts create $NODE_SA_NAME \
--display-name "GKE Node Service Account"
export NODE_SA_EMAIL=`gcloud iam service-accounts list --format='value(email)' \
--filter='displayName:GKE Node Service Account'`
Conceder papéis mínimos
Para configurar a conta de serviço com os papéis e as permissões mínimos necessários para o funcionamento do nó do GKE, execute os seguintes comandos, em que $PROJECT
é o ID do projeto:
export PROJECT=`gcloud config get-value project`
gcloud projects add-iam-policy-binding $PROJECT \
--member serviceAccount:$NODE_SA_EMAIL \
--role roles/monitoring.metricWriter
gcloud projects add-iam-policy-binding $PROJECT \
--member serviceAccount:$NODE_SA_EMAIL \
--role roles/monitoring.viewer
gcloud projects add-iam-policy-binding $PROJECT \
--member serviceAccount:$NODE_SA_EMAIL \
--role roles/logging.logWriter
Conceder outros papéis
Para conceder o papel Administrador do Compute Engine à conta de serviço, execute o seguinte comando:
gcloud projects add-iam-policy-binding $PROJECT \
--member serviceAccount:$NODE_SA_EMAIL \
--role roles/compute.admin
Para conceder o papel Leitor de objetos do Storage, execute o seguinte comando:
gcloud projects add-iam-policy-binding $PROJECT \
--member serviceAccount:$NODE_SA_EMAIL \
--role roles/storage.objectViewer
Para saber como conceder às contas de serviço acesso a imagens particulares armazenadas no Container Registry, consulte Como conceder permissões do IAM.
Como criar um cluster ou pool de nós com a conta de serviço personalizada
Para criar um cluster que usa a conta de serviço personalizada, execute o seguinte comando:
gcloud container clusters create --service-account=$NODE_SA_EMAIL
Para criar um pool de nós em um cluster atual:
gcloud container node-pools create --service-account=$NODE_SA_EMAIL
Como reverter a escopos de acesso legados
Se você quer continuar usando os escopos de acesso legados em clusters que executam o Kubernetes versão 1.10 e superior, adicione os escopos manualmente.
Console
Para criar um cluster usando o Console do Cloud:
Acesse o menu do Google Kubernetes Engine no Console do Cloud.
Clique no botão Criar cluster.
Em Versão principal, selecione uma versão do Kubernetes.
Configure o cluster como quiser. Não clique em Criar ainda.
No painel de navegação, em default-pool, clique em Segurança.
Na seção Escopos de acesso, selecione Definir acesso para cada API.
Em Compute Engine, selecione Leitura e gravação. O Armazenamento precisa ser Somente leitura por padrão.
Clique em Criar
gcloud
Para criar um cluster, execute o seguinte comando:
gcloud container clusters create example-cluster --scopes compute-rw,gke-default
Para criar um pool de nós em um cluster atual:
gcloud container node-pools create example-pool --scopes compute-rw,gke-default