阿里云负载均衡白名单自动修改脚本

本文介绍如何使用Python脚本自动将公司公网IP添加到阿里云负载均衡SLB的白名单中,以实现对内部系统的远程管理。通过定时执行脚本,简化了频繁更改白名单的过程。
部署运行你感兴趣的模型镜像

一、应用场景

公司服务器使用阿里云,有很多后台管理系统如kibana、jenkins、Apollo配置中心等应用。为了安全,这些系统是无法从互联网访问的,为了方便管理,使用了阿里云的 负载均衡+白名单 的技术方案,这样就可以从公司通过互联网访问这些管理系统了。但公司上网IP经常变化,每次手动添加白名单很不方便。为了解决此问题,写了个脚本可以自动把当前公网IP添加到白名单中。通过定时任务的方式执行

二、配置访问控制RAM

  1. 登录:https://ram.console.aliyun.com/

  2. 策略管理 -> 自定义策略

  3. 新建授权策略:

    • 名称:AliyunSLBAddAclOnly

    • 备注:添加SLB黑白名单

    • 策略内容:

      {
        "Version": "1",
        "Statement": [
          {
            "Action": "slb:AddAccessControlListEntry",
            "Resource": "*",
            "Effect": "Allow"
          }
        ]
      }
      
  4. 用户管理 -> 新建用户。

  5. 新建用户,并生成 AccessKey,注意保存好子用户AccessKeyAccessSecret,没记录下也没关系,可以重新生成一个。

  6. 给此用户授以 AliyunSLBAddAclOnly 权限(就是上面自定义的那条策略)

三、安装python模块

pip install aliyun-python-sdk-slb requests

四、脚本内容 aliyun_slb_acl_set.py

#!/usr/bin/env python
#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 = '<changeme>'
aliyun_access_secret = '<changeme>'
# region不清楚是不是必须和白名单在同一个区
# 在这里可以获取region:https://help.aliyun.com/document_detail/40654.html
aliyun_region = 'cn-hangzhou'
# 需要修改的ACL的ID,进入负载均衡控制台 -> 访问控制 -> 策略ID
aliyun_acl_id = ['acl-xxxxxxxxchangeme','acl-aaaaaaaachangeme2']
### 配置结束 ###


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())))

    # 发起请求
    response = clt.do_action_with_exception(request)

    print response

def getSavedIp(filename):
    '''获取已保存的IP'''
    try:
        with open(filename,'r') as f:
            return f.readline()
    except IOError,e:
        print "文件不存在"

def saveNewIp(filename,ipaddr):
    '''保存新IP'''
    with open(filename,'w') 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 aliyun_slb_acl_set.py

结果怎么样,可以云看白名单

六、其它说明

  • 如果IP地址没发生变化,则不会请求阿里云添加IP
  • 只有添加白名单功能,过期的需要手动清理
  • 监控频率在定时任务中设置
  • 参考:https://api.aliyun.com/?#product=Slb

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值