阿里云自动化添加安全组

简介: 每次去阿里云控制台 将自己的外网IP添加为白名单操作过于繁琐,一切可以自动化的事情应该要自动化,所以我们需要一个 自动将本机外网IP添加为安全组规则的脚本。

前置条件

  • 拥有可以操作 AuthorizeSecurityGroup API 的 AccessKey

前往 AccessKey 管理 添加 accessKey。

添加一个子账号,创建 AccessKey

ram.png

给该 AccessKey 授权一个最小的权限:AuthorizeSecurityGroup,只能添加安全组的入方向规则。

ram_add_authority.png

addCustomRAM-1.png


准备好了 AccessKey,就可以开始准备脚本了。

以下提供两种方式, Python 、Golang(推荐,因为编译后看不到密码)。

代码实现:添加一条安全组入规则,支持本机IP访问 22 端口,如果希望放开所有端口,可以将 request.PortRange 的值修改为 1/65535

1. Python

1.1 安装依赖包

pip3 install aliyun-python-sdk-ecs==4.24.3


1.2 编写脚本

请替换代码中的 <accessKeyId>, <accessSecret>, <YourSecurityGroupId>, <RegionId> .

#!/usr/bin/env python#coding=utf-8importrequestsfromaliyunsdkcore.clientimportAcsClientfromaliyunsdkcore.acs_exception.exceptionsimportClientExceptionfromaliyunsdkcore.acs_exception.exceptionsimportServerExceptionfromaliyunsdkecs.request.v20140526.AuthorizeSecurityGroupRequestimportAuthorizeSecurityGroupRequestr=requests.get('https://ipw.cn/api/ip/myip')
clientIP=r.text# <accessKeyId>, <accessSecret>: 前往 https://ram.console.aliyun.com/manage/ak 添加 accessKey# RegionId:安全组所属地域ID ,比如 `cn-guangzhou`# 访问 [DescribeRegions:查询可以使用的阿里云地域](https://next.api.aliyun.com/api/Ecs/2014-05-26/DescribeRegions) 查阅# 国内一般是去掉 ECS 所在可用区的后缀,比如去掉 cn-guangzhou-b 的尾号 -bclient=AcsClient('<accessKeyId>', '<accessSecret>', '<RegionId>') 
request=AuthorizeSecurityGroupRequest()
request.set_accept_format('json')
request.set_SecurityGroupId("<YourSecurityGroupId>") # 安全组IDrequest.set_IpProtocol("tcp") # 协议,可选 tcp,udp, icmp, gre, all:支持所有协议request.set_PortRange("22/22") # 端口范围,使用斜线(/)隔开起始端口和终止端口,如果信任所有端口为 1/65535request.set_Priority("1") # 安全组规则优先级,数字越小,代表优先级越高。取值范围:1~100request.set_Policy("accept") # accept:接受访问, drop: 拒绝访问request.set_NicType("internet") # internet:公网网卡, intranet:内网网卡。request.set_SourceCidrIp(clientIP) # 源端IPv4 CIDR地址段。支持CIDR格式和IPv4格式的IP地址范围。response=client.do_action_with_exception(request)
# python2:  print(response) print(str(response, encoding='utf-8'))
print("Client IP: %s  was successfully added to the Security Group."%clientIP)


1.3 执行代码

$ python3 addSecurityGroupRule.py
{"RequestId":"1657CAC5-8B1F-4EB8-A947-DC76F44B27C8"}
Client IP: 119.xx.xx.xx  was successfully added to the Security Group.


2. Golang

2.1 安装依赖包

$ goget github.com/aliyun/alibaba-cloud-sdk-go/services/ecs


2.2 编写脚本

请替换代码中的 <accessKeyId>, <accessSecret>, <YourSecurityGroupId>, <RegionId> .

packagemainimport (
"fmt""io/ioutil""net/http""github.com/aliyun/alibaba-cloud-sdk-go/services/ecs")
funcmain() {
responseClient, errClient :=http.Get("https://ipw.cn/api/ip/myip") // 获取外网 IPiferrClient!=nil {
fmt.Printf("获取外网 IP 失败,请检查网络\n")
panic(errClient)
    }
// 程序在使用完 response 后必须关闭 response 的主体。deferresponseClient.Body.Close()
body, _ :=ioutil.ReadAll(responseClient.Body)
clientIP :=string(body)
// <accessKeyId>, <accessSecret>: 前往 https://ram.console.aliyun.com/manage/ak 添加 accessKey// RegionId:安全组所属地域ID ,比如 `cn-guangzhou`// 访问 [DescribeRegions:查询可以使用的阿里云地域](https://next.api.aliyun.com/api/Ecs/2014-05-26/DescribeRegions) 查阅// 国内一般是去掉 ECS 所在可用区的后缀,比如去掉 cn-guangzhou-b 的尾号 -bclient, err :=ecs.NewClientWithAccessKey("<RegionId>", "<accessKeyId>", "<accessSecret>")
iferr!=nil {
fmt.Print(err.Error())
    }
request :=ecs.CreateAuthorizeSecurityGroupRequest()
request.Scheme="https"request.SecurityGroupId="<YourSecurityGroupId>"// 安全组IDrequest.IpProtocol="tcp"// 协议,可选 tcp,udp, icmp, gre, all:支持所有协议request.PortRange="22/22"// 端口范围,使用斜线(/)隔开起始端口和终止端口request.Priority="1"// 安全组规则优先级,数字越小,代表优先级越高。取值范围:1~100request.Policy="accept"// accept:接受访问, drop: 拒绝访问request.NicType="internet"// internet:公网网卡, intranet:内网网卡。request.SourceCidrIp=clientIP// 源端IPv4 CIDR地址段。支持CIDR格式和IPv4格式的IP地址范围。response, err :=client.AuthorizeSecurityGroup(request)
iferr!=nil {
fmt.Print(err.Error())
    }
fmt.Printf("Response: %#v\nClient IP: %s  was successfully added to the Security Group.\n", response, clientIP)
}


2.3 执行代码

$ go run addSecurityGroupRule.go 
Response: &ecs.AuthorizeSecurityGroupResponse{BaseResponse:(*responses.BaseResponse)(0xc00014c080), RequestId:"53C16A7C-91DC-48E6-B6BA-B0830A00C7C1"}
Client IP: 119.xx.xx.xx  was successfully added to the Security Group.


无误后,编译程序

$ go build addSecurityGroupRule.go 
$ ./addSecurityGroupRule 
Response: &ecs.AuthorizeSecurityGroupResponse{BaseResponse:(*responses.BaseResponse)(0xc0002c0080), RequestId:"BEAC369E-2267-4EEF-9463-26A1DEA3ED9B"}
Client IP: 119.xx.xx.xx  was successfully added to the Security Group.


自动化可以解放我们,一起加油吧。

Reference


相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
弹性计算 测试技术 持续交付
阿里云云效产品使用合集之如何进行自动化测试
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
23天前
|
数据采集 SQL 运维
企业出海WAS安全自动化解决方案
企业出海WAS安全自动化解决方案
|
3月前
|
弹性计算 JSON 开发工具
"一键玩转阿里云ECS!Python大神揭秘:如何自动化创建镜像并跨地域复制,让你的云资源部署秒变高效达人!"
【8月更文挑战第14天】本文介绍如何使用Python与阿里云SDK自动化管理ECS镜像,包括创建镜像及跨地域复制,以优化云资源部署。首先安装`aliyun-python-sdk-ecs`并配置阿里云凭证。接着,通过Python脚本实现镜像创建与复制功能,简化日常运维工作并增强灾难恢复能力。注意权限及费用问题。
87 2
|
3月前
|
运维 安全 网络安全
云端安全之盾:云计算与网络安全的协同演进运维自动化之路:从传统到现代化的转变
【8月更文挑战第23天】在数字化浪潮下,云计算以其灵活性和可扩展性成为企业数字化转型的重要推手。然而,随着云服务的快速发展,网络安全威胁也日益增多。本文将探讨云计算与网络安全如何相互促进,共同成长,以确保信息安全,并分析云服务提供商采取的安全策略以及企业在采用云服务时应注意的安全实践。
|
4月前
|
存储 人工智能 运维
阿里云获中国自动化学会科技进步奖一等奖
阿里云获中国自动化学会科技进步奖一等奖
59 2
|
3月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之是否可以进行跨项目自动化同步
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
数据采集 安全 容灾
|
5月前
|
存储 人工智能 运维
超大规模云网络技术新突破!阿里云斩获中国自动化学会科技进步一等奖
阿里云携手浙江大学、上海交大联合攻坚的超大规模云网络技术及应用成果,斩获中国自动化学会(CAA)科技进步奖一等奖。该成果实现了超大规模云网络调控技术的高性能突破,将十万级任务配置下发提升至秒级的超高水平,填补了该项技术的国内空白。
|
5月前
|
Java 持续交付 开发工具
阿里云云效产品使用问题之自动化流转在创建后不执行是什么原因
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
敏捷开发 缓存 Java
阿里云云效产品使用问题之自动化规则执行超时可以如何排查问题
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。

热门文章

最新文章