利用python批量給云主機(jī)配置安全組的方法教程
前言
這幾年對(duì)運(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ū)別?我相信很多人對(duì)這些有些困惑,以我個(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幾百條機(jī)器配置不同的安全組也是個(gè)大工程,如果你在控制臺(tái)去操作,我想你會(huì)瘋掉,所以這就說到如何去管理和操作這些安全組了,因?yàn)楣性贫加凶约旱腁PI接口,所以調(diào)用他們的API來實(shí)現(xiàn)一些自動(dòng)化操作事非常方便的,今天我就分享下如何批量給大量機(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在列表中加入或移除,腳本就介紹到這里,歡迎小伙伴們留言交流。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- 使用bandit對(duì)目標(biāo)python代碼進(jìn)行安全函數(shù)掃描的案例分析
- Python通過kerberos安全認(rèn)證操作kafka方式
- 線程安全及Python中的GIL原理分析
- python線程安全及多進(jìn)程多線程實(shí)現(xiàn)方法詳解
- 詳解python實(shí)現(xiàn)線程安全的單例模式
- Python簡單實(shí)現(xiàn)安全開關(guān)文件的兩種方式
- python smtplib模塊發(fā)送SSL/TLS安全郵件實(shí)例
- Python操作sqlite3快速、安全插入數(shù)據(jù)(防注入)的實(shí)例
- 詳細(xì)總結(jié)Python常見的安全問題
相關(guān)文章
將FileStorage對(duì)象高效轉(zhuǎn)換為NumPy數(shù)組的兩種實(shí)現(xiàn)方案
在Web開發(fā)(如Flask應(yīng)用)中,處理用戶上傳的圖片文件時(shí),常會(huì)遇到FileStorage對(duì)象向numpy.ndarray的轉(zhuǎn)換需求,本文將提供兩種經(jīng)過驗(yàn)證的高效方法,并深入解析其技術(shù)細(xì)節(jié)與適用場景,需要的朋友可以參考下2025-03-03
舉例講解Python中metaclass元類的創(chuàng)建與使用
在Python中我們用type函數(shù)可以動(dòng)態(tài)地創(chuàng)建一個(gè)元類,同樣也可以用__metaclass__屬性來指定一個(gè)元類,接下來我們就來具體舉例講解Python中metaclass元類的創(chuàng)建與使用2016-06-06
python docx的超鏈接網(wǎng)址和鏈接文本操作
這篇文章主要介紹了python docx的超鏈接網(wǎng)址和鏈接文本操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖
一文總結(jié)學(xué)習(xí)Python的14張思維導(dǎo)圖,本文涵蓋了Python編程的核心知識(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10

