利用python批量给云主机配置安全组的方法教程


Posted in Python onJune 21, 2017

前言

这几年对运维人员来说最大的变化可能就是公有云的出现了,我相信可能很多小伙伴公司业务就跑在公有云上,  因为公司业务关系,我个人接触公有云非常的早,大概在12年左右就是开始使用亚马逊云,后来逐渐接触到国内的阿里,腾讯云等,随着公司业务往国内发展,这几年我们也使用了很多国内的公有云厂商,所以在云运维方面也积累了一些经验,从传统的物理机到公有云运维,我个人认为最大的问题就是你能不能用公有云的思路去思考去实现一个安全稳定、可伸缩和经济的业务构架,云运维是有别与传统运维的,比如说了解公有云的都知道安全组的概念,安全组跟防火墙功能很相似,那我的机器是要设置iptables还是要设置安全组呢?设置了安全组还要设置iptables吗?他们有什么区别?我相信很多人对这些有些困惑,以我个人经验(因为我接触亚马逊后就再也没有给云主机配置过iptables了),我给的建议是如果可以用安全组就不用iptables来管理机器,因为它们有本质的区别:

      第一,安全组是在宿主上面的拦截,iptables是在系统层面的拦截,也就是说如果有人想攻击你,你采用的是安全组方式,这个攻击包根本就到不了你机器上。

      第二,配置iptables是项复杂的工程,如果稍有不慎,后果是毁灭性的,我猜测有过2年运维经验小伙伴应该有把自己关在主机外面的经历,如果采用安全组这方面是可控的,即使有问题,你基本上也可以快速恢复。

      第三,iptables是在每台服务器上写大量的重复规则,而且不可以分层去管理这些规则,安全组是按层来管理机器的安全配置,只需调整你需要改动的部分就可以实现批量去管理机器。

ok,概念就介绍到这里,接下来我们要上干货了,因为给几百条机器配置不同的安全组也是个大工程,如果你在控制台去操作,我想你会疯掉,所以这就说到如何去管理和操作这些安全组了,因为公有云都有自己的API接口,所以调用他们的API来实现一些自动化操作事非常方便的,今天我就分享下如何批量给大量机器添加和移除安全组,脚本本身是在qcloudcli的基础上封装了一层,脚本如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*- 
 
 
import subprocess
import json
import sys
import argparse
 
def R(s):
 return "%s[31;2m%s%s[0m"%(chr(27), s, chr(27))
 
def get_present_sgid(vmid):
 descmd = '/usr/bin/qcloudcli dfw DescribeSecurityGroups --instanceId ' + vmid.strip()
 p = subprocess.Popen(descmd, shell=True, stdout=subprocess.PIPE) 
 output = p.communicate()[0]
 res = json.loads(output)
 sgid = []
 for d in res['data']:
  sid = d['sgId']
  sgid.append(str(sid))
 return sgid
 
def make_json(vmid,sgid):
 pdata = {}
 pdata["instanceId"] = vmid
 pdata["sgIds"] = sgid
 pjson = json.dumps(pdata)
 return pjson
 
def add_sgid(vmfile,newsid):
 fi = open(vmfile)
 for v in fi:
  v = v.strip()
  res = get_present_sgid(v)
  print res
  res.append(newsid)
  pjson = make_json(v,res)
  modcmd = 'qcloudcli dfw ModifySecurityGroupsOfInstance --instanceSet ' + "'[" + pjson+ "]'"
  p = subprocess.Popen(modcmd, shell=True, stdout=subprocess.PIPE)
  output = p.communicate()[0]
  print output
 
def remove_sgid(vmfile,newsid):
 fi = open(vmfile)
 for v in fi:
  v = v.strip()
  res = get_present_sgid(v)
  res.remove(newsid)
  pjson = make_json(v,res)
  modcmd = 'qcloudcli dfw ModifySecurityGroupsOfInstance --instanceSet ' + "'[" + pjson+ "]'"
  p = subprocess.Popen(modcmd, shell=True, stdout=subprocess.PIPE)
  output = p.communicate()[0]
  #print output
 
 
if __name__ == "__main__":
 parser=argparse.ArgumentParser(description='change sgid', usage='%(prog)s [options]')
 parser.add_argument('-f','--file', nargs='?', dest='filehost', help='vmidfile')
 parser.add_argument('-g','--sgid', nargs='?', dest='sgid', help='sgid')
 parser.add_argument('-m','--method', nargs='?', dest='method', help='Methods only support to add or remove')
 if len(sys.argv)==1:
  parser.print_help()
 else:
  args=parser.parse_args()
  if args.filehost is not None and args.sgid is not None and args.method is not None:
   if args.method == 'add':
    add_sgid(args.filehost, args.sgid)
   elif args.method == 'remove':
    remove_sgid(args.filehost, args.sgid)
   else:
    print R('Methods only support to add or remove')
  else:
   print R('Error format, please see the usage:')
   parser.print_help()

这个脚本支持批量增加和删除某个安全组,-f后面接一个文件,写入实例的id的列表,-g后面是要增加和删除的安全组Id,-m后面支持add 和remove操作,就是增加或删除,脚本整体思路是先找出实例的安全组列表,然后将新的安全组Id在列表中加入或移除,脚本就介绍到这里,欢迎小伙伴们留言交流。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
用python分割TXT文件成4K的TXT文件
May 23 Python
详解Python中的多线程编程
Apr 09 Python
基于Python开发chrome插件的方法分析
Jul 07 Python
python实现多层感知器
Jan 18 Python
python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)
May 30 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
python程序 创建多线程过程详解
Sep 23 Python
python 实现绘制整齐的表格
Nov 18 Python
python数值基础知识浅析
Nov 19 Python
pyqt5中动画的使用详解
Apr 01 Python
keras输出预测值和真实值方式
Jun 27 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
Jun 21 #Python
python将unicode转为str的方法
Jun 21 #Python
python版本坑:md5例子(python2与python3中md5区别)
Jun 20 #Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 #Python
Python中表达式x += y和x = x+y 的区别详解
Jun 20 #Python
回调函数的意义以及python实现实例
Jun 20 #Python
Python处理Excel文件实例代码
Jun 20 #Python
You might like
利用Ffmpeg获得flv视频缩略图和视频时间的代码
2011/09/15 PHP
php 批量替换程序的具体实现代码
2013/10/04 PHP
php数组中删除元素之重新索引的方法
2014/09/16 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
js 日期转换成中文格式的函数
2009/07/07 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
2016/11/05 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
Python 如何访问外围作用域中的变量
2016/09/11 Python
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
物业管理应届生求职信
2013/10/28 职场文书
商务会议邀请函
2014/01/09 职场文书
2014两会学习心得:时代的发展
2014/03/17 职场文书
服务标语大全
2014/06/18 职场文书
2014年平安夜寄语
2014/12/08 职场文书
小学班级口号大全
2015/12/25 职场文书
八年级英语教学反思
2016/02/15 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书