O blog da AWS
Protegendo o acesso ao Kubecost com o Amazon Cognito
Introdução
O Kubecost fornece visibilidade e insights de custos em tempo real para equipes que usam o Kubernetes. Ele tem um painel intuitivo para ajudar você a entender e analisar os custos de execução de suas cargas de trabalho em um cluster Kubernetes. O Kubecost é baseado no OpenCost, que foi recentemente aceito como um projeto Sandbox da Cloud Native Computing Foundation (CNCF), e é ativamente apoiado pela AWS.
Pacote otimizado do Kubecost para Amazon EKS
No início do ano passado, o Amazon Elastic Kubernetes Service (Amazon EKS) anunciou a disponibilidade de um pacote de Kubecost otimizado para Amazon EKS para visibilidade dos custos do cluster. O pacote está disponível gratuitamente para os clientes e inclui suporte para solução de problemas do Kubecost. Os administradores da plataforma Kubernetes e líderes financeiros podem usar o Kubecost para visualizar um detalhamento de suas cobranças do Amazon EKS, alocar custos e estornar unidades organizacionais (por exemplo, equipes de aplicativos). O Kubecost fornece às equipes internas e às unidades de negócios dados de custos transparentes e precisos com base na fatura da AWS. Os clientes também podem receber sugestões personalizadas para otimização de custos, adaptadas ao ambiente de infraestrutura e aos padrões de uso.
Usando o painel intuitivo do Kubecost, os clientes podem monitorar, analisar e alocar os custos do cluster. Quando os clientes implantam o Kubecost em um cluster, o painel é protegido pela autenticação básica do NGINX, o que não é recomendado em ambientes de produção. Esta publicação mostra como tornar o painel acessível a públicos externos, como líderes financeiros, e acesso seguro usando o Amazon Cognito.
Visão geral da solução
Tornamos o painel do Kubecost acessível fora do cluster expondo-o usando uma entrada, que usa o Application Load Balancer (ALB). Integrando o Amazon Cognito com o ALB, a solução adiciona suporte para autenticar e autorizar usuários no painel do Kubecost. Para saber mais sobre como o ALB e o Cognito se integram, consulte Como usar o Application Load Balancer e o Amazon Cognito para autenticar usuários para seus aplicativos web do Kubernetes.
Nesta postagem, usamos o padrão seguro ingress-auth-cognito EKS Blueprints para configurar:
- Application Load Balancer, Amazon Cognito e um certificado de Transport Layer Security (TLS) no AWS Certificate Manager (ACM) com zona hospedada do Amazon Route 53 para autenticar usuários no Kubecost
- Implantação do aplicativo Kubecost usando o Kubecost addon para EKS CDK Blueprints
- Kubernetes Ingress com anotações para o Amazon Cognito e um certificado TLS (usando o Amazon Certificate Manager) para autenticar o usuário com segurança no Kubecost
Os clientes podem usar esse padrão para gerenciar vários clusters em ambientes com o GitOps. Consulte implantação contínua e entrega de GitOps com Amazon EKS Blueprints e ArgoCD para saber mais sobre a entrega orientada por GitOps usando padrões EKS Blueprints.
O padrão ingress-auth-cognito seguro Cloud Development Kit (CDK) inclui uma configuração de cluster Amazon EKS, configuração de capacidade computacional e complementos exigidos pelo Kubecost.
Pré-requisitos
Você precisa do seguinte para concluir as etapas desta postagem:
- Interface de linha de comando da AWS (AWS CLI) versão 2
- AWS CDK versão 2.80.0 ou posterior
- Node versão 20.0.0 ou posterior
- NPM versão 8.19.2 ou posterior
- kubectl versão 1.24 ou posterior
- Git
- Uma zona pública hospedada pelo Amazon Route 53
Vamos começar definindo algumas variáveis de ambiente:
Clone o repositório cdk-eks-blueprints-patterns e instale pacotes de dependência. Esse repositório contém o código CDK v2 escrito em TypeScript.
O padrão ingress-auth-cognito seguro EKS Blueprints está em lib/secure-ingress-auth-cognito/index.ts. Nesse arquivo, você pode encontrar a definição do blueprint com todas as configurações acima usando o método blueprints.eksBlueprint.builder ().
CDK do Bootstrap
A primeira etapa para qualquer implantação de CDK é inicializar o ambiente. O bootstrapping é o processo de provisionamento de recursos para o AWS CDK antes que você possa implantar aplicativos do AWS CDK em um ambiente da AWS (um ambiente da AWS é uma combinação de uma conta e região da AWS). Se você já usa o CDK em uma região, não precisa repetir o processo de inicialização.
Execute os comandos abaixo para inicializar o ambiente da AWS em sua região:
Implante o Kubecost com acesso seguro
Nesta solução, permitiremos o acesso ao painel do Kubecost com base nos endereços de e-mail do usuário. Você pode controlar o acesso ao painel permitindo a listagem de um domínio inteiro ou endereços de e-mail individuais.
É necessário que os usuários se inscrevam antes de poderem acessar o painel do Kubecost. O gatilho Lambda de pré-inscrição só permite inscrições quando o domínio de e-mail do usuário corresponde aos domínios listados como permitidos. Quando os usuários se cadastram, o Amazon Cognito envia um código de verificação para seu endereço de e-mail. Os usuários precisam verificar o acesso (usando o código válido único) ao e-mail antes de acessarem o painel.
Primeiro, criaremos um parâmetro do AWS Systems Manager (SSM) para armazenar o valor do domínio de e-mail que os usuários usam para se inscrever. Em seguida, criaremos uma variável de ambiente para armazenar o nome de domínio que hospeda o painel do Kubecost. O domínio de e-mail e o domínio usados para hospedar o painel do Kubecost podem ser iguais ou diferentes. Por exemplo, você pode escolher hospedar o painel em kubecost.myorg.mycompany.com e usar email@mycompany.org para acessar o painel.
Crie os parâmetros abaixo com endereços de e-mail e domínios permitidos no repositório de parâmetros do AWS Systems Manager:
Se quiser limitar o acesso ao painel por meio de endereços de e-mail, você também pode criar um parâmetro para armazenar endereços de e-mail permitidos e adicionar uma lógica ao gatilho Lambda de pré-autenticação, conforme mostrado aqui.
Em seguida, crie um segredo no AWS Secrets Manager que você usará para acessar o ArgoCD. O segredo argo-admin-password deve ser definido como texto simples (não chave/valor):
O código CDK espera os nomes de domínio e subdomínio permitidos no arquivo de contexto do CDK (cdk.json).
Crie duas variáveis de ambiente. A variável PARENT_HOSTED_ZONE contém o nome da sua zona pública hospedada do Route 53. O DEV_SUBZONE_NAME será o endereço do seu painel do Kubecost.
Gere o arquivo cdk.json:
Execute o comando abaixo na raiz desse repositório para implantar a solução:
Esse comando implantará o seguinte:
- Amazon Virtual Private Cloud (Amazon VPC) com sub-redes públicas e privadas, gateways de tradução de endereços de rede (NAT) em cada zona de disponibilidade (AZ) e um gateway de Internet
- Um cluster Amazon EKS com os seguintes complementos do Kubernetes
- Pool de usuários do Amazon Cognito, cliente de grupo de usuários, domínio e também acionadores lambda de pré-inscrição e pré-autenticação para executar uma lógica personalizada para validar os usuários antes de permitir que eles se inscrevam ou se autenticem.
Quando a implantação estiver concluída, você verá a saída semelhante à mostrada abaixo em seu terminal:
Para atualizar a configuração do Kubernetes para seu novo cluster, copie e execute o comando aws eks update-kubeconfig (o segundo comando na saída) em seu terminal.
Valide o acesso ao seu cluster Amazon EKS usando o kubectl abaixo listando todos os namespaces:
Você deve ver os seguintes namespaces no cluster:
A pilha implanta recursos do Kubecost no namespace kubecost.
Testando a autenticação
Aponte seus navegadores para a URL que você associou à chave DEV_SUBZONE_NAME do contexto do CDK para acessar o painel do Kubecost.
O valor também é armazenado como uma variável de ambiente:
Seu navegador será redirecionado para uma página de login da interface de usuário (UI) hospedada pelo Amazon Cognito. Como essa é a primeira vez que você acessa o aplicativo, selecione inscrever-se.
O gatilho de pré-inscrição do AWS Lambda para o pool de usuários do Amazon Cognito está configurado para permitir que os usuários se registrem somente em determinados domínios de e-mail listados como permitidos. Os domínios de e-mail listados como permissões são configurados como uma variável ambiental na função AWS Lambda. Vamos tentar inscrever um novo usuário usando um ID de e-mail, cujo domínio não faz parte da lista de permissões.
Você receberá um erro, pois o domínio não está na lista de permissões.
Vamos nos inscrever como um novo usuário com um dos domínios de e-mail listados como permitidos. Dessa vez, você receberá uma solicitação para confirmar sua conta. Receba o código de verificação em seu e-mail e confirme sua conta.
Depois de verificar o endereço de e-mail, faça login para acessar o painel do Kubecost
Depois de fazer login, o ALB o redirecionará para o painel do Kubecost:
Limpando
Você continua incorrendo em custos até excluir a infraestrutura que criou para esta publicação. Use os comandos abaixo para excluir os recursos criados durante esta postagem:
Conclusão
Nesta postagem, mostramos como proteger o painel do Kubecost e, ao mesmo tempo, torná-lo acessível aos usuários sem precisar acessar o cluster do Kubernetes. Usamos um ALB para expor o painel e o acesso seguro usando o Cognito. Também criamos um registro no Route 53 para que os usuários possam acessar facilmente o painel.
Usamos o pool de usuários do Cognito para armazenar informações do usuário. Se você já tem um provedor de identidade que fornece suporte ao OpenID Connect (OIDC) ou SAML 2.0, você pode integrá-lo ao Cognito para pular a inscrição e fazer login no painel do Kubecost.
Este artigo foi traduzido do Blog da AWS em Inglês.