如何让GitHub Actions访问AWS EKS内部的unpub私有URL?
让GitHub Actions访问AWS私有unpub服务的可行方案
方案1:AWS Session Manager端口转发
无需额外VPN客户端,利用AWS SSM实现端口转发,将GitHub Actions runner的本地端口映射到unpub的私有地址。
前置准备:
- 为GitHub配置AWS OIDC身份提供商,创建具备以下权限的IAM角色:
ssm:StartSession、ssm:PortForwardingSessionToRemotePort、eks:DescribeCluster(用于定位EKS资源)。 - 确保EKS节点已安装SSM Agent,且节点IAM角色包含
AmazonSSMManagedInstanceCore权限。
- 为GitHub配置AWS OIDC身份提供商,创建具备以下权限的IAM角色:
GitHub Actions workflow步骤:
- 配置AWS OIDC认证:
- name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: arn:aws:iam::ACCOUNT_ID:role/GitHubActionsSSMRole aws-region: YOUR_REGION - 获取unpub服务的内网地址(若通过K8S Service暴露):
UNPUB_ADDR=$(kubectl get svc unpub -n YOUR_NAMESPACE -o jsonpath='{.spec.clusterIP}:{.spec.ports[0].port}') - 启动SSM端口转发会话:
aws ssm start-session \ --target <EKS_NODE_INSTANCE_ID> \ --document-name AWS-StartPortForwardingSessionToRemoteHost \ --parameters '{"host":["'"$(echo $UNPUB_ADDR | cut -d: -f1)"'"], "portNumber":["'"$(echo $UNPUB_ADDR | cut -d: -f2)"'"], "localPortNumber":["8080"]}' & sleep 10 # 等待连接建立 - 访问映射后的本地地址:
curl http://localhost:8080
- 配置AWS OIDC认证:
注意:需提前获取EKS节点的实例ID,可通过kubectl get nodes -o jsonpath='{.items[0].spec.providerID}'提取。
方案2:部署Self-hosted Runner到VPC内部
将GitHub Actions runner部署在AWS VPC内网环境中,直接访问unpub私有地址。
部署步骤:
- 进入GitHub仓库的「Settings > Actions > Runners」,点击「New self-hosted runner」,获取对应系统的安装脚本。
- 在VPC内的EC2实例或EKS Pod中执行安装脚本,完成runner注册。确保该实例/Pod所在子网能访问unpub.internal.abc。
Workflow配置:
指定使用self-hosted runner执行任务:jobs: build: runs-on: self-hosted steps: - name: Checkout code uses: actions/checkout@v4 - name: Access unpub run: curl http://unpub.internal.abc
注意:需自行维护runner的可用性、安全性(如定期更新、权限控制),适合长期稳定的构建需求。
方案3:AWS PrivateLink连接(企业级)
通过AWS PrivateLink建立GitHub Actions与VPC的私有连接,无需中转。
- 配置步骤:
- 在AWS VPC中创建端点服务,关联unpub服务的负载均衡器或K8S Service。
- 利用GitHub Enterprise计划的网络配置功能,将Actions的出站流量导向该PrivateLink端点。
- 在workflow中直接访问
http://unpub.internal.abc即可。
注意:需GitHub Enterprise支持,配置成本较高,适合大规模、高安全要求的场景。
方案4:临时AWS VPN连接
在GitHub Actions runner中通过CLI建立临时VPN连接,模拟本地VPN访问。
- Workflow步骤:
- 将AWS VPN的配置文件(.ovpn)存储为GitHub Secret(如
VPN_CONFIG)。 - 安装VPN客户端并建立连接:
- name: Install OpenVPN run: sudo apt-get update && sudo apt-get install -y openvpn - name: Establish VPN connection run: | echo "${{ secrets.VPN_CONFIG }}" > vpn.ovpn sudo openvpn --config vpn.ovpn --daemon sleep 15 # 等待连接稳定 - name: Access unpub run: curl http://unpub.internal.abc
- 将AWS VPN的配置文件(.ovpn)存储为GitHub Secret(如
注意:需处理SSO认证逻辑(如通过AWS CLI获取临时凭证注入VPN配置),连接稳定性受网络影响较大,适合临时测试场景。
内容的提问来源于stack exchange,提问作者Faisal Shani
相关产品推荐
相关产品推荐

