使用 GitHub Actions 时是否可以使用静态 IP

问题描述 投票:0回答:4

我使用 GitHub Actions 作为我的项目 CI。对于单元测试,项目必须使用数据库。我的数据库有一个 IP 允许列表,只有列表中的 IP 可以连接到我的数据库,但是当我在 GitHub Actions 中运行单元测试时,我不知道运行器的 IP 地址。是否可以使用静态IP或任何其他方式来解决该问题?我不希望任何IP能够连接我的数据库,它可能有安全问题。

github github-actions
4个回答
11
投票

固定 IP 地址现在处于托管运行者测试版。您可以保留一组 IP 地址,只要这些跑步者至少每月使用该 IP 地址,它们就保持不变。

请参阅此处的公告:

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

另请参阅:

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

或者您可以使用 SQL Server LocalDB 或 SQLLite 之类的工具来连接到运行器上的本地数据库。或者在云环境中启动一个临时数据库,将其开放给运行者,然后将其丢弃。

或者您可以使用 VPN 客户端将操作运行器连接到您的环境。您可以在跑步者上安装任何您想要的东西。


9
投票

您可以在工作流程中使用 public-ip 操作动态检索 GitHub Actions 运行器的 IP 地址,并在单元测试步骤之前和之后更新 RDS 实例的安全组入口规则。

这将允许您在工作流程中使用 GitHub 的托管运行器,而不是托管您自己的运行器。

注意:您还需要在运行器上设置 AWS 凭证,并具有更新关联安全组的权限。此外,您还需要确保 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/[email protected]
      - 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 实例。


5
投票

这是测试版(2022 年 9 月 1 日),但可以为跑步者分配静态 IP 地址:

固定 IP 范围以通过允许列表服务提供对跑步者的访问

只需勾选复选框即可为您的计算机设置固定的 IP 范围,这提供了一个可以在内部系统和 GitHub 的允许列表中允许列出的 IP 范围,以便继续使用操作,同时使您的 GitHub 环境更加安全。

更多详情这里


2
投票

如果您的数据库恰好是 Redis 或 PostgreSQL,GitHub Actions 包含一个名为 Service Containers 的内置功能,可在 CI 中启动临时数据库以进行测试。

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

有关更多信息,请参阅 GitHub Actions 文档中的创建 PostgreSQL 服务容器

如果您碰巧使用其他数据库,您可以进行更多手动跑腿工作来自行安装和运行它。

© www.soinside.com 2019 - 2024. All rights reserved.