Python脚本修改阿里云的访问控制列表的方法
作者:李永峰Billy 发布时间:2022-06-19 10:31:18
标签: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 也很完善了,推荐使用。
#!/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


猜你喜欢
- 本文通过调取高德行政区划查询接口,获取最新的数据信息(省、市、区、经纬度、行政级别、城市编码、行政编码等),并通过mysql.connect
- 一、背景:在平时工作中有遇到端口检测,查看服务端特定端口是否对外开放,常用nmap,tcping,telnet等,同时也可以利用站长工具等w
- 1 Series线性的数据结构, series是一个一维数组Pandas 会默然用0到n-1来作为series的index, 但也可以自己指
- 基于Python中求和函数sum的用法详解今天在看《集体编程智慧》这本书的时候,看到一段Python代码,当时是百思不得其解,总觉得是书中排
- 因DWS内核目前支持的线程数很少,个人门户首页打开后,如果并发请求加载的模块数过多,很容易导致DWS崩溃,故而给之前写的AJAX类加了个顺序
- 人民币和美元是世界上通用的两种货币之一,写一个程序进行货币间币值转换,其中:人民币和美元间汇率固定为:1美元 = 6.78人民币。程序可以接
- Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE
- 前言为了上班摸鱼方便,今天自己写了个爬取笔趣阁小说的程序。好吧,其实就是找个目的学习python,分享一下。一、首先导入相关的模块impor
- SQL Server数据库用视图来处理复杂的数据查询关系是本文我们主要要介绍的内容,该内容是这样想到的:在辅助教务系统那块的时候,我做的一个
- Python(发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]n.蟒蛇,巨蛇 ),是一种面向对象的解释性的计算机
- 前言在linux有个命令叫做md5sum,能生成文件的md5值,一般情况下都会将结果记录到一个文件中用于校验使用,比如会这样使用:[craz
- 写在前面vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,computed等常用选项使用频率、使用先后上
- 前言环境搭建可查看Python人脸识别微笑检测数据集可在https://inc.ucsd.edu/mplab/wordpress/index
- Python自动化办公之删除重复的视频文件获取所有文件路径import osimport filecmpfile_list=[]new_li
- 前言大家都知道,Sublime Text 安装插件一般从 Package Control 中直接安装即可,当我安装 node js 插件时候
- 这是我的第一个真正意思上的自动化脚本。1、练习的测试用例为:打开百度首页,搜索“胡歌”,然后检索列表,有无“胡歌的新浪微博”这个链接 2、在
- 本文实例讲述了Python切片操作。分享给大家供大家参考,具体如下:我们基本上都知道Python的序列对象都是可以用索引号来引用的元素的,索
- 解决步骤:1、先打开一个cmd2、cd到你的exe文件目录3、输入 .\***.exe来源:https:
- 引子之前在学习Django时,对状态保持这个概念很模糊,不知道怎么去保持,通过什么去实现保持都不太清楚;稍微花了一点时间,把状态保持的基本概
- 如下所示:#coding=utf-8#方式一print('*'*20 + '方式一' + '*