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

GitHub Actions操作S3报访问拒绝 终端可正常访问问题排查

问题诊断

你的配置存在两个直接导致Access Denied错误的核心问题:

  1. 自定义端点未生效:你在环境变量中定义的SG_S3_ENDPOINT是自定义命名变量,AWS CLI不会自动识别加载该变量;且后续执行aws configure时完全没有配置endpoint_url参数,CLI会默认根据配置的区域自动匹配服务端点,请求不会打到你指定的s3.amazonaws.com端点,和你本地可正常运行的配置环境不一致,最终触发访问拒绝。
  2. 配置加载存在覆盖风险:你通过aws configure set写入的配置会存到Runner的默认配置文件中,GitHub Actions Runner预装的AWS环境配置、其他预装工具的AWS相关环境变量都可能覆盖你写入的密钥、区域配置,导致实际执行sync命令时用的不是你预期的身份。
修复方案

直接使用AWS CLI原生支持的标准环境变量传递配置,不需要额外执行aws configure set写入文件,从根源避免配置覆盖;同时在执行sync命令时显式指定端点,确保请求路由正确。
修复后的完整工作流配置如下:

jobs: 
  Sync:
    runs-on: ubuntu-latest
    env:
      # 用AWS CLI原生识别的标准变量名,会被CLI自动加载,无需手动configure
      AWS_ACCESS_KEY_ID: ${{ secrets.SG2_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.SG2_SECRET_ACCESS_KEY }}
      AWS_DEFAULT_REGION: ${{ secrets.AWS_REGION_NAME }}
      AWS_ENDPOINT_URL: https://s3.amazonaws.com
    steps:
      - uses: actions/checkout@v2
      - name: 安装依赖
        run: |
          pip3 install -r requirements.txt

      - name: 同步周度Patterns数据
        run: |
          # 执行同步前先打印当前加载的AWS配置,方便快速排查配置不匹配问题
          aws configure list
          # 显式指定端点,避免跨区域桶自动路由到错误端点
          aws s3 sync s3://sg-places-outgoing/my_org/weekly/ s3://sg-my-org/weekly-patterns/ --endpoint-url https://s3.amazonaws.com
补充注意事项
  • 如果同步涉及的两个存储桶分属不同区域,需要在sync命令中额外补充区域参数:源桶区域通过--source-region <源桶区域名>指定,目标桶区域通过--region <目标桶区域名>指定,否则跨区域复制时会因为路由错误触发权限问题。
  • 执行前可以通过aws configure list的输出核对当前加载的密钥ID后四位、区域、端点是否和你本地正常运行时的配置完全一致,快速排除配置加载错误。
  • 不要使用非AWS_开头的自定义变量传递AWS CLI配置,这类变量不会被CLI自动识别,必须显式通过命令参数或configure配置传入才会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:12:27