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

 更新时间:2019年03月08日 10:34:37   作者:李永峰Billy  
这篇文章主要介绍了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()

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

相关文章

  • pytest配置文件pytest.ini的具体使用

    pytest配置文件pytest.ini的具体使用

    本文主要介绍了pytest配置文件pytest.ini的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Python+Matplotlib实现给图像添加文本标签与注释

    Python+Matplotlib实现给图像添加文本标签与注释

    这篇文章主要为大家分享一下如何使用python+matplotlib给绘制的图像添加文本标签与注释。文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-04-04
  • Python+matplotlib实现饼图的绘制

    Python+matplotlib实现饼图的绘制

    Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。本文将利用Matplotlib库绘制饼图,感兴趣的可以了解一下
    2022-03-03
  • 基于python3 类的属性、方法、封装、继承实例讲解

    基于python3 类的属性、方法、封装、继承实例讲解

    下面小编就为大家带来一篇基于python3 类的属性、方法、封装、继承实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • python 使用plt画图,去除图片四周的白边方法

    python 使用plt画图,去除图片四周的白边方法

    今天小编就为大家分享一篇python 使用plt画图,去除图片四周的白边方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • pytorch打印网络结构的实例

    pytorch打印网络结构的实例

    今天小编就为大家分享一篇pytorch打印网络结构的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Pytho的HTTP交互httpx包模块使用详解

    Pytho的HTTP交互httpx包模块使用详解

    Python 的 httpx 包是一个用于 HTTP 交互的一个优秀且灵活的模块。本文进行详细的讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • python OpenCV学习笔记实现二维直方图

    python OpenCV学习笔记实现二维直方图

    本篇文章主要介绍了python OpenCV学习笔记实现二维直方图,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Python使用requests及BeautifulSoup构建爬虫实例代码

    Python使用requests及BeautifulSoup构建爬虫实例代码

    这篇文章主要介绍了Python使用requests及BeautifulSoup构建爬虫,介绍了具体操作步骤和实例代码等相关内容,小编觉得还是挺不错的,这里分享给大家,需要的朋友可以参考下
    2018-01-01
  • 使用python实现对元素的长截图功能

    使用python实现对元素的长截图功能

    这篇文章主要介绍了用python实现对元素的长截图功能,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-11-11

最新评论