Sign inSign up

kitsudo/auto-safe-group

By kitsudo

•Updated 3 months ago

Image
0

382

kitsudo/auto-safe-group repository overview

⁠腾讯云安全组动态 IP 更新工具

周期获取当前公网 IPv4 地址,并更新腾讯云安全组中指定规则的来源 IP(/32)。

⁠环境变量

复制 .env.example 为 .env 并按需修改:

cp .env.example .env
变量必填说明
TENCENT_SECRET_ID是腾讯云 SecretId
TENCENT_SECRET_KEY是腾讯云 SecretKey
TENCENT_REGION是安全组所在地域,如 ap-guangzhou
SECURITY_GROUP_ID是安全组 ID,如 sg-xxxxxxxx
RULE_INDEX三选一入站规则在列表中的索引(最精确)
RULE_DESCRIPTION三选一规则备注/描述
RULE_PORT三选一规则端口,如 22、80,443
UPDATE_INTERVAL_SECONDS否更新周期,默认 300 秒
IP_SERVICE_URL否公网 IP 查询服务,默认 https://api.ipify.org

同时提供多种定位方式时,按 RULE_INDEX > RULE_DESCRIPTION > RULE_PORT 优先级匹配。

⁠使用 Docker 运行

构建镜像:

docker build -t qcloud-sg-updater .

使用 docker-compose(推荐):

docker compose up -d

或直接运行容器:

docker run -d --env-file .env --name qcloud-sg-updater qcloud-sg-updater

查看日志:

docker logs -f qcloud-sg-updater

⁠本地开发

创建虚拟环境并安装依赖:

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

加载环境变量后运行:

export $(grep -v '^#' .env | xargs)
python main.py

⁠测试

python -m unittest discover -s tests -v

⁠工作原理

  1. 每 UPDATE_INTERVAL_SECONDS 秒从 IP_SERVICE_URL 获取当前公网 IPv4。
  2. 调用 DescribeSecurityGroupPolicies 拉取安全组入站规则。
  3. 按配置的定位方式找到目标规则。
  4. 若规则当前来源 IP 与公网 IP 不一致,则调用 ModifySecurityGroupPolicies 更新为 <public-ip>/32。
  5. 若已一致,则跳过本次更新。

⁠限制

  • 仅支持更新来源为 IPv4 CIDR 的入站规则。
  • 仅更新 /32 掩码。

Tag summary

Content type

Image

Digest

sha256:e889e216e…

Size

92.3 MB

Last updated

3 months ago

docker pull kitsudo/auto-safe-group