使用AWS SDK for Java 1.12.780时,无会话令牌如何配置凭证?
AWS凭证配置:无会话令牌时的正确做法
你从AWS控制台获取的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY属于长期IAM用户凭证,这类凭证不需要会话令牌(Session Token),和代码示例里的临时会话凭证是两种不同类型。
正确的代码配置方式
直接使用BasicAWSCredentials替换示例中的BasicSessionCredentials即可,不需要传入会话令牌参数:
BasicAWSCredentials awsCreds = new BasicAWSCredentials("你的AWS_ACCESS_KEY_ID", "你的AWS_SECRET_ACCESS_KEY"); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) .build();
环境变量配置注意事项
如果通过环境变量传递凭证:
- 设置
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY(官方标准变量名是AWS_SECRET_ACCESS_KEY,而非你提到的AWS_SECRET_KEY,建议统一使用标准名避免兼容问题) - 不需要设置
AWS_SESSION_TOKEN,这个变量仅用于临时会话凭证场景(比如IAM角色临时凭证、STS获取的临时凭证)
更安全的替代方案
如果你的应用运行在AWS服务内部(比如EC2、ECS、Lambda),建议避免硬编码或手动配置长期凭证,直接为资源绑定IAM角色,AWS SDK会自动从实例元数据或服务环境中获取临时凭证,无需手动配置任何环境变量或凭证参数,代码可以简化为:
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
内容的提问来源于stack exchange,提问作者Nunyet Calçada
相关产品推荐
相关产品推荐

