Controle de acesso ao endpoint do cluster do Amazon EKS - Amazon EKS

Controle de acesso ao endpoint do cluster do Amazon EKS

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 desativar 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 por uma combinação do AWS Identity and Access Management (IAM) e do Controle de acesso com base em função (RBAC) nativo do Kubernetes.

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.

Opções de acesso ao endpoint do servidor de API
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.

É possível modificar o acesso ao endpoint do servidor de API de cluster usando o AWS Management Console ou a AWS CLI.

AWS Management Console
Para modificar o acesso ao endpoint do servidor de API do cluster usando a AWS Management Console
  1. Abra o console do Amazon EKS em https://console.aws.amazon.com/eks/home#/clusters.

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

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

  4. Em Private access (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 Public access (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 Public access (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 obter mais informações, consulte Cotas de serviço do Amazon EKS. 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.

AWS CLI
Para modificar o acesso ao endpoint do servidor de API do cluster usando a AWS CLI

Conclua as etapas a seguir usando a AWS CLI versão 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 comando da AWS CLI a seguir. 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 obter mais informações, consulte Cotas de serviço do Amazon EKS. 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 obter mais informações, consulte Considerações e requisitos sobre grupos de segurança do Amazon EKS.

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 obter mais informações, consulte Habilitar o acesso da entidade principal do IAM ao cluster e Acesso negado ou não autorizado (kubectl).

IDE AWS Cloud9

AWS Cloud9 é um ambiente de desenvolvimento integrado (IDE) baseado na nuvem que permite escrever, executar e depurar código com apenas um navegador. Você pode criar um IDE do AWS Cloud9 na VPC do cluster e usar o IDE para se comunicar com o cluster. Para obter mais informações, consulte Criar um ambiente no 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 obter mais informações, consulte Considerações e requisitos sobre grupos de segurança do Amazon EKS.

Ao configurar kubectl para o IDE do AWS Cloud9, 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 IDE usará para a configuração do RBAC antes de remover o acesso público ao endpoint. Para obter mais informações, consulte Habilitar o acesso da entidade principal do IAM ao cluster e Acesso negado ou não autorizado (kubectl).