如何让GitHub Actions访问Azure VNet内的数据库
解决Azure VNet内Postgres无法被GitHub Actions访问的问题
核心思路
你的问题本质是GitHub Actions的Runner(不管是官方托管还是自托管)不在Postgres所在的VNet里,无法穿透VNet访问内网数据库。下面给两种符合你「不移除VNet、不公开数据库」要求的方案:
方案一:部署自托管GitHub Runner到VNet(最推荐,稳定无风险)
直接把Runner放在和Postgres同VNet的子网里,让它通过内网直接访问数据库,完全不需要开公网访问权限:
- 在Azure Portal里创建一台VM,选择和Postgres相同的VNet及子网
- 登录这台VM,按照GitHub官方指引安装自托管Runner,绑定到你的代码仓库
- 修改GitHub Actions工作流文件,指定用这个自托管Runner执行任务:
jobs: deploy: runs-on: self-hosted # 指定使用自托管Runner steps: - uses: actions/checkout@v4 # 后续的部署、数据库迁移等步骤 - 这种方式下,Runner和Postgres处于同一VNet,直接走内网通信,不需要修改任何防火墙或VNet规则,完全满足你不公开数据库的需求
方案二:白名单GitHub托管Runner的IP范围(适合临时场景)
如果一定要用GitHub官方托管的Runner,需要把Runner的公网IP范围加入Postgres的防火墙和VNet安全组的允许列表,但注意:GitHub托管Runner的IP是动态更新的,需要定期维护:
- 获取GitHub当前的托管Runner IP范围(从GitHub官方发布的IP列表中获取,会定期更新)
- 配置Postgres防火墙规则:
- 进入Azure Portal的Postgres服务器页面,打开「连接安全性」
- 添加新的防火墙规则,将获取到的GitHub IP段(CIDR格式)批量加入允许列表
- 配置VNet安全组(NSG)规则:
- 找到Postgres所在子网绑定的NSG,添加入站规则:允许来自GitHub IP段的流量访问5432端口(Postgres默认端口)
- 注意:这种方式需要Postgres开启「允许公网访问」(但只放行GitHub的IP),相比方案一还是有一定的暴露风险,且IP范围需要定期更新维护
关于你的疑问:是否需要配置防火墙?
- 如果用方案一(自托管Runner在VNet内):不需要配置任何公网防火墙规则,内网直接访问即可
- 如果用方案二(托管Runner IP白名单):需要同时配置Postgres的防火墙规则和VNet安全组的入站规则,双管齐下才能放行流量
另外,你提到的「白名单Runner IP的YAML代码」,如果是临时添加单IP的场景,可以用这种脚本(但有安全隐患,用完要记得删除规则):
jobs: deploy: runs-on: ubuntu-latest steps: - name: 获取当前Runner公网IP id: get_ip run: echo "::set-output name=ip::$(curl -s https://api.ipify.org)" - name: 临时添加Postgres防火墙规则 uses: azure/cli@v1 with: inlineScript: | az postgres server firewall-rule create --resource-group 你的资源组名 --server-name 你的Postgres服务器名 --name github-runner-temp --start-ip-address ${{ steps.get_ip.outputs.ip }} --end-ip-address ${{ steps.get_ip.outputs.ip }} # 执行部署或数据库操作 - name: 移除临时防火墙规则 if: always() uses: azure/cli@v1 with: inlineScript: | az postgres server firewall-rule delete --resource-group 你的资源组名 --server-name 你的Postgres服务器名 --name github-runner-temp --yes
这个脚本会在任务开始时获取当前Runner的IP并添加防火墙规则,任务结束后自动删除(哪怕失败),但每次Runner的IP可能不同,且需要给GitHub Actions配置Azure服务主体的权限,仅适合临时测试使用。
内容的提问来源于stack exchange,提问作者Qiuzman
相关产品推荐
相关产品推荐

