STS臨時授權示例
更新時間 2024-09-19 16:53:53
最近更新時間: 2024-09-19 16:53:53
分享文章
本節主要介紹了STS臨時授權功能的典型場景和具體使用方法。
應用場景
某企業X開發了一款移動應用(App),并使用OOS服務。App需要直連OOS上傳或下載數據,但是App運行在用戶自己的移動設備上,這些設備不受企業X的控制。企業X有如下要求:
- 直傳數據:企業X不希望所有App都通過企業的服務端應用服務器(Application Server)來進行數據中轉,而希望能夠直連OOS上傳或下載數據。
- 安全管控:企業X不希望將訪問密鑰(AccessKey)保存到移動設備中,因為移動設備是歸屬于用戶控制,屬于不可信的運行環境。
- 風險控制:企業X希望將風險控制到最小,每個App直連OOS時都必須擁有最小的訪問權限且訪問時效需要很短。
前提條件
已開通對象存儲(經典版)Ⅰ型服務。
具體操作
應用服務器在OOS上為每個APP創建一個IAM用戶,并為每個IAM用戶附加最小的訪問權限(如調用STS接口、僅對自己目錄下的資源有所有權,對于其他用戶的目錄無權限)。當移動應用(App)直連OOS上傳或下載數據時,App需要向應用服務器申請訪問憑證。應用服務器以該APP的IAM用戶身份,調用STS API接口獲取臨時安全訪問憑證,并將臨時安全訪問憑證傳遞給App,App使用臨時安全訪問憑證訪問OOS。

具體步驟如下所示:
-
OOS為應用服務器創建IAM用戶并附加權限策略。具體策略可參考下列示例:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListAllBuckets", "Effect": "Allow", "Action": [ "oos:ListAllMyBucket" ], "Resource": "*" }, { "Sid": "AllowListYourselfFolder", "Effect": "Allow", "Action": [ "oos:ListBucket" ], "Resource": [ "arn:ctyun:oos::2hlo7dkswa22t:bucketname" ], "Condition": { "StringLike": { "oos:prefix": [ "${ctyun:username}/*" ] } } }, { "Sid": "AllowControleYourselfFolder", "Effect": "Allow", "Action": [ "oos:GetObject", "oos:ListMultipartUploadParts", "oos:DeleteObject", "oos:PutObject", "oos:DeleteMultipleObjects", "oos:AbortMultipartUpload" ], "Resource": [ "arn:ctyun:oos::2hlo7dkswa22t:bucketname/${ctyun:username}/*" ] }, { "Sid": "AllowCallSTS", "Effect": "Allow", "Action": [ "iam:GetSessionToken" ], "Resource": "*" } ] } -
APP向應用服務器申請臨時訪問憑證。
-
應用服務器調用STS接口獲取臨時安全訪問憑證。
請求示例POST / HTTP/1.1 Host: oos-cn-iam.ctyunapi.cn x-amz-date: Tue, 21 Aug 2012 17:54:50 GMT Content-MD5: 8dYiLewFWZyGgV2Q5FNI4W== Authorization:AWS fad0e782cd5132563e38:xQE0diMbLRepdf3YB+FIEXAMPLE= Content-Length: 445 Action=GetSessionToken&DurationSeconds=129600響應示例
HTTP/1.1 200 OK x-amz-request-id: 996c76696e6727732072657175657374 Date: Mon, 1 Nov 2010 20:34:56 GMT Content-Type:text/xml;charset=UTF-8 Content-Length: 533 Server: CTYUN <GetSessionTokenResponse> <GetSessionTokenResult> <Credentials> <SessionToken>8b2b75f5a04e458b0da3a01602*********************************************e78b089528b915c2</SessionToken> <AccessKeyId>sts.6************b7fd</AccessKeyId> <SecretAccessKey>17b69******************c15f</SecretAccessKey> <Expiration>2023-04-27T13:52:08.282Z</Expiration> </Credentials> </GetSessionTokenResult> <ResponseMetadata> <RequestId>62c80e3868a14804</RequestId> </ResponseMetadata> </GetSessionTokenResponse> -
應用服務器將獲取的臨時安全訪問憑證傳遞給APP。
-
APP使用臨時安全訪問憑證訪問OOS資源,進行數據直傳。
調用時輸入步驟3返回的信息:
AccessKeyId:sts.6************b7fd SecretAccessKey:17b69******************c15f SessionToken:8b2b75f5a04e458b0da3a01602*********************************************e78b089528b915c2
注意由于生成的臨時安全訪問憑證是默認繼承IAM用戶的權限,所以我們在為IAM用戶創建策略的時候,僅分配STS接口權限和所需操作的最小權限,不推薦分配CreateUser、CreateAccessKey、UpdateLoginProfile等權限,以防止臨時安全訪問憑證權限過大。