在Minio以STS方式獲得臨時(shí)憑據(jù)過程
前言
在使用對(duì)象存儲(chǔ)服務(wù)(如MinIO)時(shí),安全性始終是首要考慮的問題。直接將長期訪問密鑰(Access Key 和 Secret Key)暴露給前端應(yīng)用或不可信的客戶端,存在極大的安全風(fēng)險(xiǎn)——一旦泄露,攻擊者可能長期非法訪問存儲(chǔ)資源。
為了解決這一問題,MinIO 提供了基于 ??STS(Security Token Service,安全令牌服務(wù))?? 的臨時(shí)憑據(jù)機(jī)制,允許用戶動(dòng)態(tài)獲取具有有限權(quán)限和有效期的臨時(shí)訪問憑證,既滿足業(yè)務(wù)需求,又大幅提升安全性。
一、STS 臨時(shí)憑據(jù)的核心概念
什么是 STS?
STS 是一種安全服務(wù),允許用戶通過調(diào)用接口動(dòng)態(tài)申請(qǐng)臨時(shí)訪問憑證(包括臨時(shí) Access Key、Secret Key 和 Security Token)。這些臨時(shí)憑證具有以下特性:
- ??時(shí)效性??:默認(rèn)有效期較短(如 15 分鐘~1 小時(shí)),過期后自動(dòng)失效。
- 權(quán)限受限??:臨時(shí)憑證的權(quán)限由關(guān)聯(lián)的 ??策略(Policy)?? 嚴(yán)格限制,僅能執(zhí)行被明確授權(quán)的操作(例如僅允許上傳到特定 Bucket)。
- ??不可長期持有??:無法像長期密鑰一樣長期使用,需每次使用時(shí)重新申請(qǐng)。
為什么需要 STS?
- 避免長期密鑰泄露??:前端應(yīng)用(如 Web/移動(dòng)端)無需直接接觸長期 Access Key,降低因代碼泄露導(dǎo)致的數(shù)據(jù)風(fēng)險(xiǎn)。??
- 精細(xì)化權(quán)限控制??:通過策略動(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ù)中,無需額外部署組件,只需正確配置即可使用。
關(guān)鍵點(diǎn):
- MinIO 的 STS 接口地址通常與主服務(wù)一致(如 http://minio.example.com),通過特定路徑(如 /sts)訪問。
- 需要為 STS 操作配置一個(gè) ??角色(Role)?? 或 ??策略模板??,用于定義臨時(shí)憑證的權(quán)限。
- 客戶端通過調(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.通過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é)
通過 MinIO 的 STS 機(jī)制,開發(fā)者可以安全地實(shí)現(xiàn)“按需授權(quán)、臨時(shí)訪問”的對(duì)象存儲(chǔ)方案,有效平衡業(yè)務(wù)靈活性與數(shù)據(jù)安全性。
無論是前端直傳、第三方集成還是多租戶場景,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í)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
Spring Data JPA 簡單查詢--方法定義規(guī)則(詳解)
下面小編就為大家?guī)硪黄猄pring Data JPA 簡單查詢--方法定義規(guī)則(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
Spring @Lookup深入分析實(shí)現(xiàn)原理
這篇文章主要介紹了Spring @Lookup實(shí)現(xiàn)原理,我們知道在spring容器中單獨(dú)的一個(gè)抽象類是不能成為一個(gè)bean的,那么有沒有辦法呢?這個(gè)時(shí)候我們可以使用Lookup注解2023-01-01
Java源碼解析CopyOnWriteArrayList的講解
今天小編就為大家分享一篇關(guān)于Java源碼解析CopyOnWriteArrayList的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
Java實(shí)現(xiàn)用Mysql存取圖片操作實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)用Mysql存取圖片操作實(shí)例,本文講解了使用BLOB類型保存和讀取圖片的代碼實(shí)例,需要的朋友可以參考下2015-06-06
@PathVariable和@RequestParam傳參為空問題及解決
這篇文章主要介紹了@PathVariable和@RequestParam傳參為空問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Java Swing JSlider滑塊的實(shí)現(xiàn)示例
這篇文章主要介紹了Java Swing JSlider滑塊的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12

