Eu tenho um host do EC2 Ubuntu, onde tenho uma única conta de usuário responsável por executar diferentes tarefas em momentos diferentes. Cada tarefa requer permissões específicas representadas por uma função correspondente do IAM (eu as chamo de "funções de perfil"). A ideia é conceder a esse usuário uma permissão para assumir essas funções, quando necessário.
Por enquanto, a configuração ~/.aws/credentials
é a seguinte:
[default]
aws_access_key_id = XXX
aws_secret_access_key = YYY
[profile1]
role_arn = arn:aws:iam::XXXXXXXXXX:role/role-for-profile1
source_profile = default
[profile2]
role_arn = arn:aws:iam::XXXXXXXXXX:role/role-for-profile2
source_profile = default
...
[profileN]
role_arn = arn:aws:iam::XXXXXXXXXX:role/role-for-profileN
source_profile = default
O usuário em default
profile tem uma única permissão: para assumir qualquer função que comece com role-for-profile
. O JSON da política é o seguinte:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1494333413000",
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Resource": [
"arn:aws:iam::XXXXXXXXXX:role/role-for-profile*"
]
}
]
}
Assim, qualquer aplicativo que precise acessar serviços específicos da AWS para executar uma tarefa específica (não importa se usa módulos AWS CLI, Boto ou Ansible, ou qualquer outro) pode apenas especificar um nome de perfil e assumir o requisito função de perfil de forma transparente.
Agora, minha preocupação é: como isso está sendo executado em um host do EC2, não preciso colocar explicitamente nenhuma credencial nesse host. Em teoria, eu poderia anexar a função "mestre" do IAM diretamente ao host do EC2, em vez de criar um usuário, concedendo a permissão de troca de função e explicitamente colocando suas credenciais em default
profile.
No entanto, não consigo fazer isso, pois o parâmetro source_profile
é obrigatório. Alguém tem uma ideia, como eu poderia autorizar o host do EC2 assumir papéis sem dar credenciais? Em outras palavras, quero que o host autentique por princípio "algo que eu sou" (uma instância do EC2 com uma determinada função do IAM), não "algo que eu conheço" (chave de acesso e chave secreta fornecidas explicitamente por um usuário do IAM). p>
UPDATE. Encontrou algumas solicitações de recursos - parece que isso ainda não é suportado: (
UPDATE2. Parece que preciso esclarecer o propósito dessa configuração. Eu tenho scripts diferentes que são executados nos mesmos hosts (podem estar em paralelo). Cada script requer um conjunto específico de permissões. O que eu quero alcançar é que cada script tenha apenas este conjunto de permissões, e não mais que isso. Na minha opinião, a melhor maneira de conseguir isso é a seguinte:
- No nível do host, não há permissões, exceto uma permissão para assumir várias funções específicas.
- Quando um script começa a funcionar, ele precisa assumir uma função correspondente para obter as permissões necessárias.
- Ao mesmo tempo, não quero colocar o papel ARN no script. Em vez disso, gostaria de definir vários perfis em
~/.aws/credentials
, cada um definido para assumir uma função específica.
Não tenho problemas com os dois primeiros itens. No entanto, a implementação do terceiro requer que eu crie um perfil "padrão" que outros perfis usarão como referência, e esse perfil "padrão" por algum motivo precisa ter as credenciais de um usuário. O que eu gostaria é de me referir à função anexada à instância do EC2, onde todas essas coisas estão sendo executadas.