Amazon-Ec2

如何在 Ansible 中使用 AWS EC2 Iam 角色

  • February 9, 2017

我在分配有 Iam 角色的 EC2 實例上執行 Ansible。我正在執行這個劇本:

$ 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

使用 -vvv 執行它會提供以下錯誤消息:

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

根據文件,帶有 boto 的 Ansible 應該能夠獲得 EC2 實例角色。

到目前為止,我有:

  • 嘗試了文件,這意味著它應該可以正常工作。
  • 已驗證我的 boto 版本是否足夠新(boto 2.42)
  • 已驗證 EC2 實例角色具有正確的權限(aws s3 cp s3://mybucket/ec2.py /tmp/ec2.py工作正常)
  • 已驗證 EC2 實例憑證可通過curl http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access

這個已回答的問題和文件表明這是可能的。

我可以在不直接將實例憑據提供給 boto/ansible 的情況下完成此操作嗎?如果是,如何。文件似乎有點缺乏。

經過更多的調試和試驗,我發現問題的原因是 Ansible S3 模組中的一個錯誤。

我在原始問題中引用的 ansible playbook 僅適用於 IAM 角色除了GetObject權限之外還具有**ListBucket權限的情況。

我遇到了完全相同的問題。我發現如果我通過 ansible playbook 提供 AWS 訪問密鑰 ID 和秘密訪問密鑰,它將工作並從 S3 下載對象。使用內聯提供的鍵將其作為 ansible 命令執行也可以。因此,“找不到源儲存桶”消息具有誤導性,這是由於 Ansible 無法使用 IAM 角色。

Ansible GitHub中有一張 bug 票(我猜是同一作者打開的),但仍未解決。

引用自:https://serverfault.com/questions/819239