python批量给云主机配置安全组
python批量给云主机配置安全组
用公有云的思路去思考去实现一个安全稳定、可伸缩和经济的业务构架,云运维是有别与传统运维的,比如说了解公有云的都知道安全组的概念,安全组跟防火墙功能很相似,那我的机器是要设置iptables还是要设置安全组呢?设置了安全组还要设置iptables吗?他们有什么区别?我相信很多人对这些有些困惑,以我个人经验(因为我接触亚马逊后就再也没有给云主机配置过iptables了),我给的建议是如果可以用安全组就不用iptables来管理机器,因为它们有本质的区别:
第一,安全组是在宿主上面的拦截,iptables是在系统层面的拦截,也就是说如果有人想攻击你,你采用的是安全组方式,这个攻击包根本就到不了你机器上。
第二,配置iptables是项复杂的工程,如果稍有不慎,后果是毁灭性的,我猜测有过2年运维经验小伙伴应该有把自己关在主机外面的经历,如果采用安全组这方面是可控的,即使有问题,你基本上也可以快速恢复。
第三,iptables是在每台服务器上写大量的重复规则,而且不可以分层去管理这些规则,安全组是按层来管理机器的安全配置,只需调整你需要改动的部分就可以实现批量去管理机器。
ok,概念就介绍到这里,接下来我们要上干货了,因为给几百台机器配置不同的安全组也是个大工程,如果你在控制台去操作,我想你会疯掉,所以这就说到如何去批量管理和操作这些安全组,这里用到了公有云提供的API,因为公有云j基本都有自己的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批量修改linux主机密码
+++++++++++++++++++++++++++++++++++++++++++标题:python批量修改Linux服务器密码时间:2019年2月24日内容:基于python实现批量修改linu ...
- <转>云主机配置OpenStack使用spice的方法
按官方文档(openstack-install-guide-yum-juno)搭建和配置的OpenStack默认使用novnc作为云主机的控制台訪问方式,假设须要配置使用GUI的操作系统,会显得比較尴 ...
- 华为云主机配置yum源
问题: 拥有华为主机,配置华为云mirrors,不走公网流量加速体验 系统: centos7.6 解决: 01.华为云mirrors https://mirrors.huaweicloud.com/ ...
- 知道网站PV流量,如何选何云主机配置带宽大小
- 腾讯云主机 MySQL 远程访问配置方法
使用腾讯云主机安装 MySQL 之后,需要通过以下步骤进行配置以实现远程访问,主要分为两大部分 一.服务器端口配置 1.如果你的云主机配置了安全组,如果没有配置安全组就可以直接跳过“步骤1”的操作,否 ...
- 阿里云apache服务器外网无法访问(配置安全组,添加80服务)
CentOS的系统 ,已经安装好了 apache php mysql 常规排错过程(ps:没耐心的童鞋请直接看最后一步,学习在阿里云控制台配置 安全组,允许 http服务) 第一步:检查apache ...
- 如何在OpenStack中对云主机类型进行重新配置
目标:很多用户在OpenStack启动一个虚拟机,选择了一个云主机配置类型,例如2CPU 4GB内存,使用了一段时间,感觉这个配置并不能满足需求,所以希望能够提高配置,那么OpeNStack的管理界面 ...
- OpenStack neutron 环境云主机使用keepalived vip + 给vip绑定浮动IP 步骤及注意事项
在openstack环境创建的多台云主机配置keepalived作主备,默认情况下无法生效,直接对云主机一张网卡配置两个IP进行测试也是同样结果,因为: 可以看到,port所在的宿主机上iptable ...
- 云主机文件系统readonly处理案例
本文由作者朱益军授权网易云社区发布. 背景 维护巡检云主机时,发现有一台运行redis的云主机状态显示维护中,登录该实例查看,系统盘变成readonly.本文简单分析该问题出现原因,并为运维人员提供常 ...
随机推荐
- 一致性hash 大众点评订单分库分表实践
井底之蛙 https://mp.weixin.qq.com/s?src=3×tamp=1543228894&ver=1&signature=uF6nV0yYseJ55 ...
- Mongo副本集的配置以及php node.js连接使用副本集
最近弄了下mongodb的副本集, 首先说下没有认证情况的副本集,相对比较简单,因为环境有限,我在同一台服务器上做了模拟. --rest参数是打开web监控页面,比如我们这里监听37017端口,则打开 ...
- 拨开障目的叶,一览CMDB庐山真面目
人们往往用"一叶障目,不见泰山"来形容一个人被局部现象所迷惑,看不到事物发展的整体脉络,从而做出一些不是十分正确的决策.小编觉得对于运维何尝不是这样呢. 大多数企业资产配置维护的现 ...
- cocos2d-x-3.0 window+eclipse Android Project 环境与开发新手教程
今天闲来没事,听说最新cocos2d-x 出新版3.0.所以来学习一下. 大致參考官方教程:http://www.cocos2d-x.org/wiki/How_to_Build_an_Android_ ...
- C#基础笔记(第九天)
1.面向过程<-->面向对象面向过程:面向的是完成这件事儿的过程,强调的是完成这件事儿的动作. 面向对象:找个对象帮你做事儿.意在写出一个通用的代码,屏蔽差异. 每个人都有姓名,性别,身高 ...
- Oracle SQL语句积累
字段合并: select EVFOUNDATIONTYPEA || EVFOUNDATIONTYPEB|| EVFOUNDATIONTYPEC ||EVFOUNDATIONTYPED as b fro ...
- 散列表Java实现
package 散列表; import java.util.Scanner; public class HashSearch { public static int data[] = {69,65,9 ...
- Java基础教程:网络编程
Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...
- ng-深度学习-课程笔记-13: 目标检测(Week3)
1 目标定位( object localization ) 目标定位既要识别,又要定位,它要做的事就是用一个框框把物体目标的位置标出来. 怎么做这个问题呢,我们考虑三目标的定位问题,假定图中最多只出现 ...
- .Ignite是什么
Ignite是什么 Apache Ignite内存数据组织是高性能的.集成化的以及分布式的内存平台,他可以实时地在大数据集中执行事务和计算,和传统的基于磁盘或者闪存的技术相比,性能有数量级的提升. ...