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

使用configure-aws-credentials与s3-sync-action时遇InvalidAccessKeyId错误

解决GitHub Actions同步S3时的InvalidAccessKeyId错误

核心问题分析

你遇到的错误是因为临时AWS凭证需要三个完整要素(Access Key ID、Secret Access Key、Session Token),但你只传给s3-sync-action前两个,缺少会话令牌(Session Token),导致AWS无法识别你的临时密钥。另外,configure-aws-credentials已经自动把凭证注入到当前Job的环境变量中,完全不需要手动传递步骤输出的凭证。

修复方案

方案1:直接使用自动注入的凭证(推荐)

修改GitHub Actions配置,删掉s3-sync-action中手动传递的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,让它直接读取configure-aws-credentials设置好的环境变量:

name: Upload Website

on:
  workflow_dispatch:
  push:
    branches:
    - main

permissions:
  id-token: write # 必须,用于请求JWT
  contents: read
  packages: write

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v3
      with:
        role-to-assume: arn:aws:iam::(你的账号ID):role/你的角色名
        aws-region: 'us-east-1'
    - uses: jakejarvis/s3-sync-action@master
      with:
        args: --acl private --follow-symlinks --delete
      env:
        AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
        AWS_REGION: 'us-east-1'
        SOURCE_DIR: 'website'

方案2:手动传递完整临时凭证(不推荐)

如果一定要手动传递步骤输出的凭证,必须补充AWS_SESSION_TOKEN:

# ... 其他配置保持不变 ...
    - uses: jakejarvis/s3-sync-action@master
      with:
        args: --acl private --follow-symlinks --delete
      env:
        AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
        AWS_ACCESS_KEY_ID: ${{ steps.creds.outputs.aws-access-key-id }}
        AWS_SECRET_ACCESS_KEY: ${{ steps.creds.outputs.aws-secret-access-key }}
        AWS_SESSION_TOKEN: ${{ steps.creds.outputs.aws-session-token }} # 必须添加这一行
        AWS_REGION: 'us-east-1'
        SOURCE_DIR: 'website'

额外检查项

  1. IAM角色信任策略:确保你要Assume的角色信任GitHub的OIDC提供商,信任策略示例:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::(你的账号ID):oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
        },
        "StringLike": {
          "token.actions.githubusercontent.com:sub": "repo:你的GitHub用户名/仓库名:*"
        }
      }
    }
  ]
}
  1. IAM角色权限:确保角色拥有S3同步所需的核心权限,权限策略示例:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::你的S3桶名",
        "arn:aws:s3:::你的S3桶名/*"
      ]
    }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:53:18