Como executar a migração de escopos de acesso legados

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:

  1. Acesse o menu do Google Kubernetes Engine no Console do Cloud.

    Acessar o menu do Google Kubernetes Engine

  2. Clique no botão Criar cluster.

  3. Em Versão principal, selecione uma versão do Kubernetes.

  4. Configure o cluster como quiser. Não clique em Criar ainda.

  5. No painel de navegação, em default-pool, clique em Segurança.

  6. Na seção Escopos de acesso, selecione Definir acesso para cada API.

  7. Em Compute Engine, selecione Leitura e gravação. O Armazenamento precisa ser Somente leitura por padrão.

  8. 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