一个puppet enc,它根据节点的aws ec2元数据分配节点。

puppet-enc-ec2的Python项目详细描述


一个puppet enc,它根据节点的aws ec2标签分配节点。此外,所有 EC2标记可用作puppet的受信任顶级变量 ec2_tag_前缀。

问题摘要

过去,我使用ec2tagfacts模块对aws中的puppet节点进行分类 EC2号。这很好!puppet代理使用 模块,它们将标记作为不可信的事实报告给傀儡主机。这些 企业节点分类器可以使用事实将类分配给 节点。

例如,我在ec2中创建了一个EnvironmentRole标记,它们是 由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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在jetty请求日志中添加milliscond字段?   java在使用Scanner类从文件读取信息时遇到问题   为什么。类不适用于泛型类型?   SQLite插入上的java空指针异常   java能告诉我们Guava缓存是在禁用统计数据的情况下构建的吗?   java在应用程序中使用常量   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java如何在jtable中更新jprogress栏   java是比较给定日期和当前日期(在给定时区中没有时间段)的最佳方法   安卓代码中的java错误   java无法访问实体类中的字段   java如何在tomcat中处理三个JDBC连接池?   java无法使用Spring Security保护AngularJS页面   如何在没有TCP/IP协议栈的情况下用Java发送以太帧