Granted – A maneira mais fácil de acessar sua nuvem e trabalhar com múltiplas contas

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.

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 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

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!

Atualmente, o Granted oferece suporte a Firefox, navegadores baseados em Chromium (como Chrome, Brave e Edge), Safari, Arc e Waterfox.

DICA

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 multi-contas

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 multi-contas. 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 (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 multi-contas. 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

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

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)'
░▒▓    ~ ▓▒░

Adicionar categoria

Fernando Müller Junior
Fernando Müller Junior

Eu sou o Fernando Müller, um Tech Lead SRE com 16 anos de experiência em TI, atualmente eu trabalho na Appmax, uma fintech localizada no Brasil. Apaixonado por trabalhar com arquiteturas e aplicações Cloud Native, ferramentas Open Source e tudo que existe no mundo SRE, sempre procurando se desenvolver e aprender constantemente(Lifelong learning), atuando em projetos inovadores!

Artigos: 28

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *