Como criar políticas do Cloud IAM

Nesta página, você aprende a criar políticas do Cloud Identity and Access Management (Cloud IAM) para autorizar no Google Kubernetes Engine.

Visão geral

Todas as chamadas de API do Google Cloud Platform (GCP), 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ê pode acessar o projeto ou os recursos dele. Use o Cloud Identity and Access Management para gerenciar quem pode acessar o projeto e o que podem fazer. As permissões do Cloud IAM funcionam junto com o Kubernetes RBAC, que fornece controles de acesso granulares para objetos específicos em um cluster ou namespace. O Cloud IAM se concentra mais nas permissões no nível da organização e do projeto do GCP, mas fornece vários papéis pré-definidos específicos do GKE.

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

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

Antes de começar

Execute as etapas a seguir para se preparar para a tarefa:

  • Verifique se você ativou a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Verifique se o SDK do Cloud está instalado.
  • Defina o ID do projeto padrão:
    gcloud config set project [PROJECT_ID]
  • Se você estiver trabalhando com clusters zonais, defina a zona padrão do Compute:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Se você estiver trabalhando com clusters regionais, defina a região padrão do Compute:
    gcloud config set compute/region [COMPUTE_REGION]
  • Atualize gcloud para a versão mais recente:
    gcloud components update

Interação com o Kubernetes RBAC

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

O Cloud IAM e o RBAC podem funcionar em conjunto, e uma entidade precisa ter permissões suficientes em qualquer nível para trabalhar com recursos no cluster.

Papéis do Cloud IAM

Nas seções a seguir, você vê os papéis do Cloud IAM disponíveis no GCP.

Papéis pré-definidos do GKE

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

O Cloud IAM oferece os seguintes papéis pré-definidos para o GKE:

Papéis do Kubernetes Engine

Papel Nome Descrição Permissões Menor recurso
roles/
container.admin
Administrador do Kubernetes Engine Concede acesso ao gerenciamento total de clusters do Container e dos respectivos objetos da API Kubernetes. container.*
resourcemanager.projects.get
resourcemanager.projects.list
Projeto
roles/
container.clusterAdmin
Administrador de cluster do Kubernetes Engine Dá acesso ao gerenciamento de clusters do Container. container.clusters.create
container.clusters.delete
container.clusters.get
container.clusters.list
container.clusters.update
container.operations.*
resourcemanager.projects.get
resourcemanager.projects.list
Projeto
roles/
container.clusterViewer
Leitor de cluster do Kubernetes Engine Acesso somente leitura aos clusters do Kubernetes. container.clusters.get
container.clusters.list
resourcemanager.projects.get
resourcemanager.projects.list
roles/
container.developer
Desenvolvedor do Kubernetes Engine Dá acesso total aos objetos da API Kubernetes dentro dos clusters do Container. container.apiServices.*
container.backendConfigs.*
container.bindings.*
container.certificateSigningRequests.create
container.certificateSigningRequests.delete
container.certificateSigningRequests.get
container.certificateSigningRequests.list
container.certificateSigningRequests.update
container.certificateSigningRequests.updateStatus
container.clusterRoleBindings.get
container.clusterRoleBindings.list
container.clusterRoles.get
container.clusterRoles.list
container.clusters.get
container.clusters.list
container.componentStatuses.*
container.configMaps.*
container.controllerRevisions.get
container.controllerRevisions.list
container.cronJobs.*
container.customResourceDefinitions.*
container.daemonSets.*
container.deployments.*
container.endpoints.*
container.events.*
container.horizontalPodAutoscalers.*
container.ingresses.*
container.initializerConfigurations.*
container.jobs.*
container.limitRanges.*
container.localSubjectAccessReviews.*
container.namespaces.*
container.networkPolicies.*
container.nodes.*
container.persistentVolumeClaims.*
container.persistentVolumes.*
container.petSets.*
container.podDisruptionBudgets.*
container.podPresets.*
container.podSecurityPolicies.get
container.podSecurityPolicies.list
container.podTemplates.*
container.pods.*
container.replicaSets.*
container.replicationControllers.*
container.resourceQuotas.*
container.roleBindings.get
container.roleBindings.list
container.roles.get
container.roles.list
container.scheduledJobs.*
container.secrets.*
container.selfSubjectAccessReviews.*
container.serviceAccounts.*
container.services.*
container.statefulSets.*
container.storageClasses.*
container.subjectAccessReviews.*
container.thirdPartyObjects.*
container.thirdPartyResources.*
container.tokenReviews.*
resourcemanager.projects.get
resourcemanager.projects.list
Projeto
roles/
container.hostServiceAgentUser
User agent de serviço de hospedagem do Kubernetes Engine Acesso de uso do agente de serviço de host do Kubernetes Engine. compute.firewalls.get
container.hostServiceAgent.*
roles/
container.viewer
Leitor do Kubernetes Engine Fornece acesso somente leitura aos recursos do GKE. container.apiServices.get
container.apiServices.list
container.backendConfigs.get
container.backendConfigs.list
container.bindings.get
container.bindings.list
container.certificateSigningRequests.get
container.certificateSigningRequests.list
container.clusterRoleBindings.get
container.clusterRoleBindings.list
container.clusterRoles.get
container.clusterRoles.list
container.clusters.get
container.clusters.list
container.componentStatuses.*
container.configMaps.get
container.configMaps.list
container.controllerRevisions.get
container.controllerRevisions.list
container.cronJobs.get
container.cronJobs.getStatus
container.cronJobs.list
container.customResourceDefinitions.get
container.customResourceDefinitions.list
container.daemonSets.get
container.daemonSets.getStatus
container.daemonSets.list
container.deployments.get
container.deployments.getStatus
container.deployments.list
container.endpoints.get
container.endpoints.list
container.events.get
container.events.list
container.horizontalPodAutoscalers.get
container.horizontalPodAutoscalers.getStatus
container.horizontalPodAutoscalers.list
container.ingresses.get
container.ingresses.getStatus
container.ingresses.list
container.initializerConfigurations.get
container.initializerConfigurations.list
container.jobs.get
container.jobs.getStatus
container.jobs.list
container.limitRanges.get
container.limitRanges.list
container.namespaces.get
container.namespaces.getStatus
container.namespaces.list
container.networkPolicies.get
container.networkPolicies.list
container.nodes.get
container.nodes.getStatus
container.nodes.list
container.operations.*
container.persistentVolumeClaims.get
container.persistentVolumeClaims.getStatus
container.persistentVolumeClaims.list
container.persistentVolumes.get
container.persistentVolumes.getStatus
container.persistentVolumes.list
container.petSets.get
container.petSets.list
container.podDisruptionBudgets.get
container.podDisruptionBudgets.getStatus
container.podDisruptionBudgets.list
container.podPresets.get
container.podPresets.list
container.podSecurityPolicies.get
container.podSecurityPolicies.list
container.podTemplates.get
container.podTemplates.list
container.pods.get
container.pods.getStatus
container.pods.list
container.replicaSets.get
container.replicaSets.getScale
container.replicaSets.getStatus
container.replicaSets.list
container.replicationControllers.get
container.replicationControllers.getScale
container.replicationControllers.getStatus
container.replicationControllers.list
container.resourceQuotas.get
container.resourceQuotas.getStatus
container.resourceQuotas.list
container.roleBindings.get
container.roleBindings.list
container.roles.get
container.roles.list
container.scheduledJobs.get
container.scheduledJobs.list
container.serviceAccounts.get
container.serviceAccounts.list
container.services.get
container.services.getStatus
container.services.list
container.statefulSets.get
container.statefulSets.getStatus
container.statefulSets.list
container.storageClasses.get
container.storageClasses.list
container.thirdPartyObjects.get
container.thirdPartyObjects.list
container.thirdPartyResources.get
container.thirdPartyResources.list
container.tokenReviews.*
resourcemanager.projects.get
resourcemanager.projects.list
Projeto

Para saber mais sobre as permissões concedidas por cada papel do Cloud IAM, consulte esta página.

Papéis primários do Cloud IAM

Os papéis primários do Cloud IAM concedem aos usuários acesso global no nível do projeto a todos os recursos do GCP. Para proteger o projeto e os clusters, use papéis pré-definidos sempre que possível.

Para saber mais sobre os papéis primários, consulte esta seção na documentação do Cloud Identity and Access Management.

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

Para mais informações sobre o papel ServiceAccountUser, consulte esta seção na documentação do Cloud 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
roles/
iam.serviceAccountUser
Usuário da conta de serviço Executa operações como a conta do serviço. iam.serviceAccounts.actAs
iam.serviceAccounts.get
iam.serviceAccounts.list
resourcemanager.projects.get
resourcemanager.projects.list
Conta de serviço
Papel Nome Descrição Permissões Menor recurso

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.

roles/
container.hostServiceAgentUser
Kubernetes Engine Host Service Agent User Use access of the Kubernetes Engine Host Service Agent. compute.firewalls.get
container.hostServiceAgent.*
Papel Nome Descrição Permissões Menor recurso

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.

Como ver as permissões concedidas pelos papéis do Cloud Identity and Access Management

É possível visualizar as permissões concedidas por cada papel usando a ferramenta de linha de comando gcloud ou o Console do GCP.

gcloud

Para ver as permissões concedidas por um papel específico, execute o comando a seguir. [ROLE] corresponde a qualquer papel do Cloud Identity and Access Management. Os papéis do GKE são prefixados com roles/container.:

gcloud iam roles describe roles/[ROLE]

Exemplo:

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 no menu IAM do Console do GCP.

    Acessar o menu IAM

  2. No campo Filtrar tabela, insira "GKE"

  3. Selecione o papel desejado.

Como gerenciar papéis do Cloud Identity and Access Management

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

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

Exemplos

Veja alguns exemplos de como o Cloud Identity and Access Management funciona com o GKE:

  • Um novo funcionário entrou em uma empresa. É necessário adicioná-lo ao projeto do GCP, mas ele precisa apenas visualizar os clusters do projeto e outros recursos do GCP. 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 Platform. 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

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine