准備工作
本機操作系統:CentOS7
python版本:python2.7.5
還需要准備如下信息:
一個雲賬號、Access Key ID、
Access Key Secret、
安全組ID、Region ID(如cn-shanghai)
1 安裝阿里雲python SDK
1 pip install aliyun-python-sdk-ecs
2 需求分析
我們供應商的開發人員經常需要訪問我們的阿里雲ECS資源,我們要根據供應商的ip添加相應的入方向安全組策略。
但是供應商的外網ip經常變化,幾乎每天都要添加新的安全組策略並刪掉舊的策略,在阿里雲平台上執行此類操作很繁瑣、低效。
所以需要使用python來簡化操作,運行腳本就可以實現添加和刪除安全組規則的操作。
3 腳本說明
3.1 增加規則的腳本
#!/usr/bin/python # -*- coding: utf-8 -*- from aliyunsdkcore.client import AcsClient from aliyunsdkecs.request.v20140526 import AuthorizeSecurityGroupRequest import sys import json class AliGroup: def __init__(self, AccessKey, AccessSecret, RegionId): self.AccessKey = AccessKey self.AccessSecret = AccessSecret self.RegionId = RegionId def client(self): """用於創建AcsClient實例 """ client = AcsClient(self.AccessKey, self.AccessSecret, self.RegionId) return client def authorizeSecurityGroupRequest(self, PortRange, SourceCidrIp, Priority=1, IpProtocol='tcp', SecurityGroupId='your-securitygroup-id'): """用於添加安全組規則 """ #創建AuthorizeSecurityGroupRequest實例 request = AuthorizeSecurityGroupRequest.AuthorizeSecurityGroupRequest() #設置安全組ID request.set_SecurityGroupId(SecurityGroupId) #設置協議,比如TCP或者UDP request.set_IpProtocol(IpProtocol) #設置端口范圍 request.set_PortRange(PortRange) #如果存在源ip,則設置源ip if SourceCidrIp: request.set_SourceCidrIp(SourceCidrIp) #設置優先級 request.set_Priority(Priority) #設置規則的動作為接受 request.set_Policy('accept') #設置接收數據格式為json request.set_accept_format('json') return request if __name__ == '__main__': #AliGroup類實例化 ali = AliGroup("your-access-key-id", "your-access-key-secret", "your-region-id") #創建AcsClient實例 clt = ali.client() #添加安全組規則,由於優先級、協議和安全組ID已經設置默認參數,所以只需要在運行腳本時輸入端口范圍和源ip兩個參數 add = ali.authorizeSecurityGroupRequest(sys.argv[1], sys.argv[2]) #打印輸出 res = clt.do_action(add) print res
3.2 刪除規則的腳本
#!/usr/bin/python # -*- coding: utf-8 -*- from aliyunsdkcore.client import AcsClient from aliyunsdkecs.request.v20140526 import RevokeSecurityGroupRequest import sys import json class AliGroup: def __init__(self, AccessKey, AccessSecret, RegionId): self.AccessKey = AccessKey self.AccessSecret = AccessSecret self.RegionId = RegionId def client(self): """用於創建AcsClient的實例 """ client = AcsClient(self.AccessKey, self.AccessSecret, self.RegionId) return client def revokeSecurityGroupRequest(self, PortRange, SourceCidrIp, Priority=1, IpProtocol='tcp', SecurityGroupId='your-securitygroup-id'): """刪除安全組規則 """ request = RevokeSecurityGroupRequest.RevokeSecurityGroupRequest() request.set_SecurityGroupId(SecurityGroupId) request.set_IpProtocol(IpProtocol) request.set_PortRange(PortRange) if SourceCidrIp: request.set_SourceCidrIp(SourceCidrIp) request.set_Policy('accept') request.set_accept_format('json') return request if __name__ == '__main__': ali = AliGroup("your-access-key-id", "your-access-key-secret", "your-region-id") clt = ali.client() rem = ali.revokeSecurityGroupRequest(sys.argv[1], sys.argv[2]) res = clt.do_action(rem) print res
4 運行結果
4.1 增加規則
參數說明:
python后面第一個參數是腳本名稱;
第二個參數是端口范圍,一定要以"source-port/end-port"這種形式來寫,這里以8282/8282為例;
第三個參數是源ip,這里以112.115.115.58為例。
運行結果如下:
雲平台上查看結果,也可以看到增加的規則:
4.2 刪除規則
運行結果如下:
雲平台上查看結果,也可以看到刪除的規則消失了,這里就不展示了。