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 Platform para conceder os escopos de acesso compute-rw e storage-ro a esses clusters:

  • compute-rw concede acesso total a todos os métodos da API do 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 GCP 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 as 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), será necessário 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, como a implantação de aplicativos, em seu nome. 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: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 seguintes comandos. O $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

Consulte Papéis mínimos para mais informações.

Conceder outros papéis

Para conceder o papel [Administrador do Compute Engine][gce_a] à conta de serviço, execute o comando a seguir:

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

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

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

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

gcloud container node-pools create example-pool --scopes compute-rw,gke-default
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine