DevOps Mind
Granted: A Solução Ideal para AWS SSO Login e AWS Múltiplas Contas
No universo cada vez mais complexo da Amazon Web Services (AWS), gerenciar múltiplas contas e manter a segurança pode se tornar um desafio considerável. É aqui que entra o Granted, uma ferramenta que está mudando o jogo para profissionais DevOps/SRE e Desenvolvedores. Se você já se viu lutando com logins complicados ou perdido em um mar de credenciais, prepare-se para descobrir como o Granted simplifica o acesso à AWS, tornando o Single Sign-On (SSO) e o gerenciamento de múltiplas contas tão fácil quanto um clique, melhorando demais sua experiência com a AWS.
Tópicos
O que é o Granted?
Granted é um aplicativo de interface de linha de comando (CLI) que simplifica o acesso a funções de nuvem e permite que várias contas de nuvem sejam abertas em seu navegador da Web simultaneamente e/ou via terminal, simplificando demais o AWS SSO Login.
Os objetivos do Granted são:
- Proporcione uma experiência rápida em relação à localização e o ato de assumir roles.
- Aproveite a funcionalidade nativa do navegador para permitir que várias AWS Múltiplas contas sejam acessadas de uma só vez, identificando as abas por cor.
- Criptografar credenciais armazenadas em cache para evitar que tokens SSO de texto sem formatação sejam salvos em disco.
Resumo – Uso do Granted no AWS SSO Login
Antes de continuar a escrever este artigo, gostaria de trazer em poucas imagens o quanto é simples o uso do Granted e o quanto ele facilita a vida do SRE, pois ao falar de forma conceitual, não é possível visualizar de imediato o quanto esta ferramenta ajuda no dia a dia.
Vou trazer 2 exemplos, considerando o uso do Granted para o contexto do terminal e para o acesso a contas AWS no Browser em abas separadas, sem necessidade de ficar efetuando logoff/login a cada acesso.
Assumindo uma role no contexto do terminal
Executar o comando assume
e escolher a role que será assumida:
Mensagem confirmando que a role foi assumida com sucesso:
A partir disto, os comandos executados no terminal serão aplicados na conta desejada. Executando um comando para confirmar:
Assumindo uma role e abrindo a conta AWS no Browser
Assim como abrimos uma conta e assumimos uma role no contexto do terminal, podemos fazer uso do comando assume -c
, ele lista as roles que podemos assumir e já abre uma aba separada e colorida na conta AWS desejada, permitindo que a gente trabalhe com vários abas, em várias contas, de uma maneira super simples.
Primeiro passo é executar o comando assume -c
Após escolher a role/conta desejada, o Granted vai chamar o Browser e já vai abrir a página da AWS na conta desejada:
Cada role assumida irá adotar uma cor diferente da aba no Firefox.
Com o que o Granted trabalha?
Sistemas operacionais
Granted suporta MacOS, Linux e Windows. O suporte ao Windows é menos amplamente testado do que outras plataformas.
Atualmente Granted oferece suporte ao acesso a funções na AWS. Se você quiser ver suporte para outro provedor de nuvem, por favor abra uma issue!
Navegadores suportados
Atualmente, o Granted oferece suporte a Firefox, navegadores baseados em Chromium (como Chrome, Brave e Edge), Safari, Arc e Waterfox.
Dica importante
Recomendamos usar o Firefox com Granted, pois ele oferece a melhor experiência do usuário ao acessar vários consoles na nuvem, mesmo que não seja o seu navegador de driver diário. No Firefox, o Granted usa contêineres multi-contas para visualizar várias contas na nuvem. Várias contas na nuvem podem ser abertas na mesma janela e são codificadas por cores para fácil referência.
Para usar o Granted com o Firefox, você precisará baixar o complemento do Firefox. A extensão requer permissões mínimas e não tem acesso ao conteúdo da página da web. Você pode ler mais sobre considerações de segurança para a extensão aqui. Em navegadores baseados em Chromium, o Granted usa perfis. Cada conta na nuvem é aberta em uma janela separada.
Por que o Granted ajuda num cenário AWS Múltiplas contas(multi-account)
No domínio da computação em nuvem, a adoção das melhores práticas muitas vezes leva os profissionais da nuvem a adotar ambientes com múltiplas contas. No entanto, gerenciar e navegar por recursos em diversas contas pode apresentar desafios, especialmente ao fazer referência cruzada ou monitorar logs. O console AWS, uma ferramenta valiosa para visualização de recursos em nuvem, pode se tornar complicado nesses cenários, permitindo acesso a apenas uma conta e região por vez, por sessão do navegador.
Reconhecendo esse ponto problemático, o desenvolvimento do Granted surgiu como uma solução para aprimorar a experiência de nuvem AWS Múltiplas contas(multi-account). Em vez de abandonar o console nativo e optar por abstrações personalizadas, Granted reconhece a utilidade do console e pretende torná-lo uma ferramenta mais eficaz para profissionais de nuvem.
Um dos fatores determinantes por trás da criação do Granted foi o tratamento diferenciado das credenciais de sessão pela AWS CLI ao utilizar o AWS SSO login (Single Sign-On). Embora o AWS SSO elimine a necessidade de credenciais prolongadas do IAM, a AWS CLI armazena o token de acesso SSO em texto simples, representando um risco potencial à segurança. Em contraste, Granted oferece uma melhoria notável neste aspecto. Ele armazena com segurança o token de acesso SSO nas chaves do sistema, em vez de no disco, fornecendo uma camada adicional de proteção e facilidade de revogação do token em caso de comprometimento.
Na empresa Common Fate, o Granted foi integrado às rotinas diárias de acesso à nuvem, onde obteram um aumento significativo na produtividade. Ao simplificar o gerenciamento de recursos em diversas contas e abordar questões de segurança relacionadas aos tokens de acesso SSO, o Granted provou ser um ativo valioso para operações na nuvem.
Granted se destaca como uma ferramenta projetada para capacitar profissionais de nuvem em ambientes AWS Múltiplas Contas(multi-account). Sua ênfase na melhoria da experiência do console nativo e no aprimoramento dos recursos de segurança, especialmente no contexto do AWS SSO, torna-o uma escolha notável para quem busca otimizar seus fluxos de trabalho na nuvem sem sacrificar a conveniência ou a segurança. Eleve sua experiência na nuvem com o Granted e desbloqueie novos níveis de eficiência e confiança no gerenciamento de seus recursos na nuvem.
Instalação
A melhor forma de se aproveitar e utilizar o granted
é instalando o mesmo via asdf
.
Caso nunca tenha utilizado o asdf, segue material de apoio: https://asdf-vm.com/guide/getting-started.html
asdf install granted latest
asdf global granted 0.20.6 # ⬇️
# última versão no momento em que esse manual é escrito,
# ajuste para a sua versão após install com latest
# ajuste do alias para o assume
## bash/zsh
echo "alias assume='source \$(asdf which assume)'"|tee -a ~/.zshrc ~/.bashrc
## fish
echo "alias assume='source (asdf which assume).fish'"|tee -a ~/.config/fish/config.fish
Recomendações
- O
granted
e oassume
funcionam melhor com o Firefox - Porque? O Firefox trabalha com um conceito de contâiners, permitindo o uso de múltiplas contas AWS abertas ao mesmo tempo com o uso de duas extensões:
- Posso usar no chrome? Pode, mas não conseguirá acessar mais de uma conta ao mesmo tempo
Configuração
Após instalar o granted
utilizando o asdf
você deve ter recebido uma mensagem para adicionar um alias para um utilitário chamado assume
. Para definir o mesmo:
# crie o diretório para a config do aws caso ainda não exista
mkdir -p ~/.aws
# faz um backup caso o arquivo já exista
[ -f ~/.aws/config ] && mv ~/.aws/config ~/.aws/config.bkp.$(date '+%Y%m%d')
touch ~/.aws/config
# gere o arquivo ~/.aws/config com as credenciais existentes no SSO
granted sso populate --sso-region us-east-1 https://devopsmind.awsapps.com/start#/
# será aberta uma janela do seu navegador para autenticar na AWS
# forneça as credenciais e clique em Allow para autorizar
# e será criado o arquivo ~/.aws/config#
Ajustes
- Adicione as regiões default as credenciais necessárias. Neste caso vamos adicionar a config aos profiles:
[profile Fernando-teste/...]
[profile devops-mind-producao/...]
- Após a última linha de cada um desses profiles, adicione a seguinte configuração(para deixarmos a região de São Paulo. Ajuste de acordo com a sua necessidade):
region = sa-east-1
Assumindo credenciais
- É importante que durante a etapa de instalação você tenha criado o alias para o
assume
durante a instalação. - Sempre que executar o
assume
sem nenhum parâmetro, APÓS o setup inicial, será oferecido para escolher qual profile usar.
Setup Inicial
- Durante o primeiro uso será necessário a configuração inicial. Irei demonstrar o setup recomendado usando Firefox e containers.
- Abra o Firefox e vá para o seguinte link para instalar a primeira extensão: Open external links in a container – Get this Extension for 🦊 Firefox (en-US)
- Durante a fase de setup de uso inicial será solicitada a instalação da segunda extensão conforme abaixo:
assume
– no terminal
- Assumindo as credenciais:
ubuntu@devops-mind:~$ assume
? Please select the profile you would like to assume: Fernando-Teste/Administrator
[i] To assume this profile again later without needing to select it, run this command:
> assume Fernando-Teste/Administrator
[i] If the browser does not open automatically, please open this link: https://device.sso.us-east-1.amazonaws.com/?user_code=PSBX-RTFW
[i] Awaiting AWS authentication in the browser
[i] You will be prompted to authenticate with AWS in the browser, then you will be prompted to 'Allow'
[i] Code: PSBX-RTFW
[✔] [Fernando-Teste/Administrator](sa-east-1) session credentials will expire in 12 hours
- Usando as credenciais com o
awscli
:
ubuntu@devops-mind:~/Downloads/test-asdf$ aws eks list-clusters
{
"clusters": [
"eks-producao"
]
}
- Usando as credenciais para gerar o
~/.kube/config
ubuntu@devops-mind:~/Downloads/test-asdf$ assume Fernando-Teste/Administrator
ubuntu@devops-mind:~/Downloads/test-asdf$ aws eks --region us-east-1 update-kubeconfig --name eks-producao --alias eks-producao
[✔] [Fernando-Teste/Administrator](sa-east-1) session credentials will expire in 12 hours
Added new context eks-producao to /home/ubuntu/.kube/config
ubuntu@devops-mind:~/Downloads/test-asdf$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-172-28-0-56.ec2.internal Ready <none> 47h v1.21.14-eks-48e63af
ip-172-28-31-112.ec2.internal Ready <none> 2d4h v1.21.14-eks-48e63af
ip-172-28-46-176.ec2.internal Ready <none> 2d4h v1.21.14-eks-48e63af
assume
– no browser (console)
- Abrindo uma aba no browser para a conta
Fernando-Teste/Administrator
:
ubuntu@devops-mind:~/Downloads/test-asdf$ assume -c Fernando-Teste/Administrator
[i] use -s to open a specific service ( https://docs.commonfate.io/granted/usage/console )
[i] Opening a console for Fernando-Teste/Administrator in your browser...
- Caso seja o primeiro uso, você pode ser questionado com qual
handler
deseja operar. Lembre-se de marcar as opções:- Open links in Granted Containers
- Alwyas use this application to open ext+granted-containers links
- Open Link
- Abrindo uma aba no browser para a conta
devops-mind-producao/Administrator
diretamente no serviço RDS
ubuntu@devops-mind:~/Downloads/test-asdf$ assume -c devops-mind-producao/Administrator -s rds
[i] Opening a console for devops-mind-producao/Administrator in your browser...
Com isto, conseguimos abrir abas diferentes, em contas diferentes, sem a necessidade de alternar entre as contas de forma mais demorada.
Troubleshooting
Neste exemplo abaixo eu trago um caso onde uma instalação do Granted apresentou problemas numa máquina com MacOS.
Assume pedindo para adicionar alias ao shell profile – Configuração com ZSH + Homebrew + MacOS
Problema
Ao executar o comando assume, apresenta a mensagem para configurar o alias, ao invés do comando ser executado normalmente.
Verificado que existe um alias no arquivo .zshenv
:
░▒▓ ✔ 10:25:32 ▓▒░
░▒▓ ~ ▓▒░ assume ░▒▓ ✔ 10:25:32 ▓▒░
[i] To assume roles with Granted, we need to add an alias to your shell profile (https://docs.commonfate.io/granted/internals/shell-alias)
? Install zsh alias at /Users/fernando/.zshenv Yes
[✔] Added the Granted alias to /Users/fernando/.zshenv
[!] Shell restart required to apply changes: please open a new terminal window and re-run your command.
░▒▓ ~ ▓▒░ tail /Users/fernando/.zshenv ░▒▓ ✔ 15s 10:25:48 ▓▒░
alias assume=". assume"
░▒▓ ~ ▓▒░ ░▒▓ ✔ 10:25:56 ▓▒░
░▒▓ ~ ▓▒░
Solução
Necessário modificar o arquivo .zshenv
, comentando a linha do alias.
Deixar o alias apenas no ~/.zshrc
░▒▓ ✔ 10:31:16 ▓▒░
░▒▓ ~ ▓▒░ tail ~/.zshrc ░▒▓ ✔ 10:31:16 ▓▒░
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
. /opt/homebrew/opt/asdf/libexec/asdf.sh
alias assume='source $(asdf which assume)'
░▒▓ ~ ▓▒░
Recursos adicionais
Conclusão
Em um mundo onde a gestão eficiente e segura das contas de nuvem é crucial para o sucesso das operações de TI, o Granted se destaca como a solução ideal para AWS SSO Login e gerenciamento de múltiplas contas. Através de sua interface intuitiva e funcionalidades robustas, o Granted simplifica o processo de autenticação e acesso, eliminando a complexidade geralmente associada à gestão de várias contas AWS.
Além disso, a segurança aprimorada que o Granted oferece garante que suas credenciais e dados sensíveis estejam sempre protegidos, permitindo que as equipes de TI se concentrem em suas tarefas principais sem se preocupar com possíveis vulnerabilidades. A capacidade de automatizar e gerenciar permissões de acesso de forma centralizada não só melhora a eficiência operacional, mas também reduz significativamente o risco de erros humanos.
Em resumo, ao incorporar o Granted em sua estratégia de gerenciamento de contas AWS, você estará adotando uma abordagem moderna e eficiente que otimiza o acesso, fortalece a segurança e promove uma gestão de contas mais eficaz. Seja para pequenas empresas ou grandes corporações, o Granted oferece uma solução escalável e confiável que atende às necessidades diversas e dinâmicas do ambiente de nuvem atual.
Quer aprender mais?
Gostou do artigo? Não deixe de se inscrever na nossa newsletter para receber as últimas novidades e dicas sobre DevOps/SRE diretamente no seu e-mail. Além disso, leia nossos outros posts sobre AWS, para continuar aprimorando suas habilidades em DevOps.