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

使用GitHub Actions部署AWS Serverless遇403错误,求IAM权限配置方案

解决GitHub Actions部署AWS Serverless时的403错误

核心排查方向:IAM权限与配置正确性

403错误本质是AWS权限不足,按以下步骤逐一排查:


1. 确认IAM用户类型与密钥配置

  • 必须是程序化访问用户:创建用户时需勾选「访问密钥 - 编程访问」,仅控制台访问的用户无法通过GitHub Actions调用AWS API。
  • GitHub Secrets配置无误:检查仓库的Settings > Secrets and variables > Actions中,AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY是否与IAM用户生成的密钥完全一致,无多余空格或拼写错误。

2. 验证IAM用户/组的权限覆盖范围

Serverless部署需要涉及CloudFormation、Lambda、API Gateway、S3、IAM角色等多个服务的权限,以下是最小权限策略示例(可根据实际场景调整):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:CreateStack",
        "cloudformation:DescribeStacks",
        "cloudformation:UpdateStack",
        "cloudformation:DeleteStack",
        "cloudformation:DescribeStackEvents",
        "cloudformation:GetTemplate"
      ],
      "Resource": "arn:aws:cloudformation:*:*:stack/serverless-*/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction",
        "lambda:UpdateFunctionCode",
        "lambda:UpdateFunctionConfiguration",
        "lambda:GetFunction"
      ],
      "Resource": "arn:aws:lambda:*:*:function:serverless-*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "apigateway:CreateRestApi",
        "apigateway:PutRestApi",
        "apigateway:GetRestApi",
        "apigateway:CreateDeployment",
        "apigateway:UpdateDeployment"
      ],
      "Resource": "arn:aws:apigateway:*::/restapis/*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:CreateBucket",
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Resource": "arn:aws:s3:::serverless-deploy-*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:CreateRole",
        "iam:AttachRolePolicy",
        "iam:PassRole",
        "iam:GetRole"
      ],
      "Resource": "arn:aws:iam::*:role/serverless-*"
    }
  ]
}
  • 测试阶段可临时添加AdministratorAccess权限(生产环境禁用),确认是否能正常部署,快速排查是否为权限缺失问题。
  • 检查用户是否被**权限边界(Permission Boundary)**限制:部分AWS账号默认会给新用户添加权限边界,即使组内有全量权限,边界也会拦截请求,需在IAM用户详情页确认并调整。

3. 验证GitHub Actions工作流配置

确保工作流文件(如.github/workflows/deploy.yml)中AWS环境变量配置正确:

name: Deploy Serverless App
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm install
      - name: Install Serverless CLI
        run: npm install -g serverless
      - name: Deploy to AWS
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: us-east-1 # 替换为你的AWS区域
        run: serverless deploy --stage prod
  • 确认AWS_REGION与Serverless配置文件(serverless.yml)中的区域一致,跨区域会导致权限验证失败。

4. 本地测试排除环境问题

在本地终端配置该IAM用户的密钥,执行serverless deploy命令:

  • 若本地也报403:100%是IAM权限问题,回到步骤2重新梳理权限。
  • 若本地能正常部署:问题出在GitHub Secrets配置或工作流文件,重新核对密钥和环境变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:43:11