使用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
相关产品推荐
相关产品推荐

