如何使用Ansible创建AWS ec2密钥

时间:2020-01-09 10:39:04  来源:igfitidea点击:

我想使用Ansible工具创建Amazon EC2密钥对。
是否可以使用Ansible创建AWS ec2密钥?
您需要使用Ansible的ec2_key模块。
此模块依赖python-boto 2.5或更高版本。

boto只是使用API到Amazon Web Services的python接口。
您可以将boto用于Amazon S3,Amazon EC2等服务。
简而言之,您需要与boto模块一起安装ansible。
让我们看看如何安装boto并将其与Ansbile结合使用。

步骤1在Ubuntu Linux上安装最新版本的Ansible

您必须在系统上配置PPA才能安装最新版本的ansible。
要管理从各种PPA(个人软件包存档)安装软件的存储库。
它允许您上载由Launchpad构建和发布为apt存储库的Ubuntu源程序包。
执行以下apt-get命令或apt命令:

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install software-properties-common

接下来将ppa:ansible/ansible添加到您的系统中软件来源:

$ sudo apt-add-repository ppa:ansible/ansible

更新您的存储库并安装ansible:

$ sudo apt update
$ sudo apt install ansible

安装boto:

$ pip3 install boto3

关于在CentOS/RHEL 7.x上安装Ansible的注释

您需要在CentOS和RHEL 7.x上与yum命令一起设置EPEL存储库:

$ cd /tmp
$ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ ls *.rpm
$ sudo yum install epel-release-latest-7.noarch.rpm
$ sudo yum install ansible

安装boto:

$ pip install boto3

步骤2配置Boto

您需要设置AWS凭证/API密钥。
请参阅AWS Security Credentials文档,以了解如何创建编程API密钥。
使用mkdir命令和设置API密钥创建一个名为~/.aws的目录:

$ mkdir -pv ~/.aws/
$ vi ~/.aws/credentials
[default]
aws_access_key_id = YOUR-ACCESS-KEY-HERE
aws_secret_access_key = YOUR-SECRET-ACCESS-KEY-HERE

还要设置默认的AWS区域:

$ vi ~/.aws/config

输出示例:

[default]
region = us-west-1

通过创建一个简单的名为test-boto.py的python程序,使用API测试您的Boto设置:

#!/usr/bin/python3
# A simple program to test boto and print s3 bucket names
import boto3
t = boto3.resource('s3')
for b in t.buckets.all():
    print(b.name)

如下运行:

$ python3 test-boto.py

输出示例:

theitroad-images
theitroad-backups-cbz
theitroad-backups-forum

输出确认Python-boto使用AWS API正常工作。

步骤3使用Ansible创建AWS ec2密钥

如下创建一个名为ec2.key.yml的剧本:

--
- hosts: local
  connection: local
  gather_facts: no
  tasks:
 
      - name: Create a new EC2 key
        ec2_key:
            name: theitroad-key
            region: us-west-1
        register: ec2_key_result
 
      - name: Save private key
        copy: content="{{ ec2_key_result.key.private_key }}" dest="./aws.theitroad.pem" mode=0600
        when: ec2_key_result.changed

其中:

  • ec2_key:维护ec2密钥对。
  • 名称:theitroad_key密钥对的名称。
  • region:us-west-1要使用的AWS区域。
  • register:ec2_key_result:将生成的密钥结果保存到ec2_key_result变量中。
  • copy:content =" {{ec2_key_result.key.private_key}}" dest =" ./aws.theitroad.pem" mode = 0600:将ec2_key_result.key.private_key的内容设置为名为aws.theitroad.pem的文件在当前目录中。将文件的模式设置为0600(unix文件权限)。
  • 何时:ec2_key_result.changed:仅在ec2_key_result更改为true时保存。我们不想覆盖我们的密钥文件。

您还必须创建主机文件,如下所示:

[local]
localhost

如下运行您的剧本:

$ ansible-playbook -i hosts ec2.key.yml

最后,您应该拥有一个可用于AWS EC2的名为aws.theitroad.pem的私钥。
要查看密钥,请使用cat命令:

$ cat aws.theitroad.pem

如果您有EC2 VM,请按以下方式使用它:

$ ssh -i aws.theitroad.pem user@ec2-vm-dns-name

查找有关python数据结构变量名称的信息,例如ec2_key_result.changed和ec2_key_result.key.private_key

您一定想知道我如何使用变量名,例如ec2_key_result.changed和ec2_key_result.key.private_key。
他们在某处定义吗?
从API调用返回值。
只需运行带有-v选项的ansible-playbook命令即可查看此类信息:

$ ansible-playbook -v -i hosts ec2.key.yml

如何删除金钥?

使用以下ec2-key-delete.yml:

--
- hosts: local
  connection: local
  gather_facts: no
  tasks:
 
      - name: Delete a EC2 key
        ec2_key:
            name: theitroad-key
            region: us-west-1
#  absent means delete keypair
            state: absent

如下运行:

$ ansible-playbook -i hosts ec2-key-delete.yml