如何使用Java从AWS获取临时安全凭证访问S3存储桶并上传文件
AWS S3 临时凭证调用时profile文件为空错误解决方案
- 第一步:校验本地凭证文件的合法性
默认AWS凭证文件路径为~/.aws/credentials(Linux/macOS)或C:\Users\<你的用户名>\.aws\credentials(Windows),首先确认该文件是否真实存在,若不存在需手动创建对应目录和空文件。
文件内至少需要配置一个基础身份profile,格式参考如下:[default]
aws_access_key_id = 你的固定访问密钥ID
aws_secret_access_key = 你的固定秘密访问密钥
即使你使用临时联邦/会话凭证,AWS SDK默认会读取基础profile作为初始身份源,无有效基础profile就会触发空文件错误 - 第二步:无需本地profile的适配方案(测试环境可用,生产环境不建议硬编码凭证)
可在Java代码中直接构造临时凭证对象,跳过本地profile读取逻辑,代码示例如下:BasicSessionCredentials tempCredentials = new BasicSessionCredentials( "你获取到的临时访问密钥ID", "你获取到的临时秘密访问密钥", "你获取到的临时会话Token" ); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(tempCredentials)) .withRegion(Regions.选择你对应的S3区域) .build(); - 第三步:排查SDK版本兼容性问题
1.11.600版本之前的AWS Java SDK 1.x存在临时凭证读取的已知bug,可升级SDK到最新稳定版,也可以在构造客户端时显式指定withProfileName("default")参数,避免SDK扫描路径时识别为空。 - 第四步:环境变量优先级覆盖
你可以直接设置系统环境变量AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN传入凭证信息,环境变量的优先级高于本地profile文件,无需修改本地配置即可正常初始化S3客户端。
内容的提问来源于stack exchange,提问作者Sunny
相关产品推荐
相关产品推荐

