Aplicar seletivamente políticas de firewall no GKE


Nesta página, mostramos como aplicar seletivamente as políticas de firewall de rede do Cloud Next Generation Firewall no Google Kubernetes Engine (GKE) usando tags. Para saber como usar tags no GKE para outras finalidades, como gerenciamento de faturamento ou políticas condicionais do IAM, consulte Gerenciar recursos do GKE usando tags.

Sobre as tags

As tags são pares de chave-valor que permitem anotar e gerenciar os recursos do Google Cloud no nível da organização ou do projeto. Use tags para organizar os recursos e aplicar condicionalmente políticas, como firewalls ou políticas do IAM. Use o controle de acesso do IAM para definir quem pode anexar, criar, atualizar ou excluir tags.

Para saber mais sobre tags, consulte a Visão geral das tags na documentação do Resource Manager.

Usar tags para aplicar políticas de firewall de rede

É possível usar tags para aplicar condicionalmente políticas de firewall de rede globais ou regionais aos nós do GKE. É necessário designar a finalidade GCE_FIREWALL para as tags que você quer usar com as políticas de firewall de rede. Quando você aplica tags de finalidade de firewall a clusters ou pools de nós do GKE, o GKE anexa automaticamente essas tags às máquinas virtuais (VMs) correspondentes do Compute Engine.

As tags para políticas de firewall de rede substituem a necessidade de usar tags de rede , que são metadados que qualquer pessoa pode anexar às VMs subjacentes do Compute Engine para aplicação de regras de firewall da nuvem privada virtual e que não são compatíveis com o controle de acesso do IAM. Se você usa tags de rede com regras de firewall de VPC, recomendamos migrar para políticas de firewall de rede e usar tags de firewall seguras. Para uma comparação detalhada, consulte Comparar tags de rede com tags neste documento.

Tags para o fluxo de trabalho das políticas de firewall de rede

Para usar tags com políticas de firewall de rede no GKE, faça o seguinte:

  1. Criar uma tag:

    1. Defina uma chave de tag no nível da organização ou do projeto, como env.
    2. Defina os possíveis valores de tag para a chave, como dev, staging e prod.
    3. Designar a tag para uso da política de firewall de rede.

  2. Conceda aos usuários acesso para interagir com a tag de firewall.

  3. Aplique pares de chave-valor de tag a clusters ou pools de nós específicos do GKE. O GKE anexa automaticamente as tags às VMs do Compute Engine de base para a aplicação da política de firewall.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ativar a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando gcloud components update.

Requisitos e limitações

  • As tags para políticas de firewall de rede são compatíveis com a versão 1.28 e posteriores do GKE. Se você usar uma versão do GKE anterior à 1.28, use tags de rede com regras de firewall da VPC.
  • O cluster do GKE deve ter sido criado originalmente usando a versão 1.28 ou posterior do GKE. O upgrade de um cluster de uma versão anterior à 1.28 para a versão 1.28 ou posterior não ativa as tags.
  • O cluster do GKE e a tag precisam estar associados à mesma rede VPC.
  • Nos clusters padrão, cada pool de nós aceita até cinco tags de firewall anexadas.
  • Os clusters do Autopilot dão suporte a até cinco tags de firewall.
  • O GKE rejeita chaves de tags que usam o prefixo gke-managed.
  • É necessário criar os pares de chave-valor da tag antes de anexá-los a clusters ou pools de nós.

Permissões e papéis do IAM

Para ter as permissões necessárias para usar tags para políticas de firewall no GKE, peça ao seu administrador para conceder a você os seguintes papéis do IAM:

Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.

Criar tags

Elas precisam existir para que você possa anexá-las a clusters ou nós. Para criar uma tag, consulte Usar tags para firewalls na documentação do Cloud NGFW.

Por exemplo, para criar uma tag de firewall com escopo do projeto, execute os seguintes comandos:

  1. Crie a chave da tag:

    gcloud resource-manager tags keys create TAG_KEY \
        --parent=projects/PROJECT_ID \
        --purpose=GCE_FIREWALL \
        --purpose-data=network=PROJECT_ID/NETWORK_NAME
    

    Substitua:

    • TAG_KEY: o nome da chave da tag, como env
    • PROJECT_ID: o ID do projeto do Google Cloud
    • NETWORK_NAME: o nome da rede VPC que você vai usar com a tag
  2. Consiga o ID da chave de tag:

    gcloud resource-manager tags keys describe PROJECT_ID/TAG_KEY \
        --format="value(name)"
    

    A saída é tagKeys/KEY_ID, em que KEY_ID é um ID numérico da chave. Anote esse ID para mais tarde.

  3. Adicione um valor de tag à chave:

    gcloud resource-manager tags values create TAG_VALUE \
        --parent=tagKeys/KEY_ID
    

    Substitua TAG_VALUE pelo nome de um valor permitido para essa chave de tag, como dev.

Sintaxe de tag nos comandos da CLI gcloud

Ao se referir a tags usando a CLI gcloud, formate os pares de chave-valor usando uma das seguintes sintaxes:

Sintaxe de tag

tagKeys/KEY_ID=tagValues/VALUE_ID

Substitua:

  • KEY_ID: o ID da chave numérica
  • VALUE_ID: o ID do valor numérico

Por exemplo, tagKeys/123456789=tagValues/987654321.


ORGANIZATION_ID/TAG_KEY=TAG_VALUE

Substitua:

  • ORGANIZATION_ID: seu ID numérico da organização do Google Cloud
  • TAG_KEY: o nome da chave de tag que você criou
  • TAG_VALUE: o nome do valor da tag que você criou.

Por exemplo, 12345678901/env=dev.


PROJECT_ID/TAG_KEY=TAG_VALUE

Substitua:

  • PROJECT_ID: o ID do projeto do Google Cloud
  • TAG_KEY: o nome da chave de tag que você criou
  • TAG_VALUE: o nome do valor da tag que você criou.

Por exemplo, example-project/env=dev.


PROJECT_NUMBER/TAG_KEY=TAG_VALUE

Substitua:

  • PROJECT_ID: o identificador numérico do seu projeto do Google Cloud.
  • TAG_KEY: o nome da chave de tag que você criou
  • TAG_VALUE: o nome do valor da tag que você criou.

Por exemplo, 11223344556/env=dev.

Tags de destino com políticas de firewall

Após a criação das tags, é possível consultar pares específicos de chave-valor nas regras das políticas de firewall. Veja instruções em Usar tags para firewalls.

Conceder permissões do IAM a agentes de serviço

Para que o GKE anexe tags automaticamente a novos nós durante eventos de escalonamento vertical, conceda os papéis do IAM correspondentes às contas de serviço gerenciadas pelo Google Cloud, também chamados de agentes de serviço.

  1. Conceda o papel de usuário da tag (roles/resourcemanager.tagUser) ao agente de serviço do Kubernetes Engine:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

    Substitua PROJECT_NUMBER pelo número do projeto do Google Cloud do cluster. Para encontrar o número do projeto, execute o seguinte comando:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. Conceda o papel de administrador de guardas de tag (roles/resourcemanager.tagHoldAdmin) ao agente de serviço do Kubernetes Engine para o par de chave-valor da tag:

    gcloud resource-manager tags values add-iam-policy-binding PROJECT_ID/TAG_KEY/TAG_VALUE \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagHoldAdmin
    

    Esse papel permite que o agente de serviço impeça a exclusão de tags se o par de chave-valor ainda estiver em uso no GKE.

  3. Conceda o papel de usuário da tag (roles/resourcemanager.tagUser) ao agente de serviço das APIs do Google:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER@cloudservices.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

Conceder outros papéis do IAM a tags fora do projeto

Para usar tags de propriedade de uma organização ou de um projeto diferente do projeto do cluster, siga estas outras etapas:

  1. Conceda o papel de usuário da tag (roles/resourcemanager.tagUser) ao agente de serviço do Kubernetes Engine o acesso às tags no recurso pai:

    gcloud resource-manager tags keys add-iam-policy-binding PARENT_RESOURCE/TAG_KEY \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

    Substitua:

    • PARENT_RESOURCE: o ID do projeto ou o ID da organização do recurso proprietário dessa tag
    • PROJECT_NUMBER: o número do projeto do cluster.
  2. Conceda o papel de usuário da tag (roles/resourcemanager.tagUser) ao agente de serviço das APIs do Google para as tags no recurso pai:

    gcloud resource-manager tags keys add-iam-policy-binding PARENT_RESOURCE/TAG_KEY \
        --member=serviceAccount:PROJECT_NUMBER@cloudservices.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    
  3. Conceda o papel de Administrador de retenções de tag (roles/resourcemanager.tagHoldAdmin) ao agente de serviço do Kubernetes Engine para o par de chave-valor da tag:

    gcloud resource-manager tags values add-iam-policy-binding PARENT_RESOURCE/TAG_KEY/TAG_VALUE \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagHoldAdmin
    

Anexar tags de firewall a clusters do Autopilot

Anexe tags de firewall a clusters do Autopilot no nível do cluster. O GKE aplica automaticamente essas tags no nível do cluster a cada nó.

Anexar tags ao criar um cluster do Autopilot

Execute este comando:

gcloud beta container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,...

Substitua:

  • CLUSTER_NAME: o nome do novo cluster.
  • LOCATION: a região do Compute Engine do cluster.
  • TAG1,TAG2,...: um conjunto separado por vírgulas de pares de chave-valor a ser anexado. Cada par de chave-valor precisa usar uma sintaxe compatível, conforme descrito na seção Sintaxe de tag nos comandos. Por exemplo, example-project/env=dev,1234567901/team=sre.

Anexar tags a clusters do Autopilot atuais

Execute este comando:

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,...

Quando você atualiza as tags em um cluster, o GKE substitui todas as tags existentes em todos os nós.

Anexar tags de firewall a clusters e pools de nós padrão

O método usado para anexar tags depende se você quer que outros pools de nós no cluster herdem as tags, da seguinte maneira:

Tags de firewall de cluster padrão
--autoprovisioning-resource-manager-tags

Configuração no nível do cluster

O GKE aplica as tags a todos os novos pools de nós provisionados automaticamente no cluster. Se você usar essa sinalização em um cluster atual, os pools de nós atuais manterão as tags que foram aplicadas antes da atualização.

--resource-manager-tags

Configuração no nível do pool de nós

O GKE aplica as tags ao pool de nós especificado. Se você usar essa sinalização durante a criação do cluster, o GKE aplicará as tags ao pool de nós padrão criado pelo GKE. Se você usar essa sinalização em um pool de nós provisionado automaticamente, o GKE substituirá todas as tags existentes no pool.

Anexar tags de firewall a clusters padrão

É possível anexar tags a clusters padrão novos ou atuais. Quando você anexa tags a um cluster inteiro, o GKE considera que elas estão definidas no nível do cluster.

Anexar tags a um novo cluster padrão com provisionamento automático de nós

O GKE usa tags no nível do cluster para novos nós provisionados automaticamente por padrão. O pool de nós padrão criado pelo GKE no cluster não é provisionado automaticamente e não recebe essas tags.

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,... \
    --enable-autoprovisioning \
    --max-cpu=MAX_CPU \
    --max-memory=MAX_MEMORY

Substitua:

  • CLUSTER_NAME: o nome do novo cluster.
  • LOCATION: a região ou zona do Compute Engine para o novo cluster.
  • TAG1,TAG2,...: um conjunto separado por vírgulas de pares de chave-valor a ser anexado. Cada par de chave-valor precisa usar uma sintaxe compatível, conforme descrito na seção Sintaxe de tag nos comandos. Por exemplo, example-project/env=dev,1234567901/team=sre.
  • MAX_CPU: o número máximo de núcleos para o cluster
  • MAX_MEMORY: a capacidade máxima de memória do cluster em gigabytes.

Anexe tags ao ativar o provisionamento automático de nós em um cluster atual

O GKE só aplica essas tags aos novos pools de nós provisionados automaticamente. Os pools de nós atuais mantêm todas as tags que tinham antes da atualização.

  1. Anexe tags ao cluster:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autoprovisioning-resource-manager-tags=TAG1,TAG2,...
    
  2. Ative o provisionamento automático de nós no cluster:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --enable-autoprovisioning \
        --max-cpu=MAX_CPU \
        --max-memory=MAX_MEMORY
    

Anexar tags de firewall a pools de nós

É possível anexar tags a pools de nós novos ou atuais, independentemente de usarem o provisionamento automático de nós. O GKE considera essas tags como uma configuração no nível do pool de nós.

Anexar tags ao pool de nós padrão

O GKE anexa as tags especificadas usando a flag --resource-manager-tags quando você cria um cluster para o pool de nós padrão criado pelo GKE no cluster.

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Substitua:

  • CLUSTER_NAME: o nome do novo cluster.
  • LOCATION: a região ou zona do Compute Engine para o novo cluster.
  • TAG1,TAG2,...: um conjunto separado por vírgulas de pares de chave-valor a ser anexado. Cada par de chave-valor precisa usar uma sintaxe compatível, conforme descrito na seção Sintaxe de tag nos comandos. Por exemplo, example-project/env=dev,1234567901/team=sre.

Anexar tags a um novo pool de nós

Quando você usa a sinalização --resource-manager-tags durante a criação do pool de nós, o GKE anexa as tags especificadas a esse pool.

gcloud beta container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Substitua:

  • NODE_POOL_NAME: o nome do novo pool de nós.
  • CLUSTER_NAME: o nome do cluster.
  • LOCATION: a região ou zona do Compute Engine do cluster.
  • TAG1,TAG2,...: um conjunto separado por vírgulas de pares de chave-valor a ser anexado. Cada par de chave-valor precisa usar uma sintaxe compatível, conforme descrito na seção Sintaxe de tag nos comandos. Por exemplo, example-project/env=dev,1234567901/team=sre.

Anexar tags a um pool de nós atual

Quando você atualiza as tags em um pool de nós atual usando a sinalização --resource-manager-tags, o GKE substitui todas as tags nesse pool de nós. Use esse comando para atualizar as tags em pools de nós provisionados automaticamente.

gcloud beta container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Substitua NODE_POOL_NAME pelo nome do pool de nós a ser atualizado.

Alternar as configurações de provisionamento automático nos clusters e pools de nós atuais

Quando você atualiza as tags no nível do cluster, o GKE aplica essas novas tags a todos os novos pools de nós no cluster e retém as tags que foram anexadas aos pools de nós atuais.

Ao atualizar os pools de nós atuais para ativar ou desativar o provisionamento automático de nós, considere as seguintes implicações para as tags:

  • Quando você ativa ou desativa o provisionamento automático de nós, o pool de nós mantém as tags atuais. O GKE não substitui essas tags por outras no nível do cluster, mesmo durante a recriação dos nós.
  • Se você atualizar manualmente as tags em pools de nós específicos, o GKE substituirá as tags atuais pelas tags especificadas para esse pool de nós.

Verifique as tags de firewall no cluster

  • Liste as tags nos clusters do Autopilot:

    gcloud beta container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(nodePoolAutoConfig.resourceManagerTags)"
    
  • Liste as tags em pools de nós específicos:

    gcloud beta container node-pools describe NODE_POOL_NAME \
      --cluster=CLUSTER_NAME \
      --location=LOCATION \
      --format="value(config.resourceManagerTags)"
    

Remover tags de firewall de clusters e pools de nós

Para remover tags de firewall de clusters e pools de nós, atualize o recurso com um valor vazio para as tags.

Remover tags dos clusters do Autopilot

Execute este comando:

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=

Remover tags de pools de nós

  1. Remova as tags de provisionamento automático de nós no nível do cluster:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autoprovisioning-resource-manager-tags=
    

    O GKE não anexará tags a novos pools de nós provisionados automaticamente.

  2. Remova as tags do pool de nós:

    gcloud beta container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=LOCATION \
        --resource-manager-tags=
    

    O GKE remove as tags atuais desse pool de nós.

Excluir chaves e valores de tags

Para excluir uma chave ou um valor de tag, verifique se ela está removida de todos os recursos. Depois, consulte Como excluir tags na documentação do Resource Manager.

Comparar tags de rede com tags

O uso de tags para aplicação da política de firewall oferece benefícios significativos de segurança e usabilidade em comparação com as tags de rede. Da mesma forma, as políticas de firewall de rede melhoram os recursos das regras de firewall da VPC, facilitando a aplicação delas em organizações inteiras, pastas, projetos ou redes.

O uso de tags com políticas de firewall de rede é uma maneira mais segura e escalonável de gerenciar o acesso aos ambientes do GKE em toda a organização. É possível usar tags de rede no mesmo cluster que as tags, mas não para aplicar políticas de firewall de rede.

Para ver uma comparação detalhada entre tags e tags de rede, consulte Comparação entre tags e tags de rede na documentação do Cloud NGFW.

Diferenças funcionais nos pools de nós provisionados automaticamente

Nos clusters do Autopilot e em pools de nós padrão que não usam provisionamento automático de nós, as tags e as tags de rede exibem um comportamento semelhante. A tabela a seguir mostra as diferenças funcionais entre tags de rede e tags nos pools de nós provisionados automaticamente em clusters padrão:

Ação Comportamento das tags de rede Comportamento das tags
O GKE faz o provisionamento automático de um pool de nós O GKE aplica as tags de rede no nível do cluster o GKE aplica as tags no nível do cluster
Você atualiza tags ou tags de rede em um pool de nós provisionado automaticamente
  • Se houver tags de rede no nível do cluster, a operação de atualização falhará
  • Se não houver tags de rede no nível do cluster, o GKE substituirá as tags de rede atuais do pool de nós
O GKE substitui as tags atuais do pool de nós, independentemente da existência de tags no nível do cluster
Você atualiza tags ou tags de rede para todo o cluster O GKE substitui as tags de rede dos pools de nós novos e atuais provisionados automaticamente no cluster. O GKE aplica as novas tags no nível do cluster aos novos pools de nós provisionados automaticamente. Os pools de nós com provisionamento automático mantêm as tags de antes da atualização.

A seguir