【问题标题】:Understanding EC2 credentials when provisioning server在配置服务器时了解 EC2 凭据
【发布时间】:2014-12-05 02:12:33
【问题描述】:

我正在使用 Ansible 来配置 EC2 服务器。到目前为止,这是我所得到的:

- name: Launch instances
      local_action:
        module: ec2
        key_name: my-key
        aws_access_key: ***
        aws_secret_key: ***
        region: us-west-1
        group: management
        instance_type: m1.small
        image: ami-8635a9b6
        count: 2
        wait: yes
      register: ec2

但我没有进行身份验证:

You are not authorized to perform this operation.

我想是因为我不完全理解凭据的工作原理。我可以在 EC2 控制台中看到 my-key 是我正在运行的实例(ansible 服务器)的密钥名称,并且我知道 access_key 和 secret_key 是正确的。

我认为这更多的是我不了解 key_name/keypair 及其工作原理/如何安装它,而不是与 ansible 直接相关的任何内容。


或者这可能与用户有更多关系。我正在以 root 身份运行脚本。


这是日志:

TASK: [Launch instances] ******************************************************
<127.0.0.1> REMOTE_MODULE ec2 image=ami-8635a9b6 ec2_secret_key=*** ec2_access_key=*** instance_type=m1.small region=us-west-1 key_name=ca-management group=management
<127.0.0.1> EXEC ['/bin/sh', '-c', 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1417702041.0-138277713680589 && echo $HOME/.ansible/tmp/ansible-tmp-1417702041.0-138277713680589']
<127.0.0.1> PUT /tmp/tmpFgUh1O TO /root/.ansible/tmp/ansible-tmp-1417702041.0-138277713680589/ec2
<127.0.0.1> EXEC ['/bin/sh', '-c', u'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1417702041.0-138277713680589/ec2; rm -rf /root/.ansible/tmp/ansible-tmp-1417702041.0-138277713680589/ >/dev/null 2>&1']
failed: [127.0.0.1 -> 127.0.0.1] => {"failed": true, "parsed": false}
Traceback (most recent call last):
  File "/root/.ansible/tmp/ansible-tmp-1417702041.0-138277713680589/ec2", line 2959, in <module>
    main()
  File "/root/.ansible/tmp/ansible-tmp-1417702041.0-138277713680589/ec2", line 1191, in main
    (instance_dict_array, new_instance_ids, changed) = create_instances(module, ec2)
  File "/root/.ansible/tmp/ansible-tmp-1417702041.0-138277713680589/ec2", line 761, in create_instances
    grp_details = ec2.get_all_security_groups()
  File "/usr/lib/python2.6/site-packages/boto/ec2/connection.py", line 2969, in get_all_security_groups
    [('item', SecurityGroup)], verb='POST')
  File "/usr/lib/python2.6/site-packages/boto/connection.py", line 1182, in get_list
    raise self.ResponseError(response.status, response.reason, body)
boto.exception.EC2ResponseError: EC2ResponseError: 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>UnauthorizedOperation</Code><Message>You are not authorized to perform this operation.</Message></Error></Errors><RequestID>f3b9044b-9f41-44dd-9d5e-b7b13215c14a</RequestID></Response>


FATAL: all hosts have already failed -- aborting

令人尴尬的是,IT 部门给了我错误的用户。切换到具有权限的正确用户,瞧,它起作用了。保留问题以获得以下有用的答案。

【问题讨论】:

  • 你能发布完整的日志吗?您是否尝试过使用 -vvvv 运行 playbook 以获得更多调试输出?
  • @j0nes - 添加了日志

标签: amazon-ec2 provisioning ansible key-pair


【解决方案1】:
  local_action:
    module: ec2
    ec2_access_key: ***
    ec2_secret_key: ***

这与the documentation 所说的不同。以下是正确的键名。

  local_action:
    module: ec2
    aws_access_key: ***
    aws_secret_key: ***

【讨论】:

  • 以为会这样,但结果相同。
  • @mtyson,您应该取消将我的答案标记为解决您的问题,并将其作为答案“令人尴尬的是,事实证明 IT 给了我错误的用户。切换到具有权限的正确用户,瞧,它起作用了。”奥卡姆的剃刀肯定指向了那个方向。
  • 没办法,你的回答是必要的,如果还不够的话。如果没有更改,我的配置将无法工作。如果可以的话,我会标记两个答案:)
【解决方案2】:

错误 You are not authorized to perform this operation. 是由 AWS IAM 中分配的访问/特权造成的。我不确定 ansible 部分,但是,请检查您的 AWS 账户中的用户名允许/拒绝哪些权限/策略。

另外,您可以尝试从 AWS 控制台启动一个实例,您也会在那里收到类似的错误。

【讨论】:

  • 那个AWS IAM账号是ec2_access_key和ec2_secret_key定义的吗?
  • 您拥有的访问/密钥与特定的 IAM 用户(账户)相关联。因此,找出这些访问/密钥属于 AWS IAM 用户中的哪个用户,然后找出授予/拒绝该用户的权限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
相关资源
最近更新 更多