Python下如何批量給雲主機配置安全組?

2021-12-29 20:05:52 字數 3621 閱讀 8801

這幾年對運維人員來說最大的變化可能就是公有雲的出現了,我相信可能很多小夥伴公司業務就跑在公有雲上, 因為公司業務關係,我個人接觸公有雲非常的早,大概在12年左右就是開始使用亞馬遜雲,後來逐漸接觸到國內的阿里,騰訊雲等,隨著公司業務往國內發展,這幾年我們也使用了很多國內的公有雲廠商,所以在雲運維方面也積累了一些經驗,從傳統的物理機到公有雲運維,我個人認為最大的問題就是你能不能用公有雲的思路去思考去實現乙個安全穩定、可伸縮和經濟的業務構架。

雲運維是有別與傳統運維的,比如說了解公有雲的都知道安全組的概念,安全組跟防火牆功能很相似,那我的機器是要設定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.ar**)==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在列表中加入或移除,指令碼就介紹到這裡,歡迎小夥伴們留言交流。

如何選擇雲主機

一直以來,作為使用者的我們在雲主機的產品選擇上,自問了很多問題,雲主機租用 是多少 雲主機租用哪家好?等等,別忘了還有一條就是關於雲主機避免上當的問題。隨著這些年雲主機租用市場的發展,產品的多樣性也讓使用者在選擇上不好抉擇,有的時候我們會參照著別人怎麼買的,然後跟風選擇,這種很有可能選擇的產品不夠適...

Linux 批量給主機傳金鑰的指令碼

使用本指令碼需要在建立 tmp hosts 檔案,寫入所有主機資訊和密碼格式為hostname ip password bin bash 使用本指令碼需要在建立 tmp hosts檔案,寫入所有主機資訊和密碼格式為 hostname password rpm qa grep expect dev n...

Python 多程序批量管理主機

場景分析 1.運維場景新增物理機機器 需要進行登入機器進行環境標準化 2.例項 1.安裝相關支援包 pip3 install pycrypto pip3.6 install paramiko 2.遠端執行命令示例 usr bin env python36 from multiprocessing i...