Github Actions配置AWS凭证报错及令牌过期、用户类型疑问
问题解答
1. 会话令牌过期是预期行为吗?
是。你使用的IAM Identity Center(原AWS SSO)生成的会话令牌属于临时凭证,这类凭证本身就有有效期(默认最长12小时,无法设置更长),过期后必须重新通过SSO门户获取。把临时凭证手动存到GitHub Secrets里,自然会定期失效,这不是适合自动化场景的用法。
2. 为什么官方教程没提及会话令牌?
因为GitHub官方教程默认使用的是传统IAM用户的长期访问密钥(自管理访问密钥)。这类密钥不会自动过期(除非手动禁用/轮换),配置一次后就能长期用于自动化工作流,所以教程里不需要涉及会话令牌的内容。你之前误用了IAM Identity Center的临时凭证,才出现需要频繁更新的问题。
3. IAM Identity Center用户 vs 传统IAM用户的区别
你的推测完全正确:
- IAM Identity Center用户:属于集中式身份管理体系,只能通过SSO门户获取临时凭证,这类用户没有自己的长期访问密钥,因此找不到「Security credentials」按钮是正常的——这个功能仅对传统IAM用户开放。
- 传统IAM用户:是独立的IAM实体,支持创建长期访问密钥,适合GitHub Actions这类需要稳定凭证的自动化场景。
正确解决方案步骤
- 让管理员在AWS IAM控制台创建一个新的传统IAM用户,不要使用IAM Identity Center用户。
- 给该IAM用户授予ECR操作的必要权限,建议遵循最小权限原则,比如添加以下权限:
ecr:GetAuthorizationTokenecr:BatchCheckLayerAvailabilityecr:GetDownloadUrlForLayerecr:BatchGetImageecr:InitiateLayerUploadecr:UploadLayerPartecr:CompleteLayerUploadecr:PutImage
- 进入该IAM用户的「Security credentials」标签页,生成Access Key ID和Secret Access Key(这就是长期访问密钥)。
- 将这两个密钥添加到GitHub仓库的Secrets中(比如命名为
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY)。 - 修改GitHub Actions配置文件,使用长期密钥配置AWS凭证,示例如下:
- name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: 你的ECR所在区域 # 替换为实际区域,比如cn-north-1
注意事项
- 长期访问密钥需妥善保管,避免泄露,建议每90天轮换一次。
- 始终遵循最小权限原则,不要给IAM用户授予超出需求的权限。
内容的提问来源于stack exchange,提问作者A-Abe
相关产品推荐
相关产品推荐

