在Minio以STS方式獲得臨時(shí)憑據(jù)過(guò)程
前言
在使用對(duì)象存儲(chǔ)服務(wù)(如MinIO)時(shí),安全性始終是首要考慮的問(wèn)題。直接將長(zhǎng)期訪問(wèn)密鑰(Access Key 和 Secret Key)暴露給前端應(yīng)用或不可信的客戶端,存在極大的安全風(fēng)險(xiǎn)——一旦泄露,攻擊者可能長(zhǎng)期非法訪問(wèn)存儲(chǔ)資源。
為了解決這一問(wèn)題,MinIO 提供了基于 ??STS(Security Token Service,安全令牌服務(wù))?? 的臨時(shí)憑據(jù)機(jī)制,允許用戶動(dòng)態(tài)獲取具有有限權(quán)限和有效期的臨時(shí)訪問(wèn)憑證,既滿足業(yè)務(wù)需求,又大幅提升安全性。
一、STS 臨時(shí)憑據(jù)的核心概念
什么是 STS?
STS 是一種安全服務(wù),允許用戶通過(guò)調(diào)用接口動(dòng)態(tài)申請(qǐng)臨時(shí)訪問(wèn)憑證(包括臨時(shí) Access Key、Secret Key 和 Security Token)。這些臨時(shí)憑證具有以下特性:
- ??時(shí)效性??:默認(rèn)有效期較短(如 15 分鐘~1 小時(shí)),過(guò)期后自動(dòng)失效。
- 權(quán)限受限??:臨時(shí)憑證的權(quán)限由關(guān)聯(lián)的 ??策略(Policy)?? 嚴(yán)格限制,僅能執(zhí)行被明確授權(quán)的操作(例如僅允許上傳到特定 Bucket)。
- ??不可長(zhǎng)期持有??:無(wú)法像長(zhǎng)期密鑰一樣長(zhǎng)期使用,需每次使用時(shí)重新申請(qǐng)。
為什么需要 STS?
- 避免長(zhǎng)期密鑰泄露??:前端應(yīng)用(如 Web/移動(dòng)端)無(wú)需直接接觸長(zhǎng)期 Access Key,降低因代碼泄露導(dǎo)致的數(shù)據(jù)風(fēng)險(xiǎn)。??
- 精細(xì)化權(quán)限控制??:通過(guò)策略動(dòng)態(tài)定義臨時(shí)憑證的權(quán)限范圍(例如“僅允許上傳圖片到 user-uploads/目錄”)。
- ??符合最小權(quán)限原則??:臨時(shí)憑證僅授予完成當(dāng)前任務(wù)所需的最小權(quán)限,減少攻擊面
二、MinIO 對(duì) STS 的支持
MinIO 完全兼容 AWS S3 的 STS API(基于 AWS Signature V4),因此可以直接使用 AWS 官方文檔中的 STS 接口規(guī)范(如 AssumeRole)。
MinIO 的 STS 服務(wù)默認(rèn)內(nèi)置于服務(wù)中,無(wú)需額外部署組件,只需正確配置即可使用。
關(guān)鍵點(diǎn):
- MinIO 的 STS 接口地址通常與主服務(wù)一致(如 http://minio.example.com),通過(guò)特定路徑(如 /sts)訪問(wèn)。
- 需要為 STS 操作配置一個(gè) ??角色(Role)?? 或 ??策略模板??,用于定義臨時(shí)憑證的權(quán)限。
- 客戶端通過(guò)調(diào)用 AssumeRole接口(或其他 STS 接口,如 GetFederationToken),傳入角色信息及可選參數(shù)(如會(huì)話名稱),獲取臨時(shí)憑證。
三、配置
1.創(chuàng)建策略


{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
2.創(chuàng)建用戶,綁定策略


3.通過(guò)Java 獲得憑據(jù)
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;
}
總結(jié)
通過(guò) MinIO 的 STS 機(jī)制,開(kāi)發(fā)者可以安全地實(shí)現(xiàn)“按需授權(quán)、臨時(shí)訪問(wèn)”的對(duì)象存儲(chǔ)方案,有效平衡業(yè)務(wù)靈活性與數(shù)據(jù)安全性。
無(wú)論是前端直傳、第三方集成還是多租戶場(chǎng)景,STS 都是推薦的實(shí)踐方式。結(jié)合自定義策略和合理的有效期設(shè)置,能夠進(jìn)一步降低安全風(fēng)險(xiǎn),構(gòu)建可靠的云存儲(chǔ)架構(gòu)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot使用filter獲取自定義請(qǐng)求頭的實(shí)現(xiàn)代碼
這篇文章主要介紹了springboot使用filter獲取自定義請(qǐng)求頭的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
Spring Data JPA 簡(jiǎn)單查詢--方法定義規(guī)則(詳解)
下面小編就為大家?guī)?lái)一篇Spring Data JPA 簡(jiǎn)單查詢--方法定義規(guī)則(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
Spring @Lookup深入分析實(shí)現(xiàn)原理
這篇文章主要介紹了Spring @Lookup實(shí)現(xiàn)原理,我們知道在spring容器中單獨(dú)的一個(gè)抽象類是不能成為一個(gè)bean的,那么有沒(méi)有辦法呢?這個(gè)時(shí)候我們可以使用Lookup注解2023-01-01
Java源碼解析CopyOnWriteArrayList的講解
今天小編就為大家分享一篇關(guān)于Java源碼解析CopyOnWriteArrayList的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
JavaWeb的監(jiān)聽(tīng)器和過(guò)濾器你了解嗎
這篇文章主要為大家詳細(xì)介紹了JavaWeb的監(jiān)聽(tīng)器和過(guò)濾器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02
Knife4j文檔請(qǐng)求異常問(wèn)題及解決過(guò)程
解決再學(xué)習(xí)黑馬蒼穹外賣項(xiàng)目Swagger時(shí)遇到的Knife4j請(qǐng)求異常問(wèn)題,通過(guò)自檢、檢查SpringBoot版本兼容性、更改項(xiàng)目SpringBoot版本和啟動(dòng)項(xiàng)目等步驟,最終成功解決并訪問(wèn)到Swagger接口頁(yè)面2026-05-05
Java實(shí)現(xiàn)用Mysql存取圖片操作實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)用Mysql存取圖片操作實(shí)例,本文講解了使用BLOB類型保存和讀取圖片的代碼實(shí)例,需要的朋友可以參考下2015-06-06
@PathVariable和@RequestParam傳參為空問(wèn)題及解決
這篇文章主要介紹了@PathVariable和@RequestParam傳參為空問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Java Swing JSlider滑塊的實(shí)現(xiàn)示例
這篇文章主要介紹了Java Swing JSlider滑塊的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12

