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
0
投稿
猜你喜欢
- 使用conda安装requirement.txt的扩展包当你在GitHub上下载了代码时,可以看到有一个requirements.txt文件
- 实例如下所:import osimport xlrdimport xlwtfrom xlutils.copy import copydef
- 在pytorch框架中,关于日志的保存,其中一种方式就是借鉴使用了tensorboard的库。所以我们需要在环境中安装tensorboard
- 在我们写样式的时候,页面的CSS在经历几个版本的修改之后,可能有些样式已经用不到了,或许将某些样式更名了而原来的忘了删除,总之页面中可能存在
- PDO::queryPDO::query — 执行 SQL 语句,返回PDOStatement对象,可以理解为结果集(PHP 5 >=
- 在一开始接触PHP接触MYSQL的时候就听不少人说:“MySQL就跑跑一天几十万IP的小站还可以,要是几百万IP就不行了
- py文件为utf-8格式#!/usr/bin/env python# -*- coding:utf-8 -*-a = "syste
- 下面基础的解释一下这错误: 1:本质上的错误: object a;//a是Null对象 protected void Page_Load(o
- 本文实例讲述了Python实现对字符串的加密解密方法。分享给大家供大家参考,具体如下:需求是是要将密码存在数据库里,所以要加密解密是可逆的,
- Windows下采用PyInstall将py文件转换成exe可执行文件好不容易写完的py文件,想做成exe文件,最开始选择用py2exe,结
- 前言:循环中通过break语句会立刻终止并跳出循环语句。break就像是终止按键,不管执行到哪一步,只要遇到break,不管什么后续步骤,直
- 要说2017年什么技术最火爆,无疑是google领衔的深度学习开源框架Tensorflow。本文简述一下深度学习的入门例子MNIST。深度学
- 本文主要向大家分享了Python3调用微信企业号API发送文本消息示例的有关代码,具体如下:#!/usr/bin/env python# -
- <% SoFia_DbName="jiaoyou&qu
- 在html中关于select元素的问题在很多地方都提出过,而在前段时间的项目中,刚好遇到了关于select元素的两个小问题,这里进行一下总结
- 这篇文章主要介绍了python字符串替换re.sub()实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 在编译 PHP 时,如无特殊需要,一定禁止编译生成 CLI 命令行模式的 PHP 解析支持。可在编译时使用 –disable-CLI。一旦编
- 别误会,IE是不支持CSS3高级选择器,包括最新的IE8(详见《CSS选择器的浏览器支持》),但是CSS选择器的确是很有用的,它可以大大的简
- 通过本接口可以查询圆通快递、申通快递、ems快递、韵达快递等快递单号查询信息,无需其他额外开发,非常方便首先到www.aikuaidi.cn
- requests接口测试的介绍requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到,Req