MagaluCloud / mgccli

O MGC CLI (Command Line Interface) é uma ferramenta que permite aos usuários interagirem com os serviços da Magalu Cloud (MGC) por meio de linha de comando. Ela está disponível para os sistema macOS, Linux e Windows nas arquiteturas AMD64 e ARM.
https://magalu.cloud/
22 stars 2 forks source link

Configuração do servidor da autenticação flexivel #5

Closed caiomarcatti12 closed 4 months ago

caiomarcatti12 commented 5 months ago

Encontrei um possivel bug ao tentar acessar aplicação de autenticação rodando dentro de um container Docker através do localhost no meu host. A aplicação está configurada para ouvir apenas em 127.0.0.1, o que impede o acesso externo, incluindo o acesso do host onde o Docker está rodando.

Simulação:

docker run --rm --name magalu-cloud-cli -p 8095:8095 -it caiomarcatti12/magalu-cloud-cli:0.0.1

Este comando irá inicializar um container interativo para uso do cli mgc.

mgc auth login
docker exec -it magalu-cloud-cli sh

Será produzido uma saída como esta.

image

A saída do comando anterior indica que a aplicação está sendo servida em 127.0.0.1:8095, confirmando que a aplicação só pode ser acessada de dentro do próprio host (neste caso, o container).

Proposta de Melhoria: Variavel de ambiente para host do servidor de autenticação

Seria útil se pudéssemos configurar o endereço IP em que o servidor da aplicação ouve. Isso não apenas resolveria o problema de acessar a aplicação através do Docker, mas também melhoraria a flexibilidade e adaptabilidade da aplicação em diferentes ambientes de deploy.

Sugestão de Implementação: Introduzir uma variável de ambiente, por exemplo, HOST_AUTH_SERVER, que pode ser usada para configurar o IP em que a aplicação deve ouvir. A implementação poderia verificar essa variável e, se não configurada, fallback para 127.0.0.1. Isso permitiria que a aplicação ouvisse em 0.0.0.0 quando necessário, facilitando a conexão via Docker.

Impacto Esperado: Esta mudança tornaria a aplicação mais amigável para uso em containers, permitindo acesso externo quando configurado para ouvir em todos os endereços IP. Além disso, aumentaria a versatilidade da aplicação em diferentes cenários de deployment, desde desenvolvimento até produção.

A sua análise e a proposta de melhoria são bastante relevantes para facilitar a utilização de aplicações em containers, e suas sugestões poderiam realmente melhorar a flexibilidade do sistema. Aqui estão duas propostas adicionais que complementam as suas ideias:

Proposta de Melhoria: Polling de Autenticação

Sugestão de Implementação: Introduzir um argumento opcional no comando de login, como --watch ou --poll, que, quando utilizado, ativa um polling automático que verifica o estado do login em intervalos regulares. Isso eliminaria a necessidade do usuário verificar manualmente se o desafio de login foi completado. Por exemplo:

mgc auth login --poll

Essa implementação poderia utilizar um loop simples que faz requisições para uma API ou endpoint que verifica o estado do desafio de autenticação até que uma resposta bem-sucedida seja retornada, facilitando o processo para o usuário.

Proposta de Melhoria: Personalização de Redirecionamento

Sugestão de Implementação: Permitir a configuração de uma URL de redirecionamento customizada por meio de uma variável de ambiente ou diretamente como um argumento de comando. Isso seria útil em cenários onde o acesso é feito através de um bastion ou quando há restrições de rede que exigem redirecionamentos específicos. Por exemplo:

mgc auth login --redirect-url "https://custom-domain.com/auth-callback"

Isso permitiria que o fluxo de autenticação seja integrado com sistemas externos e personalizados, adequando-se a várias configurações de rede ou segurança.

Impacto Esperado: Essas melhorias aumentariam a automação e a personalização do processo de autenticação, tornando a CLI mais adaptável a diferentes ambientes e necessidades dos usuários, e proporcionando uma experiência mais fluida e menos propensa a erros manuais.

Essas propostas alinham-se ao objetivo de tornar a CLI mais amigável e versátil, especialmente em ambientes complexos de TI, como em setups de desenvolvimento, testes e produção variados.

caiomarcatti12 commented 5 months ago

Fiz o push dos arquivos utilizados nessa poc em meu github

https://github.com/caiomarcatti12/magalu-cloud/tree/main/cli/docker

caiomarcatti12 commented 5 months ago

Proposta de Melhoria: Autenticação Automática com Token

Introduzir uma maneira de fazer login automaticamente usando um token, ideal para automatizar processos em pipelines, onde não dá pra interagir manualmente.

Sugestão de Implementação:

Adicionar um argumento --token que você pode usar para passar seu token de autenticação quando for executar a CLI:

mgc auth login --token seu-token-aqui

Impacto Esperado:

Todas essas mudanças vão tornar a CLI mais amigável e fácil de usar em qualquer ambiente, desde o desenvolvimento até a produção, e facilitar a vida de quem precisa lidar com diferentes configurações de rede ou segurança, além de ajudar em automações.

joelsonm commented 5 months ago

Proposta de Melhoria: Autenticação Automática com Token

Introduzir uma maneira de fazer login automaticamente usando um token, ideal para automatizar processos em pipelines, onde não dá pra interagir manualmente.

Sugestão de Implementação:

Adicionar um argumento --token que você pode usar para passar seu token de autenticação quando for executar a CLI:

mgc auth login --token seu-token-aqui

Impacto Esperado:

Todas essas mudanças vão tornar a CLI mais amigável e fácil de usar em qualquer ambiente, desde o desenvolvimento até a produção, e facilitar a vida de quem precisa lidar com diferentes configurações de rede ou segurança, além de ajudar em automações.

Preciso disso nesse momento, estou montando uma pipeline no github actions, mas estou bloqueado por conta de autenticação de CLI, vou ter que fazer via kube config.

caiomarcatti12 commented 5 months ago

Estamos ai no aguardo, @joelsonm

publi0 commented 5 months ago

Estamos ai no aguardo, @joelsonm

Estamos trabalhando nessa feature, mais novidades em breve :)

antonionovaesjr commented 5 months ago

Tenta usar o mgc auth login --headless e com a config em mãos, configurar o $HOME/.config/mgc/default/auth.yaml

Screenshot_20240617_183817 Screenshot_20240617_183527

joelsonm commented 5 months ago

Tenta usar o mgc auth login --headless e com a config em mãos, configurar o $HOME/.config/mgc/default/auth.yaml

Screenshot_20240617_183817 Screenshot_20240617_183527

Opa @antonionovaesjr, pelo que a equipe da MGC me passou, esse token expira, ou seja, para fins de CI/CD é inviável.

antonionovaesjr commented 4 months ago

Vamos trocar experiências https://t.me/openmagalucloud

antonionovaesjr commented 4 months ago

@joelsonm saiu feature nova que pode te ajudar

https://github.com/MagaluCloud/mgccli/releases/tag/v0.19.3

https://docs.magalu.cloud/docs/terraform/how-to/auth

antonionovaesjr commented 4 months ago

@publi0 uma possibilidade em usar método semelhante da AWS quando usa sso, o Cli da AWS tem um mecanismo de confiar no dispositivo após uma autenticação válida, após isso o refresh do token eh automático

caiomarcatti12 commented 4 months ago

Vou realizar um teste nessa nova feature e te respondo em breve.

Estarei avaliando a usabilidade, pois lancando diretamente no terraform, nao tenho a mesma flexibilidade do cli

caiomarcatti12 commented 4 months ago

Muito obrigado

joelsonm commented 4 months ago

@joelsonm saiu feature nova que pode te ajudar

https://github.com/MagaluCloud/mgccli/releases/tag/v0.19.3

https://docs.magalu.cloud/docs/terraform/how-to/auth

Opa @antonionovaesjr, vou dar uma olhada nisso, hoje estou acessando o k8s através do kube config, criei um secret no git action com o yaml. Ta rolando haha

geffersonFerraz commented 4 months ago

@caiomarcatti12 a CLI ainda não foi lapidada para pleno funcionamento dentro de containers. Porém, fizemos a inclusão de uma variavel de ambiente MGC_LISTEN_ADDRESS que permite a alteração do ip que será feito o listen do callback.

Aguardo seu feedback para que possamos melhorar a CLI =) Att. Gefferson Ferraz DEV MGC CLI/TF