《Python批量給云主機(jī)配置安全組》要點(diǎn):
本文介紹了Python批量給云主機(jī)配置安全組,希望對您有用。如果有疑問,可以聯(lián)系我們。
這幾年對運(yùn)維人員來說最大的變化可能就是公有云的出現(xiàn)了,我相信可能很多小伙伴公司業(yè)務(wù)就跑在公有云上, ?因?yàn)楣緲I(yè)務(wù)關(guān)系,我個(gè)人接觸公有云非常的早,大概在12年左右就是開始使用亞馬遜云,后來逐漸接觸到國內(nèi)的阿里,騰訊云等,隨著公司業(yè)務(wù)往國內(nèi)發(fā)展,這幾年我們也使用了很多國內(nèi)的公有云廠商,所以在云運(yùn)維方面也積累了一些經(jīng)驗(yàn),從傳統(tǒng)的物理機(jī)到公有云運(yùn)維,我個(gè)人認(rèn)為最大的問題就是你能不能用公有云的思路去思考去實(shí)現(xiàn)一個(gè)安全穩(wěn)定、可伸縮和經(jīng)濟(jì)的業(yè)務(wù)構(gòu)架,云運(yùn)維是有別與傳統(tǒng)運(yùn)維的,比如說了解公有云的都知道安全組的概念,安全組跟防火墻功能很相似,那我的機(jī)器是要設(shè)置iptables還是要設(shè)置安全組呢?設(shè)置了安全組還要設(shè)置iptables嗎?他們有什么區(qū)別?我相信很多人對這些有些困惑,以我個(gè)人經(jīng)驗(yàn)(因?yàn)槲医佑|亞馬遜后就再也沒有給云主機(jī)配置過iptables了),我給的建議是如果可以用安全組就不用iptables來管理機(jī)器,因?yàn)樗鼈冇斜举|(zhì)的區(qū)別:
第一,安全組是在宿主上面的攔截,iptables是在系統(tǒng)層面的攔截,也就是說如果有人想攻擊你,你采用的是安全組方式,這個(gè)攻擊包根本就到不了你機(jī)器上.
第二,配置iptables是項(xiàng)復(fù)雜的工程,如果稍有不慎,后果是毀滅性的,我猜測有過2年運(yùn)維經(jīng)驗(yàn)小伙伴應(yīng)該有把自己關(guān)在主機(jī)外面的經(jīng)歷,如果采用安全組這方面是可控的,即使有問題,你基本上也可以快速恢復(fù).
第三,iptables是在每臺(tái)服務(wù)器上寫大量的重復(fù)規(guī)則,而且不可以分層去管理這些規(guī)則,安全組是按層來管理機(jī)器的安全配置,只需調(diào)整你需要改動(dòng)的部分就可以實(shí)現(xiàn)批量去管理機(jī)器.
ok,概念就介紹到這里,接下來我們要上干貨了,因?yàn)榻o幾百臺(tái)機(jī)器配置不同的安全組也是個(gè)大工程,如果你在控制臺(tái)去操作,我想你會(huì)瘋掉,所以這就說到如何去批量管理和操作這些安全組,這里用到了公有云提供的API,因?yàn)楣性苆基本都有自己的API接口,所以調(diào)用他們的API來實(shí)現(xiàn)一些自動(dòng)化操作我認(rèn)為是每個(gè)使用公有云來構(gòu)架自己業(yè)務(wù)的運(yùn)維必須要學(xué)會(huì)的,今天我就分享下如何批量給大量機(jī)器添加和移除安全組,腳本本身是在qcloudcli的基礎(chǔ)上封裝了一層,腳本如下:
#!/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()
這個(gè)腳本支持批量增加和刪除某個(gè)安全組,-f后面接一個(gè)文件,寫入實(shí)例的id的列表,-g后面是要增加和刪除的安全組Id,-m后面支持add 和remove操作,就是增加或刪除,腳本整體思路是先找出實(shí)例的安全組列表,然后將新的安全組Id在列表中加入或移除,腳本就介紹到這里,歡迎小伙伴們留言交流.
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/4080.html