You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Github Actions向私有网络内的Amazon EC2实例上传文件

解决方案汇总

以下是三种可落地的方案,不需要手动维护Github Actions全量IP白名单:

方案1:通过AWS Systems Manager Session Manager建立SSH隧道(最推荐)

该方案无需EC2实例开放公网SSH端口,也无需配置任何IP白名单,安全性最高。

  • 前置准备:
    • 给目标EC2实例绑定拥有SSM托管权限的IAM角色
    • 给Github Actions运行环境配置拥有ssm:StartSession权限的IAM凭证
  • 操作流程:
    1. 在Github Actions运行环境中提前安装session-manager-plugin
    2. 配置SSH代理规则,让SSH流量默认走SSM隧道,参考配置示例:
    Host i-* mi-*
        ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
    
    1. 直接使用scp/rsync命令,指定EC2实例ID作为地址即可完成文件上传,示例命令:
      rsync -av ./local-file/ ec2-user@<EC2实例ID>:/remote/path/

方案2:动态调整安全组临时白名单

适合不想改动现有SSH访问逻辑的场景,仅在工作流运行期间开放当前运行节点的IP权限。

  • 操作流程:
    1. 工作流启动后,先获取当前Github Actions运行节点的公网IP:CURRENT_IP=$(curl -s https://api.ipify.org)
    2. 调用AWS CLI给EC2对应的安全组添加临时入站规则,开放22端口给当前IP:
      aws ec2 authorize-security-group-ingress --group-id <安全组ID> --protocol tcp --port 22 --cidr $CURRENT_IP/32 --tag-specifications 'ResourceType=security-group-rule,Tags=[{Key=Type,Value=GithubActionsTemp},{Key=WorkflowId,Value=${GITHUB_RUN_ID}}]'
    3. 执行scp/rsync上传文件
    4. 上传完成后,不管任务成功失败,都执行规则清理命令删除临时白名单:
      aws ec2 revoke-security-group-ingress --group-id <安全组ID> --protocol tcp --port 22 --cidr $CURRENT_IP/32
  • 注意事项:建议额外配置定时任务,定期清理残留的临时安全组规则,避免工作流异常中断导致规则未被删除。

方案3:S3中转传输

适合大文件传输场景,全程不需要暴露EC2的SSH端口到公网。

  • 操作流程:
    1. 工作流先把需要上传的文件同步到指定的私有S3桶
    2. 调用AWS SSM Run Command向目标EC2实例下发命令,主动从S3桶拉取对应文件到目标路径
    3. 可选:拉取完成后删除S3桶中的临时文件

内容的提问来源于stack exchange,提问作者Berimbolinho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:15:01