Controlar o acesso à rede ao endpoint do servidor de API do cluster - Amazon EKS

Controlar o acesso à rede ao endpoint do servidor de API do cluster

Este tópico ajuda a ativar o acesso privado ao endpoint do servidor de API do Kubernetes de cluster do Amazon EKS e limitar ou desabilitar completamente o acesso público pela Internet.

Quando você cria um cluster, o Amazon EKS cria um endpoint para o servidor gerenciado de API do Kubernetes usado para se comunicar com o cluster (usando as ferramentas de gerenciamento do Kubernetes, como kubectl). Por padrão, esse endpoint do servidor de API é público para a Internet, e o acesso ao servidor de API é protegido usando uma combinação de AWS Identity and Access Management (IAM) e Kubernetes Role Based Access Control (RBAC) nativo. Esse endpoint é conhecido como o endpoint de cluster público. Também há um endpoint de cluster privado. Para obter mais informações sobre o endpoint de cluster privado, consulte a seção Endpoint privado do cluster a seguir.

Formato de endpoint de cluster IPv6

O EKS cria um endpoint exclusivo de pilha dupla no seguinte formato para novos clusters IPv6 criados após outubro de 2024. Um cluster IPv6 é um cluster que você seleciona IPv6 na configuração da família de IP (ipFamily) do cluster.

AWS

Endpoint público/privado do cluster do EKS: eks-cluster.region.api.aws

AWS GovCloud (US)

Endpoint público/privado do cluster do EKS: eks-cluster.region.api.aws

Amazon Web Services in China

Endpoint público/privado do cluster do EKS: eks-cluster.region.api.amazonwebservices.com.rproxy.goskope.com.cn

nota

O endpoint de cluster de pilha dupla foi introduzido em outubro de 2024. Para obter mais informações sobre clusters IPv6, consulte Saiba mais sobre endereços IPv6 para clusters, pods e serviços. Clusters criados antes de outubro de 2024 devem usar o seguinte formato de endpoint.

Formato de endpoint de cluster IPv4

O EKS cria um endpoint exclusivo no formato a seguir para cada cluster que seleciona IPv4 na configuração da família de IP (ipFamily) do cluster:

AWS

Endpoint público/privado do cluster EKS eks-cluster.region.eks.amazonaws.com

AWS GovCloud (US)

Endpoint público/privado do cluster EKS eks-cluster.region.eks.amazonaws.com

Amazon Web Services in China

Endpoint público/privado do cluster EKS eks-cluster.region.api.amazonwebservices.com.rproxy.goskope.com.cn

nota

Antes de outubro de 2024, os clusters IPv6 também usavam esse formato de endpoint. Para eles, tanto o endpoint público quanto o privado têm apenas endereços IPv4 resolvidos a partir desse endpoint.

Endpoint privado do cluster

Você pode habilitar o acesso privado ao servidor de API do Kubernetes para que todas as comunicações entre os nós e o servidor de API fiquem na VPC. Você pode limitar os endereços IP que podem acessar o servidor de API pela Internet ou desativar completamente o acesso à Internet para o servidor de API.

nota

Como esse endpoint é para o servidor de API do Kubernetes, não um endpoint tradicional do AWS PrivateLink para comunicação com uma API da AWS, ele não aparece como um endpoint no console da Amazon VPC.

Ao ativar o acesso privado ao endpoint para o cluster, o Amazon EKS cria uma zona hospedada privada do Route 53 em seu nome e a associa à VPC do cluster. Essa zona hospedada privada é gerenciada pelo Amazon EKS e não aparece nos recursos do Route 53 da sua conta. Para que a zona hospedada privada roteie o tráfego adequadamente para o seu servidor da API, a VPC deve ter enableDnsHostnames e enableDnsSupport definidos como true, e o conjunto de opções DHCP para sua VPC deve incluir AmazonProvidedDNS na lista de servidores de nome de domínio. Para obter mais informações, consulte Updating DNS support for your VPC (Atualizar o suporte de DNS para VPC) no Manual do usuário da Amazon VPC.

É possível definir os requisitos de acesso ao endpoint do servidor de API ao criar um cluster, e você pode atualizar o acesso ao endpoint do servidor de API para um cluster a qualquer momento.

Modificar o acesso ao endpoint do cluster

Use os procedimentos desta seção para modificar o acesso ao endpoint para um cluster existente. A tabela a seguir mostra as combinações compatíveis de acesso ao endpoint do servidor de API e seus comportamentos associados.

Acesso público ao endpoint Acesso privado ao endpoint Comportamento

Habilitado

Desabilitado

  • Esse é o comportamento padrão para novos clusters do Amazon EKS.

  • As solicitações de API do Kubernetes que são originadas na VPC do cluster (como um nó para a comunicação do ambiente de gerenciamento) deixam a VPC, mas não a rede da Amazon.

  • O servidor de API do cluster é acessível pela internet. Também é possível limitar os blocos CIDR que podem acessar o endpoint público. Se você limitar o acesso a blocos CIDR específicos, é recomendável habilitar também o endpoint privado ou garantir que os blocos CIDR especificados incluam os endereços dos quais os nós e os Pods do Fargate (se você usá-los) acessam o endpoint público.

Habilitado

Habilitado

  • As solicitações de API do Kubernetes na VPC do cluster (como um nó para comunicação do ambiente de gerenciamento) usam o endpoint da VPC privado.

  • O servidor de API do cluster é acessível pela internet. Também é possível limitar os blocos CIDR que podem acessar o endpoint público.

Desabilitado

Habilitado

  • Todo o tráfego para o servidor de API do cluster deve vir da VPC do cluster ou de uma rede conectada.

  • Não há acesso público ao servidor de API pela internet. Todos os comandos kubectl devem vir da VPC ou de uma rede conectada. Para ver as opções de conectividade, consulte Acessar um servidor de API somente privado.

  • O endpoint do servidor de API do cluster é resolvido por servidores DNS públicos para um endereço IP privado da VPC. No passado, o endpoint só podia ser resolvido a partir da VPC.

    Se o endpoint não for resolvido para um endereço IP privado na VPC para um cluster existente, será possível:

    • Ativar o acesso público e desativá-lo novamente. Só é necessário fazer isso uma vez para um cluster e o endpoint será resolvido para um endereço IP privado desse ponto em diante.

    • Atualizar o cluster.

Você pode modificar o acesso ao endpoint do servidor de API do cluster usando a CLI AWS Management Console ou AWS.

Configure o acesso ao endpoint - AWS console

  1. Abra o console do Amazon EKS.

  2. Selecione o nome do cluster para exibir as informações dele.

  3. Escolha a guia Networking (Redes) e selecione Update (Atualizar).

  4. Em Acesso privado: escolha se deseja habilitar ou desabilitar o acesso privado para o endpoint do servidor de API do Kubernetes do cluster. Se você habilitar o acesso privado, as solicitações de API do Kubernetes originadas na VPC do cluster usarão o endpoint da VPC privado. É necessário habilitar o acesso privado para desabilitar o acesso público.

  5. Em Acesso público: escolha se deseja habilitar ou desabilitar o acesso público para o endpoint do servidor de API do Kubernetes do cluster. Se você desabilitar o acesso público, o servidor de API do Kubernetes do cluster só poderá receber solicitações da VPC do cluster.

  6. (Opcional) Se você habilitou o Acesso público, poderá especificar quais endereços da Internet podem se comunicar com o endpoint público. Selecione Advanced Settings (Configurações avançadas). Insira um bloco CIDR, como 203.0.113.5/32. O bloco não pode incluir endereços reservados. É possível inserir blocos adicionais selecionando Add Source (Adicionar origem). Há um número máximo de blocos CIDR que você pode especificar. Para ter mais informações, consulte Visualizar e gerenciar as cotas de serviço do Amazon EKS e do Fargate. Se você não especificar nenhum bloco, o endpoint do servidor de API público receberá solicitações de todos os endereços IP (0.0.0.0/0). Se você restringir o acesso ao endpoint público usando blocos CIDR, é recomendável habilitar também o acesso ao endpoint privado para que os nós e os Pods do Fargate (se você usá-los) possam se comunicar com o cluster. Sem o endpoint privado habilitado, suas origens CIDR de endpoint de acesso público devem incluir as origens de saída de sua VPC. Por exemplo, se você tiver um nó em uma sub-rede privada que se comunica com a Internet por meio de um gateway NAT, será necessário adicionar o endereço IP de saída do gateway NAT como parte de um bloco CIDR na lista de permissões no endpoint público.

  7. Selecione Update (Atualizar) para concluir.

Configurar o acesso ao endpoint - AWS CLI

Conclua as etapas a seguir usando a versão AWS CLI 1.27.160 ou posterior. É possível verificar sua versão atual com aws --version. Para instalar ou atualizar a AWS CLI, consulte Instalar a AWS CLI.

  1. Atualize o acesso ao endpoint do servidor de API do cluster com o seguinte comando da CLI AWS. Substitua o nome do cluster e os valores desejados de acesso ao endpoint. Se você definir endpointPublicAccess=true, também poderá inserir um único bloco CIDR ou uma lista de blocos CIDR separados por vírgulas para publicAccessCidrs. Os blocos não podem incluir endereços reservados. Se você especificar blocos CIDR, o endpoint do servidor de API público só receberá solicitações dos blocos listados. Há um número máximo de blocos CIDR que você pode especificar. Para ter mais informações, consulte Visualizar e gerenciar as cotas de serviço do Amazon EKS e do Fargate. Se você restringir o acesso ao endpoint público usando blocos CIDR, é recomendável habilitar também o acesso ao endpoint privado para que os nós e os Pods do Fargate (se você usá-los) possam se comunicar com o cluster. Sem o endpoint privado habilitado, suas origens CIDR de endpoint de acesso público devem incluir as origens de saída de sua VPC. Por exemplo, se você tiver um nó em uma sub-rede privada que se comunica com a Internet por meio de um gateway NAT, será necessário adicionar o endereço IP de saída do gateway NAT como parte de um bloco CIDR na lista de permissões no endpoint público. Se você não especificar nenhum bloco CIDR, o endpoint do servidor de API público receberá solicitações de todos os endereços IP (0.0.0.0/0).

    nota

    O comando a seguir permite acesso privado e acesso público a partir de um único endereço IP para o endpoint do servidor de API. Substitua 203.0.113.5/32 por um único bloco CIDR ou uma lista de blocos CIDR separados por vírgulas aos quais você deseja restringir o acesso à rede.

    aws eks update-cluster-config \ --region region-code \ --name my-cluster \ --resources-vpc-config endpointPublicAccess=true,publicAccessCidrs="203.0.113.5/32",endpointPrivateAccess=true

    Veja um exemplo de saída abaixo.

    { "update": { "id": "e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000", "status": "InProgress", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "true" }, { "type": "EndpointPrivateAccess", "value": "true" }, { "type": "publicAccessCidrs", "value": "[\203.0.113.5/32\"]" } ], "createdAt": 1576874258.137, "errors": [] } }
  2. Monitore o status da atualização do acesso ao endpoint com o comando a seguir, usando o nome do cluster e o ID da atualização retornado pelo comando anterior. Sua atualização estará concluída quando o status for exibido como Successful.

    aws eks describe-update \ --region region-code \ --name my-cluster \ --update-id e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000

    Veja um exemplo de saída abaixo.

    { "update": { "id": "e6f0905f-a5d4-4a2a-8c49-EXAMPLE00000", "status": "Successful", "type": "EndpointAccessUpdate", "params": [ { "type": "EndpointPublicAccess", "value": "true" }, { "type": "EndpointPrivateAccess", "value": "true" }, { "type": "publicAccessCidrs", "value": "[\203.0.113.5/32\"]" } ], "createdAt": 1576874258.137, "errors": [] } }

Acessar um servidor de API somente privado

Se tiver desabilitado o acesso público ao endpoint do servidor de API do Kubernetes do cluster, você só poderá acessar o servidor de API pela VPC ou por uma rede conectada. Veja a seguir algumas maneiras possíveis de acessar o endpoint do servidor de API do Kubernetes:

Rede conectada

Conecte a sua rede à VPC com um gateway de trânsito da AWS ou outra opção de conectividade e depois use um computador na rede conectada. É necessário garantir que o grupo de segurança do plano de controle do Amazon EKS tenha regras para permitir o tráfego de entrada na porta 443 da rede conectada.

Bastion host do Amazon EC2

Você pode executar uma instância do Amazon EC2 em uma sub-rede pública na VPC do cluster e fazer login via SSH nessa instância para executar os comandos do kubectl. Para obter mais informações, consulte Bastion hosts do Linux na AWS. É necessário garantir que o grupo de segurança do plano de controle do Amazon EKS tenha regras para permitir o tráfego de entrada na porta 443 do seu bastion host. Para ter mais informações, consulte Exibir os requisitos para grupos de segurança do Amazon EKS em clusters.

Quando você configurar kubectl para o bastion host, use credenciais da AWS que já estiverem mapeadas para a configuração do RBAC do cluster ou adicione a entidade principal do IAM que o bastion usará para a configuração do RBAC antes de remover o acesso público ao endpoint. Para ter mais informações, consulte Conceder aos usuários e perfis do IAM acesso às APIs do Kubernetes e Acesso negado ou não autorizado (kubectl).

IDE AWS Cloud9

AWS O Cloud9 é um ambiente de desenvolvimento integrado (IDE) baseado em nuvem que permite que você escreva, execute e depure seu código com apenas um navegador. Você pode criar um IDE do AWS Cloud9 na VPC do seu cluster e usar o IDE para se comunicar com o cluster. Para obter mais informações, consulte Criação de um ambiente em AWS Cloud9. É necessário garantir que o grupo de segurança do plano de controle do Amazon EKS contenha regras para permitir o tráfego de entrada na porta 443 do seu grupo de segurança IDE. Para ter mais informações, consulte Exibir os requisitos para grupos de segurança do Amazon EKS em clusters.

Quando você configurar o kubectl para o seu AWS Cloud9 IDE, certifique-se de usar as credenciais do AWS que já estão mapeadas na configuração RBAC do cluster ou adicione a entidade principal do IAM que o IDE usará à configuração RBAC antes de remover o acesso público ao endpoint. Para ter mais informações, consulte Conceder aos usuários e perfis do IAM acesso às APIs do Kubernetes e Acesso negado ou não autorizado (kubectl).