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

作者:mindg 时间:2022-03-09 11:45:09 

前言

这几年对运维人员来说最大的变化可能就是公有云的出现了,我相信可能很多小伙伴公司业务就跑在公有云上,  因为公司业务关系,我个人接触公有云非常的早,大概在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在列表中加入或移除,脚本就介绍到这里,欢迎小伙伴们留言交流。

来源:https://www.mindg.cn/?p=1909

标签:python,云主机,安全组
0
投稿

猜你喜欢

  • Python计算一个给定时间点前一个月和后一个月第一天的方法

    2023-11-26 13:50:26
  • python列表排序用 sort()和sorted()的区别

    2021-11-27 10:36:20
  • np.newaxis()函数的具体使用

    2022-01-10 08:38:27
  • 浅谈视觉设计的准确性

    2007-09-18 17:59:00
  • Mysql数据库名和表名的大小写敏感性问题

    2010-06-07 14:07:00
  • python实现单机五子棋对战游戏

    2022-01-11 04:38:10
  • SQLServer 2000 升级到 SQLServer 2008 性能之需要注意的地方之一

    2012-02-25 19:44:26
  • Python定时任务APScheduler原理及实例解析

    2021-04-01 01:07:09
  • HTML文件HEAD内部标签用法浅析

    2008-07-06 20:56:00
  • asp中Access与Sql Server数据库区别总结

    2007-11-18 15:08:00
  • Python容器使用的5个技巧和2个误区总结

    2023-04-09 04:37:01
  • pandas多级分组实现排序的方法

    2022-05-06 14:16:11
  • Python实现字符串的逆序 C++字符串逆序算法

    2022-04-10 01:35:54
  • 跨浏览器实现float:center,No CSS hacks

    2008-08-22 12:59:00
  • Python内存管理实例分析

    2021-06-13 01:39:21
  • 简单实现python收发邮件功能

    2022-03-08 08:02:40
  • python实现在函数中修改变量值的方法

    2023-12-15 04:15:02
  • Python WEB应用部署的实现方法

    2022-02-18 07:34:35
  • ASP编程如何执行存储过程?

    2010-03-17 20:56:00
  • python切片(获取一个子列表(数组))详解

    2022-09-18 01:18:49
  • asp之家 网络编程 m.aspxhome.com