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


Posted in Python onMarch 08, 2019

需求

对于部署在阿里云上的重要系统一般是不让其他人访问的,所以会在负载均衡(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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python编写简单网络爬虫抓取视频下载资源
Nov 04 Python
在Python的Django框架中编写错误提示页面
Jul 22 Python
深入理解Python中字典的键的使用
Aug 19 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
Jun 28 Python
python join方法使用详解
Jul 30 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
Python接口开发实现步骤详解
Apr 26 Python
django 数据库 get_or_create函数返回值是tuple的问题
May 15 Python
用python获取txt文件中关键字的数量
Dec 24 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 Python
python实现整数的二进制循环移位
Mar 08 #Python
Python3实现的反转单链表算法示例
Mar 08 #Python
Python3实现的判断回文链表算法示例
Mar 08 #Python
python字符串循环左移
Mar 08 #Python
详解Python Matplot中文显示完美解决方案
Mar 07 #Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 #Python
Python3实现的判断环形链表算法示例
Mar 07 #Python
You might like
ajax实现无刷新分页(php)
2010/07/18 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
强制设为首页代码
2006/06/19 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
VUE饿了么树形控件添加增删改功能的示例代码
2017/10/17 Javascript
vue axios 二次封装的示例代码
2017/12/08 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
vue mounted组件的使用
2018/06/18 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
python利用装饰器进行运算的实例分析
2015/08/04 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
2019/08/06 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
2020/03/30 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
锐步英国官网:Reebok英国
2019/11/29 全球购物
应用数学自荐书范文
2013/11/24 职场文书
早餐连锁店计划书
2014/01/08 职场文书
岗位竞聘书范文
2014/03/31 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
活动经费申请报告
2015/05/15 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
信息技术国培研修日志
2015/11/13 职场文书
导游词之介休绵山
2019/12/31 职场文书
吃通javascript正则表达式
2021/04/21 Javascript
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技