Quando uma ferramenta externa precisa de entrar na sua conta da AWS há dois caminhos. O conhecido: criar um utilizador IAM e dar-lhe uma chave de acesso, que é uma palavra-passe que não caduca e que pode acabar num ficheiro de configuração, num repositório ou num e-mail. O bom: criar uma função (role) que a ferramenta assume a partir da sua própria conta da AWS. Não há chave para guardar nem para fugir; a AWS entrega credenciais temporárias que caducam sozinhas, e você pode cortar o acesso num segundo apagando a função.
Para isto a ferramenta tem de o suportar (pedir-lhe-á "acesso por função", "cross-account role" ou "ARN da função") e dar-lhe dois dados: o número da sua conta da AWS e um identificador externo (external ID). Com isso, em dez minutos está feito.
Antes de começar: o que significa cada coisa
- IAM
- O serviço da AWS que gere quem pode fazer o quê na sua conta.
- Conta da AWS
- Cada cliente da Amazon tem uma conta com um número de doze dígitos. A ferramenta externa tem a sua; você tem a sua.
- Chave de acesso
- O "utilizador e palavra-passe" para programas. Não caduca, e por isso é o que este guia evita.
- Função (role)
- Um conjunto de permissões que não pertence a ninguém em concreto: quem está autorizado "assume-o" e recebe credenciais temporárias que caducam sozinhas.
- Assumir uma função
- Pedir à AWS essas credenciais temporárias para atuar com as permissões da função durante algum tempo.
- Entidade de confiança
- Quem tem permissão para assumir a função. Aqui, a conta da AWS da ferramenta externa.
- External ID (identificador externo)
- Uma palavra-passe adicional que acompanha o pedido de assumir a função, para que só essa ferramenta, atuando por si, a possa usar.
- Política
- A lista de permissões, em formato JSON. O guia dá-lhe um exemplo.
- ARN
- O nome completo e único da função (arn:aws:iam::...). É o que dá à ferramenta.
- CloudTrail
- O registo de tudo o que acontece na sua conta da AWS: quem fez o quê e quando. Serve para ver o que a ferramenta faz.
Passo a passo
Reúna os dados do fornecedor
Anote o ID de conta da ferramenta (doze dígitos) e o external ID que lhe atribui, uma cadeia única para si. O external ID evita o chamado "problema do ajudante confuso": que outro cliente da mesma ferramenta consiga fazer com que esta use a sua função. Não o partilhe nem o reutilize.
Crie a política de permissões mínimas
Na consola do IAM, Policies, Create policy, separador JSON. Cole só as ações de que a ferramenta precisa; o fornecedor sério dá-lhe a lista exata. Por exemplo, para ver e gerir máquinas Lightsail:
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "lightsail:GetInstances", "lightsail:GetInstance", "lightsail:GetInstanceState", "lightsail:StartInstance", "lightsail:StopInstance", "lightsail:RebootInstance", "lightsail:GetInstanceSnapshots", "lightsail:CreateInstanceSnapshot" ], "Resource": "*" }] }Dê-lhe um nome reconhecível, como
PanelExterno-Maquinas. Se lhe pediremAdministratorAccess, pergunte porquê.Crie a função com a outra conta como entidade de confiança
IAM, Roles, Create role. Tipo de entidade de confiança: AWS account, opção Another AWS account, e escreva o ID de conta do fornecedor. Marque Require external ID e cole o external ID. Não marque "Require MFA": a ferramenta é um programa, não uma pessoa. Seguinte.
Anexe a política e dê nome à função
Procure a política que criou no passo 2, marque-a e continue. Nome da função: algo que diga para que serve e de quem é, por exemplo
PanelExterno-Simplio. Reveja o resumo: a política de confiança deve mostrar a conta do fornecedor e a condiçãosts:ExternalId. Crie a função.Entregue o ARN da função
Abra a função acabada de criar e copie o seu ARN, com a forma
arn:aws:iam::123456789012:role/PanelExterno-Simplio. É a única coisa de que a ferramenta precisa; cole-o onde lho pedirem. Não é um segredo em si mesmo (sem o external ID e sem estar na conta de confiança não serve de nada), mas também não é preciso publicá-lo.Verifique o acesso e o registo
A ferramenta deverá ligar-se de imediato. Para ver o que faz, no CloudTrail, histórico de eventos, filtre pelo nome da função: cada ação que execute aparece com a função como identidade. Se um dia quiser cortar o acesso, apague a função ou mude o external ID; o efeito é imediato assim que caducarem as credenciais temporárias em curso, que duram no máximo uma hora, a não ser que o tenha alargado.
O que pode correr mal
A ferramenta diz "not authorized to perform sts:AssumeRole"
Ou o ID da conta de confiança não está correto, ou o external ID não coincide, ou a ferramenta está a tentar assumir a função com um principal diferente daquele que você autorizou. Reveja o separador Trust relationships da função e compare-o letra a letra com o que o fornecedor lhe deu.
Liga-se, mas falta-lhe permissão para alguma coisa
A mensagem da AWS diz exatamente que ação falta. Acrescente-a à política do passo 2; a alteração aplica-se às chamadas seguintes sem mexer na função.
E se a ferramenta não suportar funções?
Então um utilizador IAM com permissões mínimas e uma chave de acesso é o plano B (tem o guia nesta secção). Rode a chave de vez em quando e vigie a sua "última utilização" no IAM.
Criei a função na conta errada
Com várias contas acontece. A função deve estar na conta cujos recursos quer que a ferramenta veja. Apague-a e crie-a na certa; o ARN mudará, atualize-o na ferramenta.
No Simplio
O Simplio admite a ligação por função: na ajuda mostra-lhe o ID de conta do Simplio e um external ID gerado para si, e gera-lhe a política de confiança e a de permissões marcando com caixas o que quer permitir. Cola o ARN da função e pronto: não há chave para guardar, e as credenciais que o Simplio pede à AWS caducam numa hora.
O mesmo, na AWS e no Simplio
| Na consola da AWS | No Simplio | |
|---|---|---|
| Criar a função | Política, função, entidade de confiança, external ID, ARN: 6 passos, 15 minutos sabendo o que se faz | A ajuda dá-lhe a conta, o external ID e as duas políticas já escritas: colar e copiar o ARN, 3 minutos |
| Permissões justas | Conhecer o nome de cada ação | Caixas: só ver, sem firewall, sem terminal, uma região |
| Revogar | Apagar a função no IAM | Apagar a ligação no Simplio ou a função no IAM; sem chaves para perseguir |