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. Use a gcloud e o Console do Google Cloud para conceder os escopos de acesso compute-rw e storage-ro a esses clusters:

  • 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 Cloud Identity and Access Management.

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 Cloud Identity and Access Management é 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 Cloud IAM para criar uma conta de serviço e, em seguida, use as vinculações de políticas do Cloud 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.

Criar uma conta de serviço

Para criar uma conta de serviço personalizada denominada kubernetes-engine-node-sa, execute os comandos a seguir:

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 papéis e permissões mínimos necessários para o GKE, execute os comandos a seguir. $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</pre>

Para conceder o papel Visualizador de objetos do Storage:

gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/storage.objectViewer

Para saber como conceder a contas de serviço acesso a imagens particulares armazenadas no Container Registry, consulte Como conceder acesso a um registro aos usuários e a outros projetos.

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 existente:

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, siga estas etapas:

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

    Acessar o menu do Google Kubernetes Engine

  2. Clique em Criar cluster.

  3. Em Versão principal, selecione a versão mais recente do Kubernetes 1.10.

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

  5. Clique em Edição avançada no pool de nós padrão.

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

  7. Selecione Leitura/Gravação no Compute Engine. O armazenamento precisa ser Somente leitura por padrão.

  8. Clique em Salvar para sair da sobreposição Edição avançada.

  9. Clique em Criar.

gcloud

Para criar um cluster, execute o comando a seguir.

gcloud container clusters create example-cluster --scopes compute-rw,gke-default

Para criar um pool de nós em um cluster existente:

gcloud container node-pools create example-pool --scopes compute-rw,gke-default