Python脚本修改阿里云的访问控制列表的方法
需求
对于部署在阿里云上的重要系统一般是不让其他人访问的,所以会在负载均衡(SLB)上加上访问控制列表。而使用ASDL拨号上网的宽带来说一般公网IP都不会固定的,会随时变更公网IP,所以此脚本正是解决此需求。
说明
脚本运行前需要先安装aliyun-python-sdk-core和aliyun-python-sdk-slb2个sdk,并且在阿里云账户里面创建access_key和access_secret。
脚本会查询到目前的公网IP,如何创建本地一个文件将IP记录到文件里,下次执行时会将查询到的IP和文件里的对比,如果IP和文件里记录的IP不一致则将IP添加到访问控制列表里。
最后只需要在服务器里每隔一段时间执行一次此脚本就OK。
sdk下载:https://developer.aliyun.com/tools/sdk#/python
提醒
如果是重要的数据在公网传输,还是尽量使用加密传输。毕竟阿里云的SSL和IPSEC也很完善了,推荐使用。
#!/usr/bin/envpython3
#coding:utf-8
fromaliyunsdkcoreimportclient
importtime,requests
fromaliyunsdkslb.request.v20140515importAddAccessControlListEntryRequest
fromaliyunsdkcore.profileimportregion_provider
#region_provider.modify_point('slb','','slb..aliyuncs.com')
#名称:阿里云负载均衡白名单自动修改脚本
###变量配置###
#保存历史IP地址的文件名
file_save_ipaddr='ipaddr.txt'
#一些可以获取本机出口IP的API地址
ip_api_list='http://icanhazip.com,http://ident.me,http://ifconfig.me,http://ipecho.net/plain,http://whatismyip.akamai.com,http://myip.dnsomatic.com'
#SLB配置,此AccessKey只需添加ACL的权限
aliyun_access_key='xxxxxxxxx'
aliyun_access_secret='xxxxxxxxxxxxxx'
#在这里可以获取region:https://help.aliyun.com/document_detail/40654.html
aliyun_region='cn-hangzhou'
#访问列表一(acl-bp1792k8uvk11xxpgu5l)
#访问列表二(acl-bp1okd1kud9a41kyjkja)
#需要修改的ACL的ID,进入负载均衡控制台->访问控制->策略ID
aliyun_acl_id=['acl-bp1okd1kud9a41kyjkja','acl-bp1792k8uvk11xxpgu5l']
###配置结束###
defgetExitIpAddr(ip_api_list):
'''获取出口IP地址'''
url_list=str(ip_api_list).split(',')
ip=None
forurlinurl_list:
resp=requests.get(url,timeout=3)
ifresp.status_code==200:
ip=resp.text.strip()
break
returnip
defsetAcl(access_key,access_secret,region,acl_id,ip):
'''修改ACL'''
clt=client.AcsClient(access_key,access_secret,region)
#设置参数
request=AddAccessControlListEntryRequest.AddAccessControlListEntryRequest()
request.set_accept_format('json')
request.add_query_param('AclId',acl_id)
request.add_query_param('RegionId',region)
request.add_query_param('Tags','API自动添加')
request.add_query_param('AclEntrys','[{{"entry":"{ip}/32","comment":"此处是注释{d}"}}]'.format(ip=ip,d=time.strftime("%Y-%m-%d",time.localtime())))
#添加ip并添加注释
#发起请求
response=clt.do_action_with_exception(request)
print(response)
defgetSavedIp(filename):
'''获取已保存的IP'''
try:
withopen(filename,'r',encoding='utf-8')asf:
returnf.readline()
exceptIOError:
print("文件不存在")
defsaveNewIp(filename,ipaddr):
'''保存新IP'''
withopen(filename,'w',encoding='utf-8')asf:
f.write(ipaddr)
defmain():
current_ip=getExitIpAddr(ip_api_list)
saved_ip=getSavedIp(file_save_ipaddr)
print('当前IP',current_ip)
print('保存的IP',saved_ip)
ifcurrent_ip==saved_ip:
print('IP无变化')
exit(0)
else:
foracl_idinaliyun_acl_id:
setAcl(access_key=aliyun_access_key,
access_secret=aliyun_access_secret,
region=aliyun_region,
acl_id=acl_id,
ip=current_ip)
time.sleep(5)
saveNewIp(file_save_ipaddr,current_ip)
if__name__=='__main__':
main()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。