使用阿里云Python SDK管理ECS安全组

时间:2024-01-24 10:34:28

 

准备工作

本机操作系统:CentOS7

python版本:python2.7.5

还需要准备如下信息:

一个云账号、Access Key ID、Access Key Secret、安全组ID、Region ID(如cn-shanghai)

 

1 安装阿里云python SDK

1 pip install aliyun-python-sdk-ecs

2 需求分析

我们供应商的开发人员经常需要访问我们的阿里云ECS资源,我们要根据供应商的ip添加相应的入方向安全组策略。

但是供应商的外网ip经常变化,几乎每天都要添加新的安全组策略并删掉旧的策略,在阿里云平台上执行此类操作很繁琐、低效。

所以需要使用python来简化操作,运行脚本就可以实现添加和删除安全组规则的操作。

3 脚本说明

3.1 增加规则的脚本

#!/usr/bin/python
# -*- coding: utf-8 -*-

from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526 import AuthorizeSecurityGroupRequest
import sys
import json

class AliGroup:

    def __init__(self, AccessKey, AccessSecret, RegionId):
        self.AccessKey = AccessKey
        self.AccessSecret = AccessSecret
        self.RegionId = RegionId

    def client(self):
        """用于创建AcsClient实例
        """
        client = AcsClient(self.AccessKey, self.AccessSecret, self.RegionId)
        return client

    def authorizeSecurityGroupRequest(self, PortRange, SourceCidrIp, Priority=1, IpProtocol=\'tcp\', SecurityGroupId=\'your-securitygroup-id\'):
        """用于添加安全组规则
        """
        #创建AuthorizeSecurityGroupRequest实例
        request = AuthorizeSecurityGroupRequest.AuthorizeSecurityGroupRequest()
        #设置安全组ID
        request.set_SecurityGroupId(SecurityGroupId)
        #设置协议,比如TCP或者UDP
        request.set_IpProtocol(IpProtocol)
        #设置端口范围
        request.set_PortRange(PortRange)
        #如果存在源ip,则设置源ip
        if SourceCidrIp:
            request.set_SourceCidrIp(SourceCidrIp)
        #设置优先级
        request.set_Priority(Priority)
        #设置规则的动作为接受
        request.set_Policy(\'accept\')
        #设置接收数据格式为json
        request.set_accept_format(\'json\')
        return request


if __name__ == \'__main__\':
    #AliGroup类实例化
    ali = AliGroup("your-access-key-id", "your-access-key-secret", "your-region-id")
    #创建AcsClient实例
    clt = ali.client()
    #添加安全组规则,由于优先级、协议和安全组ID已经设置默认参数,所以只需要在运行脚本时输入端口范围和源ip两个参数
    add = ali.authorizeSecurityGroupRequest(sys.argv[1], sys.argv[2])
    #打印输出
    res = clt.do_action(add)
    print res

3.2 删除规则的脚本

#!/usr/bin/python
# -*- coding: utf-8 -*-

from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526 import RevokeSecurityGroupRequest
import sys
import json

class AliGroup:
    def __init__(self, AccessKey, AccessSecret, RegionId):
        self.AccessKey = AccessKey
        self.AccessSecret = AccessSecret
        self.RegionId = RegionId

    def client(self):
        """用于创建AcsClient的实例
        """
        client = AcsClient(self.AccessKey, self.AccessSecret, self.RegionId)
        return client

    def revokeSecurityGroupRequest(self, PortRange, SourceCidrIp, Priority=1, IpProtocol=\'tcp\', SecurityGroupId=\'your-securitygroup-id\'):
        """删除安全组规则
        """
        request = RevokeSecurityGroupRequest.RevokeSecurityGroupRequest()
        request.set_SecurityGroupId(SecurityGroupId)
        request.set_IpProtocol(IpProtocol)
        request.set_PortRange(PortRange)
        if SourceCidrIp:
            request.set_SourceCidrIp(SourceCidrIp)
        request.set_Policy(\'accept\')
        request.set_accept_format(\'json\')
        return request


if __name__ == \'__main__\':
    ali = AliGroup("your-access-key-id", "your-access-key-secret", "your-region-id")
    clt = ali.client()
    rem = ali.revokeSecurityGroupRequest(sys.argv[1], sys.argv[2])
    res = clt.do_action(rem)
    print res

4 运行结果

4.1 增加规则

参数说明:

python后面第一个参数是脚本名称;

第二个参数是端口范围,一定要以"source-port/end-port"这种形式来写,这里以8282/8282为例;

第三个参数是源ip,这里以112.115.115.58为例。

 

运行结果如下:

云平台上查看结果,也可以看到增加的规则:

4.2 删除规则

 运行结果如下:

云平台上查看结果,也可以看到删除的规则消失了,这里就不展示了。