使用AWS SSO时Gradle构建无法下载S3 Maven构件
针对切换AWS SSO后本地构建失败、生产环境正常的情况,可以试试以下排查和解决步骤:
确认本地SSO会话有效性
运行aws sso login重新登录AWS SSO,SSO会话默认存在时间限制,本地大概率是会话过期导致认证失败,而生产环境一般用的是长期有效角色或会话保持机制。登录后可执行aws sts get-caller-identity验证当前身份是否正确。确保Gradle正确读取SSO配置
检查~/.aws/config里的SSO配置参数(sso_account_id、sso_role_name、sso_start_url等)是否和生产环境一致。如果你的SSO配置用的不是默认profile,需要在Gradle仓库配置里显式指定:maven { url = uri("s3://bucket-name/releases") authentication { create<AwsImAuthentication>("awsIm") { profile = "你的SSO配置profile名称" } } }清理残留的旧密钥环境变量
检查本地是否还存在AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量,这些旧密钥会被Gradle优先读取,直接覆盖SSO认证设置。可以用echo $AWS_ACCESS_KEY_ID查看,若存在则清空这些变量后重新构建。验证本地SSO角色的S3权限
确认本地SSO关联的IAM角色拥有目标S3桶的ListBucket和GetObject权限,同时检查S3桶的资源策略是否限制了访问IP,排查本地IP是否不在允许范围内。对齐AWS SDK版本
Gradle的AWS相关组件依赖的SDK版本可能和本地AWS CLI不一致,引发SSO认证兼容性问题。可以在build.gradle.kts里显式指定兼容的AWS SDK版本:buildscript { dependencies { classpath("software.amazon.awssdk:sts:2.20.0") classpath("software.amazon.awssdk:s3:2.20.0") } }
内容的提问来源于stack exchange,提问作者Mani K

