当前位置:脚本大全 > > 正文

python云服务技术(Python脚本修改阿里云的访问控制列表的方法)

时间:2022-01-15 01:30:17类别:脚本大全

python云服务技术

Python脚本修改阿里云的访问控制列表的方法

需求

对于部署在阿里云上的重要系统一般是不让其他人访问的,所以会在负载均衡(SLB)上加上访问控制列表。而使用ASDL拨号上网的宽带来说一般公网IP都不会固定的,会随时变更公网IP,所以此脚本正是解决此需求。

说明

脚本运行前需要先安装aliyun-python-sdk-core 和aliyun-python-sdk-slb 2个sdk,并且在阿里云账户里面创建access_key和access_secret。

脚本会查询到目前的公网IP,如何创建本地一个文件将IP记录到文件里,下次执行时会将查询到的IP和文件里的对比,如果IP和文件里记录的IP不一致则将IP添加到访问控制列表里。
最后只需要在服务器里每隔一段时间执行一次此脚本就OK。

sdk 下载:https://developer.aliyun.com/tools/sdk#/python

提醒

如果是重要的数据在公网传输,还是尽量使用加密传输。毕竟阿里云的SSL 和IPSEC 也很完善了,推荐使用。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • #!/usr/bin/env python3
  • #coding:utf-8
  •  
  • from aliyunsdkcore import client
  • import time,requests
  • from aliyunsdkslb.request.v20140515 import AddAccessControlListEntryRequest
  • from aliyunsdkcore.profile import region_provider
  • #region_provider.modify_point('slb', '<regionId>', 'slb.<regionId>.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 配置,此 Access Key 只需添加 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']
  • ### 配置结束 ###
  •  
  • def getExitIpAddr(ip_api_list):
  •   '''获取出口IP地址'''
  •   url_list = str(ip_api_list).split(',')
  •   ip = None
  •   for url in url_list:
  •     resp = requests.get(url,timeout=3)
  •     if resp.status_code == 200:
  •       ip = resp.text.strip()
  •       break
  •   return ip
  •  
  • def setAcl(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)
  •  
  • def getSavedIp(filename):
  •   '''获取已保存的IP'''
  •   try:
  •     with open(filename,'r',encoding='utf-8') as f:
  •       return f.readline()
  •   except IOError:
  •     print("文件不存在")
  •  
  • def saveNewIp(filename,ipaddr):
  •   '''保存新IP'''
  •   with open(filename,'w',encoding='utf-8') as f:
  •     f.write(ipaddr)
  •  
  • def main():
  •   current_ip = getExitIpAddr(ip_api_list)
  •   saved_ip = getSavedIp(file_save_ipaddr)
  •   print('当前IP',current_ip)
  •   print('保存的IP',saved_ip)
  •   if current_ip == saved_ip:
  •     print('IP无变化')
  •     exit(0)
  •   else:
  •     for acl_id in aliyun_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()
  • 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    原文链接:https://blog.51cto.com/billy98/2358807

    上一篇下一篇

    猜您喜欢

    热门推荐