在Minio以STS方式获得临时凭据过程

 更新时间:2026年01月06日 08:37:38   作者:兔子先生°  
MinIO通过STS(Security Token Service)机制提供临时访问凭证,提升安全性,临时凭证具有时效性、权限受限和不可长期持有的特点,有效避免长期密钥泄露和精细化权限控制,MinIO兼容AWSS3的STS API,无需额外部署组件,通过创建策略和用户并绑定策略

前言

在使用对象存储服务(如MinIO)时,安全性始终是首要考虑的问题。直接将长期访问密钥(Access Key 和 Secret Key)暴露给前端应用或不可信的客户端,存在极大的安全风险——一旦泄露,攻击者可能长期非法访问存储资源。

为了解决这一问题,MinIO 提供了基于 ​​STS(Security Token Service,安全令牌服务)​​ 的临时凭据机制,允许用户动态获取具有有限权限和有效期的临时访问凭证,既满足业务需求,又大幅提升安全性。

一、STS 临时凭据的核心概念

什么是 STS?

STS 是一种安全服务,允许用户通过调用接口动态申请临时访问凭证(包括临时 Access Key、Secret Key 和 Security Token)。这些临时凭证具有以下特性:

  • ​​时效性​​:默认有效期较短(如 15 分钟~1 小时),过期后自动失效。
  • 权限受限​​:临时凭证的权限由关联的 ​​策略(Policy)​​ 严格限制,仅能执行被明确授权的操作(例如仅允许上传到特定 Bucket)。
  • ​​不可长期持有​​:无法像长期密钥一样长期使用,需每次使用时重新申请。

为什么需要 STS?

  • 避免长期密钥泄露​​:前端应用(如 Web/移动端)无需直接接触长期 Access Key,降低因代码泄露导致的数据风险。​​
  • 精细化权限控制​​:通过策略动态定义临时凭证的权限范围(例如“仅允许上传图片到 user-uploads/目录”)。
  • ​​符合最小权限原则​​:临时凭证仅授予完成当前任务所需的最小权限,减少攻击面

二、MinIO 对 STS 的支持

MinIO 完全兼容 AWS S3 的 STS API(基于 AWS Signature V4),因此可以直接使用 AWS 官方文档中的 STS 接口规范(如 AssumeRole)。

MinIO 的 STS 服务默认内置于服务中,无需额外部署组件,只需正确配置即可使用。

关键点:

  • MinIO 的 STS 接口地址通常与主服务一致(如 http://minio.example.com),通过特定路径(如 /sts)访问。
  • 需要为 STS 操作配置一个 ​​角色(Role)​​ 或 ​​策略模板​​,用于定义临时凭证的权限。
  • 客户端通过调用 AssumeRole接口(或其他 STS 接口,如 GetFederationToken),传入角色信息及可选参数(如会话名称),获取临时凭证。

三、配置

1.创建策略


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        }
    ]
}

2.创建用户,绑定策略


3.通过Java 获得凭据

    public CredentialsToken getCredentials() {
        try {
            AssumeRoleProvider provider = new AssumeRoleProvider(OssConfiguration.endpoint, OssConfiguration.stsUser,
                    OssConfiguration.stsPassword, Math.toIntExact(OssConfiguration.expire),
                    null, OssConfiguration.region, null, null, null, null);
            Credentials credential = provider.fetch();
            return new CredentialsToken(credential.accessKey(), credential.secretKey(), credential.sessionToken(), OssConfiguration.expire);
        } catch (NoSuchAlgorithmException e) {
            log.debug("Failed to obtain sts.");
            e.printStackTrace();
        }
        return null;
    }

总结

通过 MinIO 的 STS 机制,开发者可以安全地实现“按需授权、临时访问”的对象存储方案,有效平衡业务灵活性与数据安全性。

无论是前端直传、第三方集成还是多租户场景,STS 都是推荐的实践方式。结合自定义策略和合理的有效期设置,能够进一步降低安全风险,构建可靠的云存储架构。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot使用filter获取自定义请求头的实现代码

    springboot使用filter获取自定义请求头的实现代码

    这篇文章主要介绍了springboot使用filter获取自定义请求头的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • Spring Data JPA 简单查询--方法定义规则(详解)

    Spring Data JPA 简单查询--方法定义规则(详解)

    下面小编就为大家带来一篇Spring Data JPA 简单查询--方法定义规则(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • java文件操作工具类

    java文件操作工具类

    这篇文章主要为大家介绍了一个非常详细的java文件操作工具类,具有很强的实用性,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Spring @Lookup深入分析实现原理

    Spring @Lookup深入分析实现原理

    这篇文章主要介绍了Spring @Lookup实现原理,我们知道在spring容器中单独的一个抽象类是不能成为一个bean的,那么有没有办法呢?这个时候我们可以使用Lookup注解
    2023-01-01
  • Java源码解析CopyOnWriteArrayList的讲解

    Java源码解析CopyOnWriteArrayList的讲解

    今天小编就为大家分享一篇关于Java源码解析CopyOnWriteArrayList的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • JavaWeb的监听器和过滤器你了解吗

    JavaWeb的监听器和过滤器你了解吗

    这篇文章主要为大家详细介绍了JavaWeb的监听器和过滤器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Knife4j文档请求异常问题及解决过程

    Knife4j文档请求异常问题及解决过程

    解决再学习黑马苍穹外卖项目Swagger时遇到的Knife4j请求异常问题,通过自检、检查SpringBoot版本兼容性、更改项目SpringBoot版本和启动项目等步骤,最终成功解决并访问到Swagger接口页面
    2026-05-05
  • Java实现用Mysql存取图片操作实例

    Java实现用Mysql存取图片操作实例

    这篇文章主要介绍了Java实现用Mysql存取图片操作实例,本文讲解了使用BLOB类型保存和读取图片的代码实例,需要的朋友可以参考下
    2015-06-06
  • @PathVariable和@RequestParam传参为空问题及解决

    @PathVariable和@RequestParam传参为空问题及解决

    这篇文章主要介绍了@PathVariable和@RequestParam传参为空问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java Swing JSlider滑块的实现示例

    Java Swing JSlider滑块的实现示例

    这篇文章主要介绍了Java Swing JSlider滑块的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论