[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

关于使用 Golang 创建 CLI 工具来编辑 AWS 安全组的故事

我叫寺冈,是一名基础设施工程师。

这次我将讨论使用 Golang 创建 CLI 工具。
这个名字是“goacl”,我想向您介绍一下它是什么。

1.什么是goacl?

goacl 是一个用 Golang 编写的 CLI 工具。

显示 AWS 安全组列表并
为特定组添加规则。

目前,它仅允许列表显示和添加规则,但
我们计划添加功能以允许删除不必要的规则。

2.创建原因

有两个原因:内部/个人。

内部原因

简而言之,原因是办公室的固定IP地址将来会发生变化。

为了提高我们内部网络的质量,我们
决定更换线路本身,但是
如何允许新的IP地址访问呢?

由于我们的主营业务是MSP,所以我们
负责很多客户的AWS账户。
每次IP地址更改时,您都需要检查所有帐户的权限设置,并且
手动添加权限设置存在限制。
这里使用“goacl”。

个人原因

我一直希望能够编写Golang,我认为这
将是提高我的工作效率以及个人学习的好方法。

Golang
也被用在 HashiCorp 产品中,例如 Terraform 和 Kubernetes,所以
我认为基础设施工程师学习 Golang 有很多好处。

3. Goacl的用法和逻辑

由于它是一个 CLI 工具,因此可以从命令行执行。

用法

您只需输入 goacl 即可检查使用情况。

$ goacl goacl 是一个 CLI 工具,用于列出 AWS 安全组并添加/删除规则 用法:goacl [command] 可用命令:add 添加 SecurityGroup 规则 help 有关任何命令列表的帮助 列出 SecurityGroup 信息 标志:--config 字符串配置文件(默认)。是 $HOME/.goacl.yaml) -h, --help goacl 的帮助 -t, --toggle 用于切换的帮助消息 使用“goacl [command] --help”获取有关命令的更多信息。

列表

您可以查看安全组列表。
如下使用子命令“list”。

$ goacl list --region us-west-1 --profile default +------------+------------+-------- -- --+----------------+--------------+ | 组名称 | CIDRIP/组 ID | +- ------------+------------+------------+--------- ----- --+--------------+ | sg-XXXXXXXX | 默认 | sg-XXXXXXXX | +-------- ----- +------------+----------+----------------+--- ------ -----+

由于这是一篇博客,所以ID部分被屏蔽了,但是
在goacl内部,使用aws-sdk-go来获取安全组信息,并将
执行结果以表格的形式输出。


您可以指定要列出的区域和要用作
命令选项的如果未指定任何内容,则将使用默认值,
区域将为“ap-northeast-1”,配置文件将为“default”。

Cobra用于
实现子命令和选项它可能非常有名,因为它也被用在 Kubernetes 源代码中。

添加

您可以向特定安全组添加规​​则。
执行add命令时,需要使用yaml编写的配置文件。

规则: - groupid: sg-XXXXXXXX fromport: 80 toport: 80 ipprotocol: tcp ipranges: - 0.0.0.0/0 - groupid: sg-XXXXXXXX fromport: 443 toport: 443 ipprotocol: tcp ipranges: - 0.0.0.0/0

如果你想释放80/443端口,就像上面这样。
这是 ipranges 允许的 IP 地址,但
可以在此字段中输入多个条目。
让我们尝试一下。

$ goacl add --region us-west-1 --profile default --config config.yaml $ goacl list --region us-west-1 --profile default +------------ +------------+----------+----------------+-------- - -----+ | 组名 | CIDRIP/VPCID | +-------------+------------+-- ------+----------------+--------------+ | sg-XXXXXXXX | 默认 | 0.0/0 | vpc-XXXXXXXX | + +----------------+ | -1 | 0.0.0.0/0 | 0.0.0.0 ---------+------------+----------+---------------- + --------------+

您可以使用“--config”选项指定配置文件。
后面的选项与 list 命令类似。
如果执行add命令后运行list命令,可以确认已经添加。

逻辑使用
viper在Go代码中定义一个与yaml结构相同的结构体,
读取配置文件,执行viper.Unmarshal,将
yaml中写入的值存储到该结构体中。

type Config struct { Rules []Rules `yaml:rules` } type Rules struct { GroupID string `yaml:groupid` FromPort int64 `yaml:fromport` ToPort int64 `yaml:toport` IpProtocol string `yaml:ipprotocol` IpRanges []string `yaml:ipranges` }

我遇到了困难,因为我并没有真正理解结构的思想,但我
设法让它正常工作(我会再研究一下)

4.总结

我认为我们暂时会在内部使用它并识别任何错误,但
我们希望将来将它作为 OSS 发布。
我还不能删除规则,所以我会继续实现它们并在另一个博客中总结它们!

如果您觉得这篇文章有帮助,请点赞!
0
加载中...
0 票,平均:0.00 / 10
932
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

寺冈由纪

于 2016 年加入 Beyond,目前是他担任基础设施工程师
MSP 的第六个年头,他负责排除故障,同时
使用 AWS 等公共云设计和构建基础设施。
最近,我
一直在使用 Terraform 和 Packer 等 Hashicorp 工具作为构建 Docker 和 Kubernetes 等容器基础设施以及自动化操作的一部分,并且我
还扮演了在外部学习小组和研讨会上发言的传播者的角色。

・GitHub
https://github.com/nezumisannn

・演示历史
https://github.com/nezumisannn/my-profile

・演示材料(SpeakerDeck)
https://speakerdeck.com/nezumisannn

・认证:
AWS认证解决方案架构师-
谷歌云专业云架构师