使用 Github Actions 是否可以使用静态 IP?

7
现在我正在使用Github Actions作为我的项目CI,当我使用Github Actions构建我的项目时,我想要进行一些单元测试。在使用单元测试时,项目必须使用数据库,现在我的数据库有一个白名单,只有白名单中的IP可以连接我的数据库。但是当我在GitHub Actions中运行单元测试时,我不知道GitHub Actions的IP地址。是否可能使用静态IP或其他方法来解决这个问题?我不希望任何IP都能连接我的数据库,这可能会存在安全问题。有什么建议吗?

3
直接通过互联网访问您的数据库通常被认为是一个非常糟糕的想法。 - user47589
有更好的方法吗?我没有更好的选择,使用Github Actions时是否可以初始化数据库?@Amy - Dolphin
4个回答

10

托管的 Runner 现已推出固定 IP 地址的测试版。您可以预留一组 IP 地址,并且只要这些 Runner 每月使用该 IP 地址一次,它们就会保持不变。

请点击此处查看公告:

或者,通过虚拟机上的自托管 Runner 您可以控制 IP 地址。

另请参阅:

或者,您的 GitHub Action 工作流可能可以在运行过程中调整防火墙设置。

或者您可以使用类似于SQL Server LocalDB或SQLLite的工具在运行程序的本地计算机上连接到数据库。或者在云环境中启动一个临时数据库,将其开放给运行程序的计算机,并在使用后将其删除。

或者您可以使用VPN客户端将操作运行程序连接到您的环境中。您可以在运行程序的计算机上安装任何您想要的软件。


7

您可以在工作流期间使用public-ip action动态检索GitHub Actions runner的IP地址,并在单元测试步骤之前和之后更新RDS实例的安全组入站规则。

这将允许您使用GitHub托管的运行程序来执行工作流,而无需自己进行托管。

注意:您还需要设置AWS凭据在您的runner上并具有更新相关安全组的权限。此外,您需要确保RDS实例位于公共子网中,并附加了Internet网关和安全组。

您的工作流应该类似于以下内容:

deploy:
    name: deploy
    runs-on: ubuntu-latest
    env:
      AWS_INSTANCE_SG_ID: <your-rds-subnet-sg-id>
    steps:
      - name: configure aws credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: <your-ci-aws-access-key>
          aws-secret-access-key: <your-ci-aws-secret-key>
          aws-region: <your-rds-aws-region>
      - name: get runner ip addresses
        id: ip
        uses: haythem/public-ip@v1.2
      - name: whitelist runner ip address
        run: |
          aws ec2 authorize-security-group-ingress \
            --group-id $AWS_INSTANCE_SG_ID \
            --protocol tcp \
            --port 22 \
            --cidr ${{ steps.ip.outputs.ipv4 }}/32
      - name: connect to your rds instance and run tests
        run: |
          ...run tests...
      - name: revoke runner ip address
        run: |
          aws ec2 revoke-security-group-ingress \
            --group-id $AWS_INSTANCE_SG_ID \
            --protocol tcp \
            --port 22 \
            --cidr ${{ steps.ip.outputs.ipv4 }}/32

理想情况下,您应该在与RDS实例相同的VPC中的EC2上运行集成测试,以避免公开暴露RDS实例。

它运行良好... - Alwin Jose

5
这是测试版 (2022年9月1日),但现在可以为Runner分配静态IP地址:

固定IP范围可通过允许列表服务提供给Runner访问

仅需勾选复选框即可设置机器的固定IP范围,这提供了一个可在内部系统和GitHub的允许列表中列出的IP范围,使您在使用Actions时保持GitHub环境更安全。 Blockquote

更多详细信息请参见 此处


2

如果你的数据库恰好是Redis或PostgreSQL,GitHub Actions包含一个名为Service Containers的内置功能,用于在CI中为测试目的启动短暂的数据库。

这些数据库是短暂的:在使用它的作业完成后,托管数据库的服务容器将被销毁。如果需要,您可以在容器中或直接在虚拟机上运行数据库。

有关更多信息,请参见GitHub Actions文档中的Creating PostgreSQL service containers

如果你使用的是另一个数据库,你可以手动安装和运行它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接