如何在将 GitHub Action 运行到 RDS 数据库时允许 IP,而您不允许从外部访问数据库?

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

这是当前运行迁移的 Prisma 操作文件:

name: Deploy Prisma Migration
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        uses: actions/checkout@v3
      - name: Setup Node
        uses: actions/setup-node@v3
      - name: Install dependencies
        run: npm install
      - name: Apply all pending migrations to the database
        run: npx prisma migrate deploy
        env:
          DATABASE_URL: ${{ secrets.DATABASE_URL }}

但它失败了,因为我不允许外部使用或我已连接的 EC2 实例的 IP。

是否还有其他方法,例如来自 EC2 的 SSH 隧道(因为我已将 EC2 连接到 RDS)

database amazon-rds prisma
1个回答
0
投票

是否还有其他方法,例如来自 EC2 的 SSH 隧道

您可以按照这个问题,在 PgAdmin 中使用 SSH 隧道。

同样的想法也适用于 Prisma,它充当需要连接到数据库的客户端。
主要要求是建立从外部网络(在您的情况下为 GitHub Actions 运行程序)到 RDS 实例的安全连接,该连接仅限于外部访问。这就是 SSH 隧道的用武之地,它通过允许的中介(EC2 实例)提供安全路径。

您需要在本地计算机或 GitHub 运行程序上创建 SSH 密钥对。该密钥将用于建立与 EC2 实例的安全 SSH 连接。 (

ssh-keygen
)。确保您的 EC2 实例已启用 SSH 并且可以访问 RDS 数据库,如此答案中所示。将您生成的公钥添加到 EC2 实例上的
~/.ssh/authorized_keys
文件以允许访问。
将私钥、EC2 实例的 IP 地址或主机名以及用户名添加为 GitHub 存储库设置中的机密。这些将用于建立 SSH 连接。

您的 GitHub 工作流程应将私钥回显到文件中,设置适当的权限,然后使用 SSH 命令创建隧道:

- name: Set up SSH Tunnel for Database Access
  run: |
    echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
    ssh -o StrictHostKeyChecking=no -i private_key ${USER_NAME}@${HOSTNAME} -L local_port:RDS_endpoint:RDS_port -N &
    sleep 5

当您的 GitHub Actions 工作流程运行时,它应该创建一个到 EC2 实例的 SSH 隧道,而 EC2 实例又可以访问 RDS 数据库。这样您就可以安全地执行数据库操作,而无需将 RDS 实例暴露到公共互联网。

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