Criar políticas do IAM

Nesta página, você aprende a criar políticas do Gerenciamento de identidade e acesso (IAM, na sigla em inglês) para autorização no Google Kubernetes Engine (GKE).

Visão geral

Todas as chamadas de API do Google Cloud, GKE e Kubernetes exigem que a conta que está fazendo a solicitação tenha as permissões necessárias. Por padrão, ninguém exceto você tem permissão para acessar o projeto ou os recursos dele. É possível usar o IAM para gerenciar quem pode acessar seu projeto e o que eles podem fazer. As permissões do IAM funcionam com o Kubernetes RBAC, que fornece controles de acesso granular para objetos específicos em um cluster ou namespace. O IAM tem maior foco nas permissões nos níveis do projeto e da organização, embora forneça vários papéis predefinidos específicos do GKE.

Para conceder a usuários e contas de serviço acesso ao projeto do Google Cloud, adicione-os como membros da equipe do projeto e atribua papéis a eles. Os papéis definem quais recursos do Google Cloud uma conta pode acessar e quais operações eles podem executar.

No GKE, use também o IAM para gerenciar os usuários e contas de serviço que podem acessar e executar operações nos clusters.

Antes de começar

Antes de começar, veja se você realizou as seguintes tarefas:

  • Verifique se você ativou a API do Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Verifique se o SDK do Cloud está instalado.
  • Defina as configurações padrão da ferramenta de linha de comando gcloud do seu projeto usando um dos seguintes métodos:
    • Use gcloud init se quiser orientações para definir os padrões do projeto.
    • Use gcloud config para definir individualmente a região, a zona e o ID do projeto.

    gcloud init

    1. Execute gcloud init e siga as instruções:

      gcloud init

      Se você estiver usando SSH em um servidor remoto, utilize a sinalização --console-only para impedir que o comando inicie um navegador:

      gcloud init --console-only
    2. Siga as instruções para autorizar a ferramenta gcloud a usar sua conta do Google Cloud.
    3. Crie uma nova configuração ou selecione uma atual.
    4. Escolha um projeto do Google Cloud.
    5. Escolha uma zona padrão do Compute Engine.
    6. Escolha uma região padrão do Compute Engine.

    gcloud config

    1. Defina o ID do projeto padrão:
      gcloud config set project PROJECT_ID
    2. Defina a região padrão do Compute Engine (por exemplo, us-central1):
      gcloud config set compute/region COMPUTE_REGION
    3. Defina a zona padrão do Compute Engine (por exemplo, us-central1-c):
      gcloud config set compute/zone COMPUTE_ZONE
    4. Atualize gcloud para a versão mais recente:
      gcloud components update

    Ao definir locais padrão, é possível evitar erros na ferramenta gcloud como o seguinte: One of [--zone, --region] must be supplied: Please specify location.

Interação com o Kubernetes RBAC

O sistema nativo de controle de acesso baseado em papéis (RBAC, na sigla em inglês) do Kubernetes também gerencia o acesso aos recursos no cluster. O RBAC controla o acesso no cluster e no namespace, enquanto o IAM funciona no projeto.

O IAM e o RBAC podem trabalhar juntos. Uma entidade precisa ter permissões suficientes do RBAC e do IAM para trabalhar com recursos no cluster.

Papéis do IAM

As seções a seguir descrevem os papéis do IAM disponíveis no Google Cloud.

Papéis predefinidos do GKE

O IAM fornece papéis predefinidos que concedem acesso a recursos específicos do Google Cloud e impedem o acesso não autorizado a outros recursos.

O IAM oferece os seguintes papéis predefinidos para o GKE:

Papel Nome Descrição Menor recurso
roles/container.admin Administrador do Kubernetes Engine

Concede acesso ao gerenciamento total de clusters e dos respectivos objetos da API Kubernetes.

Para definir uma conta de serviço em nós, você também precisa ter o papel de usuário da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço gerenciada pelo usuário que seus nós usarão.

  • Projeto
roles/container.clusterAdmin Administrador de cluster do Kubernetes Engine

Concede acesso ao gerenciamento de clusters.

Para definir uma conta de serviço em nós, você também precisa ter o papel de usuário da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço gerenciada pelo usuário que seus nós usarão.

  • Projeto
roles/container.clusterViewer Leitor de cluster do Kubernetes Engine

Concede acesso para receber e listar clusters do GKE.

roles/container.developer Desenvolvedor do Kubernetes Engine

Concede acesso a objetos da API Kubernetes dentro de clusters.

  • Projeto
roles/container.hostServiceAgentUser User agent de serviço de host do Kubernetes Engine

Permite que a conta de serviço do Kubernetes Engine no projeto host configure recursos de rede compartilhados para o gerenciamento de clusters. Também concede acesso para inspecionar as regras de firewall no projeto do host.

roles/container.viewer Leitor do Kubernetes Engine

Concede acesso somente leitura a recursos em clusters do GKE, como nós, pods e objetos da API GKE.

  • Projeto

Para uma lista completa de permissões individuais em cada papel, consulte Papéis do Google Kubernetes Engine. Também é possível visualizar as permissões em cada papel do IAM usando a ferramenta gcloud ou o Console do Cloud. Para instruções, consulte Visualizar permissões concedidas por papéis do IAM.

Papéis básicos do IAM

Os papéis básicos do IAM concedem aos usuários acesso global no projeto a todos os recursos do Google Cloud. Para proteger o projeto e os clusters, use papéis predefinidos sempre que possível.

Para saber mais sobre eles, consulte Papéis básicos na documentação do IAM.

Papel Usuário da conta de serviço

O papel usuário da conta de serviço concede a uma conta de usuário do Google Cloud permissão para realizar ações como uma conta de serviço.

  • A concessão do papel iam.serviceAccountUser a um usuário de um projeto fornece a ele todos os papéis atribuídos a todas as contas de serviço no projeto, incluindo as que forem criadas no futuro.

  • Conceder o papel iam.serviceAccountUser a um usuário de uma conta de serviço específica fornece a ele todos os papéis atribuídos a essa conta de serviço.

Esse papel inclui as seguintes permissões:

  • iam.serviceAccounts.actAs
  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list

Para mais informações sobre o papel ServiceAccountUser, consulte ServiceAccountUser na documentação do IAM.

O comando a seguir mostra a sintaxe para conceder o papel usuário da conta de serviço:

gcloud iam service-accounts add-iam-policy-binding \
  SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --member=user:USER \
  --role=roles/iam.serviceAccountUser

Substitua:

  • SA_NAME: o nome da conta de serviço.
  • PROJECT_ID: o ID do seu projeto do Google Cloud.
  • USER: o endereço de e-mail do usuário.

Papel usuário do agente de serviço de host

O papel usuário do agente de serviço de host é usado apenas em clusters de VPC compartilhada. Esse papel inclui as seguintes permissões:

  • compute.firewalls.get
  • container.hostServiceAgent.*
  • dns.networks.bindDNSResponsePolicy
  • dns.networks.bindPrivateDNSPolicy
  • dns.networks.bindPrivateDNSZone

Papéis personalizados

Se os papéis pré-definidos não atenderem às suas necessidades, crie papéis personalizados com permissões definidas por você.

Para saber como criar e atribuir papéis personalizados, consulte Como criar e gerenciar papéis personalizados.

Ver permissões concedidas por papéis do IAM

Para visualizar as permissões concedidas por cada papel, use a ferramenta gcloud ou o Console do Cloud.

gcloud

Para visualizar as permissões concedidas por um papel específico, execute o seguinte comando:

gcloud iam roles describe roles/ROLE

Substitua ROLE por qualquer papel do IAM. Os papéis do GKE têm o prefixo roles/container, como gcloud iam roles describe roles/container.admin.

Console

Para visualizar as permissões concedidas por um papel específico, faça o seguinte:

  1. Acesse a seção Papéis da página IAM e administrador no Console do Cloud.

    Acessar IAM e administrador

  2. Para ver os papéis do GKE, no campo Filtrar tabela, digite Kubernetes Engine.

  3. Selecione o papel que você quer ver. A descrição do papel e uma lista de permissões atribuídas são exibidas.

Como gerenciar papéis do IAM

Para saber como gerenciar papéis e permissões do IAM de usuários humanos, consulte Como conceder, alterar e revogar o acesso de membros do projeto na documentação do IAM.

Para contas de serviço, consulte Como conceder papéis a contas de serviço.

Exemplos

Veja alguns exemplos de como o IAM funciona com o GKE:

  • Um novo funcionário entrou em uma empresa. Ele precisa ser adicionado ao projeto do Google Cloud, mas só precisa visualizar os clusters do projeto e outros recursos do Google Cloud. O proprietário do projeto atribui a ele o papel de visualizador do Compute para envolvidos no projeto. Esse papel fornece acesso somente leitura para ver e listar nós, que são recursos do Compute Engine.
  • O funcionário está trabalhando em operações e é necessário atualizar um cluster usando gcloud ou o Console do Google Cloud. Essa operação requer a permissão container.clusters.update. Portanto, o proprietário do projeto atribui a ele o papel de administrador de cluster do Kubernetes Engine. O funcionário agora tem as permissões que são concedidas pelos papéis de visualizador do Compute e administrador de cluster do Kubernetes Engine.
  • O funcionário precisa investigar por que uma implantação está tendo problemas. É necessário executar kubectl get pods para ver os pods em execução no cluster. O funcionário já tem o papel visualizador do Compute, mas ele não é suficiente para listar pods. O funcionário precisa do papel visualizador do Kubernetes Engine.
  • O funcionário precisa criar um novo cluster. O proprietário do projeto concede ao funcionário o papel de usuário da conta de serviço da conta de serviço PROJECT_NUMBER-compute@developer.gserviceaccount.com, assim a conta do funcionário pode acessar a conta de serviço padrão do Compute Engine. Ela tem o papel de editor, que inclui um grande conjunto de permissões.

A seguir