Amazon ec2 配置服务器时了解EC2凭据
我正在使用Ansible来配置EC2服务器。以下是到目前为止我得到的信息:Amazon ec2 配置服务器时了解EC2凭据,amazon-ec2,provisioning,ansible,key-pair,Amazon Ec2,Provisioning,Ansible,Key Pair,我正在使用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 instan
- 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控制台中看到,我的密钥是我正在运行的实例(ansible服务器)的密钥名称,并且我知道access\u密钥和secret\u密钥是正确的
我认为这更多的是我不了解密钥名/密钥对及其工作原理/安装方法,而不是与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
令人尴尬的是,结果它给了我一个错误的用户。切换到具有权限的正确用户,瞧,它成功了。保留问题以获得下面有用的答案。错误
您无权执行此操作。
是在AWS IAM
中分配给您的访问权限的结果。我不确定ansible部分,但是,请检查AWS帐户中您的用户名允许/拒绝的权限/策略
另外,您可以尝试从AWS控制台启动一个实例,您也会在那里收到类似的错误
local_action:
module: ec2
ec2_access_key: ***
ec2_secret_key: ***
这与所说的有所不同。以下是正确的密钥名称
local_action:
module: ec2
aws_access_key: ***
aws_secret_key: ***
你能发一份完整的日志吗?您是否尝试过使用
-vvv
运行playbook以获得更多调试输出?@j0nes-添加了由ec2\u access\u key和ec2\u secret\u key定义的AWS IAM
帐户的登录信息?您拥有的访问/密钥与特定IAM用户(帐户)绑定。因此,找出这些访问/密钥属于AWS IAM users中的哪个用户,然后找出授予/拒绝该用户的权限。本以为会这样,但结果相同。@mtyson您应该将我的答案取消标记为解决问题,并将其作为答案“令人尴尬的是,结果它给了我一个错误的用户。切换到具有权限的正确用户,瞧,成功了。“occam的剃须刀肯定指向了这个方向。不可能,你的答案是必要的,如果不够的话。如果没有更改,我的配置将无法工作。如果可以,我会标记两个答案:)