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 open读写文件实现脚本
Sep 06 Python
Linux下Python获取IP地址的代码
Nov 30 Python
用python记录运行pid,并在需要时kill掉它们的实例
Jan 16 Python
Python学习思维导图(必看篇)
Jun 26 Python
AI人工智能 Python实现人机对话
Nov 13 Python
TensorFlow变量管理详解
Mar 10 Python
python实现简单遗传算法
Mar 19 Python
Python3.5面向对象编程图文与实例详解
Apr 24 Python
python实现的读取网页并分词功能示例
Oct 29 Python
jupyter notebook 的工作空间设置操作
Apr 20 Python
python如何求100以内的素数
May 27 Python
Django框架请求生命周期实现原理
Nov 13 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
asp和php下textarea提交大量数据发生丢失的解决方法
2008/01/20 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
JavaScript中Function详解
2015/02/27 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
Angular CLI 使用教程指南参考小结
2019/04/10 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
Python httplib,smtplib使用方法
2008/09/06 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
python实现雨滴下落到地面效果
2018/06/21 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
Java中实现多态的机制
2015/08/09 面试题
大学生的自我鉴定范文
2014/01/21 职场文书
村委会贫困证明范本
2014/09/17 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
党员反四风学习心得体会
2016/01/22 职场文书
z-index不起作用
2021/03/31 HTML / CSS
Python如何识别银行卡卡号?
2021/06/10 Python