一个puppet enc,它根据节点的aws ec2元数据分配节点。
puppet-enc-ec2的Python项目详细描述
一个puppet enc,它根据节点的aws ec2标签分配节点。此外,所有 EC2标记可用作puppet的受信任顶级变量 ec2_tag_前缀。
问题摘要
过去,我使用ec2tagfacts模块对aws中的puppet节点进行分类 EC2号。这很好!puppet代理使用 模块,它们将标记作为不可信的事实报告给傀儡主机。这些 企业节点分类器可以使用事实将类分配给 节点。
例如,我在ec2中创建了一个Environment和Role标记,它们是 由puppet代理报告并用于将节点分配给匹配的 木偶环境和角色类。
这种方法有几个问题:
- 必须为每个ec2实例分配读取其自身标记的权限,并且 因此,任何其他ec2实例的标记
- 托管代理可以伪造ec2标记事实来检索的配置 以及其他类或环境
- 当使用puppet企业控制台时,分类组必须是 为每个环境中的每个角色创建
此解决方案可缓解以下问题:
- 只有傀儡大师需要权限才能读取标记
- ec2标签是由enc作为顶级变量提供的,不能是 由代理欺骗,因此更安全
- 在企业控制台中不需要其他配置
用法
这个enc假设您正在使用Roles and Profiles范式,并打算 为每个节点分配一个角色类,前缀为role::。
每个托管EC2实例必须分配以下EC2标记:
- Environment-要分配的傀儡环境(默认值:production)
- Role-要分配的角色类,不包括role::前缀
安装
使用以下命令在傀儡主机上安装分类器:
$ pip install puppet-enc-ec2 # or $ curl -o /usr/local/bin/puppet-enc-ec2 \ https://raw.githubusercontent.com/cavaliercoder/puppet-enc-ec2/master/bin/puppet-enc-ec2 $ chmod +x /usr/local/bin/puppet-enc-ec2
配置puppet master以使用中的可执行节点分类器 puppet.conf如下:
[master]node_terminus=exec external_nodes = /usr/local/bin/puppet-enc-ec2
傀儡主机还需要应用以下IAM策略,以便 查询ec2 api获取实例元数据:
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["ec2:DescribeInstances"],"Resource":"*"}]}
有关安装自定义enc的信息,请参阅: https://puppet.com/docs/puppet/latest/nodes_external.html
配置
该脚本使用amazon aws sdk(boto3)连接到aws。sdk必须 配置凭据以连接到aws api。有关说明,请参见Boto3 documentation。
此外,应该通过修改 编写脚本,或设置AWS_DEFAULT_REGION环境变量。
示例
# test the classifier for an EC2 Instance
$ puppet-enc-ec2 i-deadbeefcafebabe
---
classes:
role::web_server:
environment: production
parameters:
ec2_tag_name: WebServer
ec2_tag_description: Web Application Server
ec2_tag_environment: production
ec2_tag_role: web_server
ec2_tag_aws_cloudformation_logical_id: WebServer
ec2_tag_aws_cloudformation_stack_id: arn:aws:cloudformation:us-east-1:123456789000:stack/cf-web-server/0f7b6bb0-9d1a-11e7-848e-50fa575f68fe
ec2_tag_aws_cloudformation_stack_name: cf-web-server
ec2_tags:
Name: WebServer
Description: Web Application Server
Environment: production
Role: web_server
aws:cloudformation:logical-id: WebServer
aws:cloudformation:stack-id: arn:aws:cloudformation:us-east-1:123456789000:stack/cf-web-server/0f7b6bb0-9d1a-11e7-848e-50fa575f68fe
aws:cloudformation:stack-name: cf-web-server