Estou executando o Ansible em uma instância do EC2 com uma função IAM atribuída.
Estou executando este manual:
$ cat s3.yaml
---
- hosts: localhost
remote_user: ec2-user
tasks:
- name: download ec2.py from s3
s3:
bucket: mybucket
object: /ec2.py
dest: /tmp/ec2.py
mode: get
Executá-lo com -vvv fornece esta mensagem de erro:
fatal: [localhost]: FAILED! => {
"changed": false,
"failed": true,
"invocation": {
"module_args": {
"aws_access_key": null,
"aws_secret_key": null,
"bucket": "mybucket",
"dest": "/tmp/ec2.py",
"ec2_url": null,
"encrypt": true,
"expiry": "600",
"headers": null,
"marker": null,
"max_keys": "1000",
"metadata": null,
"mode": "get",
"object": "/ec2.py",
"overwrite": "always",
"permission": [
"private"
],
"prefix": null,
"profile": null,
"region": null,
"retries": 0,
"rgw": false,
"s3_url": null,
"security_token": null,
"src": null,
"validate_certs": true,
"version": null
},
"module_name": "s3"
},
"msg": "Source bucket cannot be found"
}
De acordo com a documentação, o Ansible with boto deve ser capaz de pegar o papel de instância do EC2.
Até agora eu tenho:
- Tentei a documentação, o que implica que ela deveria funcionar.
- Confirmei que minha versão boto é nova o suficiente (boto 2.42)
- Verificado o papel da instância do EC2 tem as permissões corretas (
aws s3 cp s3://mybucket/ec2.py /tmp/ec2.py
funciona bem)
- Verificado as credenciais da instância do EC2 estão disponíveis por meio de
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access
Esta questão foi respondida e a documentação indica que é possível .
Posso fazer isso sem disponibilizar as credenciais da instância para o boto / ansible diretamente? Se sim, como. A documentação parece um pouco deficiente.