GitHub Actions创建CloudFront缓存失效失败:无身份策略授权
CloudFront缓存失效CI流水线AccessDenied问题解决
问题复现
使用chetan/invalidate-cloudfront-action@v2在GitHub Actions中创建CloudFront缓存失效时,触发以下权限错误:
调用CreateInvalidation操作时发生错误(AccessDenied):User: arn:aws:iam::000000000000:user/my-user-id 无权对资源arn:aws:cloudfront::000000000000:distribution/***执行cloudfront:CreateInvalidation操作,原因是没有基于身份的策略允许该动作。
Error: Process completed with exit code 254.
已完成的配置:
- 创建目标IAM用户并附加自定义权限策略
- 在GitHub仓库中配置了对应密钥与分发ID的Secrets
- IAM自定义策略内容:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "cloudfront:CreateInvalidation", "Resource": "arn:aws:cloudfront::000000:distribution/E000000000 " } ] }
- GitHub Actions流水线配置片段:
- name: Invalidate CloudFront uses: chetan/invalidate-cloudfront-action@v2 env: DISTRIBUTION: ${{ secrets.DISTRIBUTION }} PATHS: "/*" AWS_REGION: "us-east-1" AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET }}
核心修复方案
1. 修正IAM策略中的ARN格式错误
观察策略内的Resource值末尾存在多余空格:"arn:aws:cloudfront::000000:distribution/E000000000 ",这会导致ARN与实际CloudFront分发的标识不匹配,直接造成权限校验失败。
操作步骤:
- 进入AWS IAM控制台,找到该自定义策略
- 编辑策略内容,删除
Resource值末尾的空格后保存 - 等待策略生效(通常1分钟内即可完成)
2. 额外排查方向(若修复后仍报错)
- Secrets值校验:确认GitHub Secrets中的
DISTRIBUTION值与CloudFront分发ID完全一致,无大小写错误或多余字符 - 权限边界/SCP限制:检查该IAM用户是否被设置了权限边界,或所在AWS组织是否有服务控制策略(SCP)禁止了
cloudfront:CreateInvalidation动作 - CLI手动验证:使用该IAM用户的密钥,通过AWS CLI执行以下命令,直接验证权限是否正常:
aws cloudfront create-invalidation --distribution-id YOUR_DISTRIBUTION_ID --paths "/*" --region us-east-1
内容的提问来源于stack exchange,提问作者Kaigo
相关产品推荐
相关产品推荐

