之前章節只用到了RAM的子帳號功能,這些子帳號都是可以長期正常使用的,發生泄露之後如果無法及時解除許可權的話會很危險。

繼續上文的例子,當開發人員的app被用戶使用之後,用戶的數據要上傳到OSS的ram-test-app這個Bucket,當app的用戶數據很多的時候,需要考慮如何才能安全的授權給眾多的app用戶上傳數據呢,以及如何保證多個用戶之間儲存的隔離。

類似這種需要臨時訪問的場景可以使用STS來完成。STS可以指定複雜的策略來對特定的用戶進行限制,僅提供最小的許可權。

建立角色

繼續上一章節的例子,App用戶有一個名為ram-test-app的Bucket來保存個人數據。建立角色的步驟如下:

  1. 按照上文的流程建立一個子帳號ram_test_app,不需要賦予任何許可權,因為在扮演角色的時候會自動獲得被扮演角色的所有許可權。
  2. 建立角色。這裡建立兩個角色,一個用於用戶讀取等操作,一個用於用戶上傳檔案。
    • 開啟存取控制的管理主控台,選擇角色管理 > 新建角色
    • 選擇角色類型。這裡選擇使用者角色

    • 填寫類型資訊。因為角色是被阿里雲帳號使用過的,因此選擇預設的即可。
    • 配置角色基本資料。
  3. 建立完角色之後,角色是沒有任何許可權的,因此這裡和上文所述一樣需要新建一個自訂的授權策略。授權策略如下:
    {
    "Version": "1",
    "Statement": [
     {
       "Effect": "Allow",
       "Action": [
         "oss:ListObjects",
         "oss:GetObject"
       ],
       "Resource": [
         "acs:oss:*:*:ram-test-app",
         "acs:oss:*:*:ram-test-app/*"
       ]
     }
    ]
    }

    表示對ram-test-app擁有隻讀許可權。

  4. 建立完成後,即可在角色管理裡面給RamTestAppReadOnly添加上ram-test-app的只讀授權。

  5. 按照上文同樣的方法,建立一個RamTestAppWrite的角色,並且賦予寫ram-test-app的自訂授權,授權如下:
    {
    "Version": "1",
    "Statement": [
     {
       "Effect": "Allow",
       "Action": [
         "oss:DeleteObject",
         "oss:ListParts",
         "oss:AbortMultipartUpload",
         "oss:PutObject"
       ],
       "Resource": [
         "acs:oss:*:*:ram-test-app",
         "acs:oss:*:*:ram-test-app/*"
       ]
     }
    ]
    }

    目前新建的兩個角色為:RamTestAppReadOnly和RamTestAppWrite,分別表示了對於ram-test-app的讀寫權限。



臨時授權訪問

建立了角色之後,接下來就可以使用臨時授權來訪問OSS了。

準備工作

在正式使用之前,還有一些工作需要完成。扮演角色也是需要授權的,否則任意子帳號都可以扮演這些角色會帶來不可預計的風險,因此有扮演對應角色需求的子帳號需要顯式的配置許可權。

  1. 在授權管理原則中新建兩個自訂的授權策略,分別如下:
    {
    "Statement": [
     {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Resource": "acs:ram::1894xxxxxx722283:role/ramtestappreadonly"
     }
    ],
    "Version": "1"
    }

    使用相同的方法建立另一個自訂授權策略:

    {
    "Statement": [
     {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Resource": "acs:ram::1894xxxxxx722283:role/ramtestappwrite"
     }
    ],
    "Version": "1"
    }

    這裡Resource後面填寫的內容表示某個角色ID,角色的ID可以在角色管理 > 角色詳情中找到。

  2. 將這兩個授權賦給ram_test_app這個帳號。
使用STS授權訪問

現在一切準備就緒,可以正式使用STS來授權訪問了。

這裡使用一個簡單的STS的python命令列工具sts.py。 具體的調用方法如下:

$python ./sts.py AssumeRole RoleArn=acs:ram::1894xxxxxx722283:role/ramtestappreadonly RoleSessionName=usr001 Policy='{"Version":"1","Statement":[{"Effect":"Allow","Action":["oss:ListObjects","oss:GetObject"],"Resource":["acs:oss:*:*:ram-test-app","acs:oss:*:*:ram-test-app/*"]}]}' DurationSeconds=1000 --id=id --secret=secret
  • RoleArn表示的是需要扮演的角色ID,角色的ID可以在角色管理 > 角色詳情中找到。
  • RoleSessionName是一個用來標示臨時憑證的名稱,一般來說建議使用不同的應用程式用戶來區分。
  • Policy表示的是在扮演角色的時候額外加上的一個許可權限制。
  • DurationSeconds指的是臨時憑證的有效期間,單位是s,最小為900,最大為3600。
  • id和secret表示的是需要扮演角色的子帳號的AccessKey。

這裡需要解釋一下Policy,這裡傳入的Policy是用來限制扮演角色之後的臨時憑證的許可權。最後臨時憑證獲得的許可權是角色的許可權和這裡傳入的Policy的交集。

在扮演角色的時候傳入Policy的原因是為了靈活性,比如上傳檔案的時候可以根據不同的用戶添加對於上傳檔案路徑的限制,這點會在下面的例子展示。

現在我們可以來實際實驗一下STS的作用,作為實驗用的Bucket,先在控制台向ram-test-app傳入一個test.txt的文本,內容為ststest。

首先使用ram_test_app這個子帳號直接來訪問。請將下面的AccessKey換成自己實驗用的AccessKey。

[admin@NGIS-CWWF344M01C /home/admin/oss_test]
$./osscmd get oss://ram-test-app/test.txt test.txt --host=oss-cn-hangzhou.aliyuncs.com -i oOhue******Frogv -k OmVwFJO3qcT0******FhOYpg3p0KnA
Error Headers:
[('content-length', '229'), ('server', 'AliyunOSS'), ('connection', 'keep-alive'), ('x-oss-request-id', '564A94D444F4D8B2225E4AFE'), ('date', 'Tue, 17 Nov 2015 02:45:40 GMT'), ('content-type', 'application/xml')]
Error Body:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>AccessDenied</Message>
  <RequestId>564A94D444F4D8B2225E4AFE</RequestId>
  <HostId>ram-test-app.oss-cn-hangzhou.aliyuncs.com</HostId>
</Error>
Error Status:
403
get Failed!
[admin@NGIS-CWWF344M01C /home/admin/oss_test]
$./osscmd put test.txt  oss://ram-test-app/test.txt  --host=oss-cn-hangzhou.aliyuncs.com -i oOhue******Frogv -k OmVwFJO3qcT0******FhOYpg3p0KnA
100%  Error Headers:
[('content-length', '229'), ('server', 'AliyunOSS'), ('connection', 'keep-alive'), ('x-oss-request-id', '564A94E5B1119B445B9F8C3A'), ('date', 'Tue, 17 Nov 2015 02:45:57 GMT'), ('content-type', 'application/xml')]
Error Body:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>AccessDenied</Message>
  <RequestId>564A94E5B1119B445B9F8C3A</RequestId>
  <HostId>ram-test-app.oss-cn-hangzhou.aliyuncs.com</HostId>
</Error>
Error Status:
403
put Failed!

因為ram_test_app這個子帳號沒有存取權限,因此訪問失敗。

使用臨時授權下載

現在使用STS來下載檔案,這裡為了簡單,傳入的Policy和角色的Policy一致,過期時間使用預設的3600s,App的用戶假定為usr001。步驟如下:

  1. 使用STS來獲取臨時的憑證。
    [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $python ./sts.py AssumeRole RoleArn=acs:ram::1894xxxxxx722283:role/ramtestappreadonly RoleSessionName=usr001 Policy='{"Version":"1","Statement":[{"Effect":"Allow","Action":["oss:ListObjects","oss:GetObject"],"Resource":["acs:oss:*:*:ram-test-app","acs:oss:*:*:ram-test-app/*"]}]}'  --id=oOhue******Frogv --secret=OmVwFJO3qcT0******FhOYpg3p0KnA
     https://sts.aliyuncs.com/?SignatureVersion=1.0&Format=JSON&Timestamp=2015-11-17T03%3A07%3A25Z&RoleArn=acs%3Aram%3A%3A1894xxxxxx722283%3Arole%2Framtestappreadonly&RoleSessionName=usr001&AccessKeyId=oOhu******3Frogv&Policy=%7B%22Version%22%3A%221%22%2C%22Statement%22%3A%5B%7B%22Effect%22%3A%22Allow%22%2C%22Action%22%3A%5B%22oss%3AListObjects%22%2C%22oss%3AGetObject%22%5D%2C%22Resource%22%3A%5B%22acs%3Aoss%3A%2A%3A%2A%3Aram-test-app%22%2C%22acs%3Aoss%3A%2A%3A%2A%3Aram-test-app%2F%2A%22%5D%7D%5D%7D&SignatureMethod=HMAC-SHA1&Version=2015-04-01&Signature=bshxPZpwRJv5ch3SjaBiXLodwq0%3D&Action=AssumeRole&SignatureNonce=53e1be9c-8cd8-11e5-9b86-008cfa5e4938
     {
       "AssumedRoleUser": {
         "Arn": "acs:ram::1894xxxxxx722283:role/ramtestappreadonly/usr001", 
         "AssumedRoleId": "317446347657426289:usr001"
       }, 
       "Credentials": {
         "AccessKeyId": "STS.3mQEbNf******wa180Le", 
         "AccessKeySecret": "B1w7rCbR4dzGwNYJ******3PiPqKZ3gjQhAxb6mB", 
         "Expiration": "2015-11-17T04:07:25Z", 
         "SecurityToken": "CAESvAMIARKAASQQ******7683CGlhdGsv2/di8uI+X******DxM5FTd0fp5wpPK/7UctYH2MJ///c4yMN1PUCcEHI1zppCINmpDG2XeNA3OS16JwS6ESmI50sHyWBmsYkCJW15gXnfhz/OK+mSp1bYxlfB33qfgCFe97Ijeuj8RMgqFx0Hny2BzGhhTVFMuM21RRWJOZnR5Yzl1T3dhMTgwTGUiEjMxNzQ0NjM0NzY1NzQyNjI4OSoGdXNyMDAxMJTrgJ2RKjoGUnNhTUQ1QpsBCgExGpUBCgVBbG******CgxBY3Rpb25FcXVhbHMSBkFjdGlvbhogCg9vc3M6TGlzdE9iamVjdHMKDW9zczpHZXRPYmplY3QSUgoOUmVzb3VyY2VFcXVhbHMSCFJlc291cmNlGjYKGGFjczpvc3M6KjoqOnJhbS10ZXN0LWFwcAoaYWNzOm9zczoq******FtLXRlc3QtYXBwLypKEDE4OTQxODk3Njk3MjIyODNSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzE3NDQ2MzQ3NjU3NDI2Mjg5chJyYW10ZXN0YXBwcmVhZG9ubHk="
       }, 
       "RequestId": "8C009F64-F19D-4EC1-A3AD-7A718CD0B49B"
     }
  2. 使用臨時憑證來下載檔案,這裡sts_token就是上面STS返回的SecurityToken。
    [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $./osscmd get oss://ram-test-app/test.txt test.txt --host=oss-cn-hangzhou.aliyuncs.com -i STS.3mQEbNf******wa180Le -k B1w7rCbR4dzGwNYJ******3PiPqKZ3gjQhAxb6mB --sts_token=CAESvAMIARKAASQQ******7683CGlhdGsv2/di8uI+X******DxM5FTd0fp5wpPK/7UctYH2MJ///c4yMN1PUCcEHI1zppCINmpDG2XeNA3OS16JwS6ESmI50sHyWBmsYkCJW15gXnfhz/OK+mSp1bYxlfB33qfgCFe97Ijeuj8RMgqFx0Hny2BzGhhTVFMuM21RRWJOZnR5Yzl1T3dhMTgwTGUiEjMxNzQ0NjM0NzY1NzQyNjI4OSoGdXNyMDAxMJTrgJ2RKjoGUnNhTUQ1QpsBCgExGpUBCgVBbG******CgxBY3Rpb25FcXVhbHMSBkFjdGlvbhogCg9vc3M6TGlzdE9iamVjdHMKDW9zczpHZXRPYmplY3QSUgoOUmVzb3VyY2VFcXVhbHMSCFJlc291cmNlGjYKGGFjczpvc3M6KjoqOnJhbS10ZXN0LWFwcAoaYWNzOm9zczoq******FtLXRlc3QtYXBwLypKEDE4OTQxODk3Njk3MjIyODNSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzE3NDQ2MzQ3NjU3NDI2Mjg5chJyYW10ZXN0YXBwcmVhZG9ubHk=
     100%  The object test.txt is downloaded to test.txt, please check.
     0.061(s) elapsed
  3. 可見已經可以使用臨時憑證來下載檔案了,那再試著使用這個憑證來上傳。
    [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $./osscmd put test.txt oss://ram-test-app/test.txt  --host=oss-cn-hangzhou.aliyuncs.com -i STS.3mQEbNf******wa180Le -k B1w7rCbR4dzGwNYJ******3PiPqKZ3gjQhAxb6mB --sts_token=CAESvAMIARKAASQQ******7683CGlhdGsv2/di8uI+X******DxM5FTd0fp5wpPK/7UctYH2MJ///c4yMN1PUCcEHI1zppCINmpDG2XeNA3OS16JwS6ESmI50sHyWBmsYkCJW15gXnfhz/OK+mSp1bYxlfB33qfgCFe97Ijeuj8RMgqFx0Hny2BzGhhTVFMuM21RRWJOZnR5Yzl1T3dhMTgwTGUiEjMxNzQ0NjM0NzY1NzQyNjI4OSoGdXNyMDAxMJTrgJ2RKjoGUnNhTUQ1QpsBCgExGpUBCgVBbG******CgxBY3Rpb25FcXVhbHMSBkFjdGlvbhogCg9vc3M6TGlzdE9iamVjdHMKDW9zczpHZXRPYmplY3QSUgoOUmVzb3VyY2VFcXVhbHMSCFJlc291cmNlGjYKGGFjczpvc3M6KjoqOnJhbS10ZXN0LWFwcAoaYWNzOm9zczoq******FtLXRlc3QtYXBwLypKEDE4OTQxODk3Njk3MjIyODNSBTI2ODQyWg9Bc3N1bWVkUm9sZVVzZXJgAGoSMzE3NDQ2MzQ3NjU3NDI2Mjg5chJyYW10ZXN0YXBwcmVhZG9ubHk=      
     100%  Error Headers:
     [('content-length', '254'), ('server', 'AliyunOSS'), ('connection', 'keep-alive'), ('x-oss-request-id', '564A9A2A1790CF0F53C15C82'), ('date', 'Tue, 17 Nov 2015 03:08:26 GMT'), ('content-type', 'application/xml')]
     Error Body:
     <?xml version="1.0" encoding="UTF-8"?>
     <Error>
       <Code>AccessDenied</Code>
       <Message>Access denied by authorizer's policy.</Message>
       <RequestId>564A9A2A1790CF0F53C15C82</RequestId>
       <HostId>ram-test-app.oss-cn-hangzhou.aliyuncs.com</HostId>
     </Error>
     Error Status:
     403
     put Failed!

    由於扮演的角色只有下載的許可權,因此上傳失敗。

使用臨時授權上傳

現在可以來實驗一下使用STS上傳。步驟如下:

  1. 獲取STS的臨時憑證,App用戶為usr001。
    [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $python ./sts.py AssumeRole RoleArn=acs:ram::1894xxxxxx722283:role/ramtestappwrite RoleSessionName=usr001 Policy='{"Version":"1","Statement":[{"Effect":"Allow","Action":["oss:PutObject"],"Resource":["acs:oss:*:*:ram-test-app/usr001/*"]}]}'  --id=oOhue******Frogv --secret=OmVwFJO3qcT0******FhOYpg3p0KnA
     https://sts.aliyuncs.com/?SignatureVersion=1.0&Format=JSON&Timestamp=2015-11-17T03%3A16%3A10Z&RoleArn=acs%3Aram%3A%3A1894xxxxxx722283%3Arole%2Framtestappwrite&RoleSessionName=usr001&AccessKeyId=oOhu******3Frogv&Policy=%7B%22Version%22%3A%221%22%2C%22Statement%22%3A%5B%7B%22Effect%22%3A%22Allow%22%2C%22Action%22%3A%5B%22oss%3APutObject%22%5D%2C%22Resource%22%3A%5B%22acs%3Aoss%3A%2A%3A%2A%3Aram-test-app%2Fusr001%2F%2A%22%5D%7D%5D%7D&SignatureMethod=HMAC-SHA1&Version=2015-04-01&Signature=Y0OPUoL1PrCqX4X6A3%2FJvgXuS6c%3D&Action=AssumeRole&SignatureNonce=8d0798a8-8cd9-11e5-9f49-008cfa5e4938
     {
       "AssumedRoleUser": {
         "Arn": "acs:ram::1894xxxxxx722283:role/ramtestappwrite/usr001", 
         "AssumedRoleId": "355407847660029428:usr001"
       }, 
       "Credentials": {
         "AccessKeyId":  "STS.rtfx13******NlIJlS4U", 
         "AccessKeySecret": "2fsaM8E2maB2dn******wpsKTyK4ajo7TxFr0zIM", 
         "Expiration": "2015-11-17T04:16:10Z", 
         "SecurityToken": "CAESkwMIARKAAUh3/Uzcg13******y0IZjGewMpg31ITxCleBFU1eO/3Sgpudid+GVs+Olvu1vXJn******a8azKJKtzV0oKSy+mwUrxSvUSRVDntrs78CsNfWoOJUMJKjLIxdWnGi1pgxJCBzNZ2YV/6ycTaZySSE1V6kqQ7A+GPwY******LpdGhhTVFMucnRmeDEzRFlNVWJjTmxJSmxTNFUiEjM1NTQwNzg0NzY2MDAyOTQyOCoGdXNyMDAxMOPzoJ2RKjoGUnNhTUQ1QnYKATEacQoFQWxsb3cSJwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aDwoNb3NzOlB1dE9iamVjdBI/Cg5SZXNvdXJjZUVxdWFscxIIUmVzb3VyY2UaIwohYWNzOm9zczoqOio6cmFtLXRlc3Qt******VzcjAwMS8qShAxODk0MTg5NzY5NzIyMjgzUgUyNjg0MloPQXNzdW1lZFJvbGVVc2VyYABqEjM1NTQwNzg0NzY2MDAyOTQyOHIPcmFtdGVzdGFwcHdyaXRl"
       }, 
       "RequestId": "19407707-54B2-41AD-AAF0-FE87E8870B0D"
     }
  2. 實驗一下能否使用這個憑證來上傳下載。
    [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $./osscmd get oss://ram-test-app/test.txt test.txt --host=oss-cn-hangzhou.aliyuncs.com -i STS.rtfx13******NlIJlS4U -k 2fsaM8E2maB2dn******wpsKTyK4ajo7TxFr0zIM --sts_token=CAESkwMIARKAAUh3/Uzcg13******y0IZjGewMpg31ITxCleBFU1eO/3Sgpudid+GVs+Olvu1vXJn******a8azKJKtzV0oKSy+mwUrxSvUSRVDntrs78CsNfWoOJUMJKjLIxdWnGi1pgxJCBzNZ2YV/6ycTaZySSE1V6kqQ7A+GPwY******LpdGhhTVFMucnRmeDEzRFlNVWJjTmxJSmxTNFUiEjM1NTQwNzg0NzY2MDAyOTQyOCoGdXNyMDAxMOPzoJ2RKjoGUnNhTUQ1QnYKATEacQoFQWxsb3cSJwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aDwoNb3NzOlB1dE9iamVjdBI/Cg5SZXNvdXJjZUVxdWFscxIIUmVzb3VyY2UaIwohYWNzOm9zczoqOio6cmFtLXRlc3Qt******VzcjAwMS8qShAxODk0MTg5NzY5NzIyMjgzUgUyNjg0MloPQXNzdW1lZFJvbGVVc2VyYABqEjM1NTQwNzg0NzY2MDAyOTQyOHIPcmFtdGVzdGFwcHdyaXRl
     Error Headers:
     [('content-length', '254'), ('server', 'AliyunOSS'), ('connection', 'keep-alive'), ('x-oss-request-id', '564A9C31FFFC811F24B6E7E3'), ('date', 'Tue, 17 Nov 2015 03:17:05 GMT'), ('content-type', 'application/xml')]
     Error Body:
     <?xml version="1.0" encoding="UTF-8"?>
     <Error>
       <Code>AccessDenied</Code>
       <Message>Access denied by authorizer's policy.</Message>
       <RequestId>564A9C31FFFC811F24B6E7E3</RequestId>
       <HostId>ram-test-app.oss-cn-hangzhou.aliyuncs.com</HostId>
     </Error>
     Error Status:
     403
     get Failed!
     [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $./osscmd put test.txt oss://ram-test-app/test.txt  --host=oss-cn-hangzhou.aliyuncs.com -i STS.rtfx13******NlIJlS4U -k 2fsaM8E2maB2dn******wpsKTyK4ajo7TxFr0zIM --sts_token=CAESkwMIARKAAUh3/Uzcg13******y0IZjGewMpg31ITxCleBFU1eO/3Sgpudid+GVs+Olvu1vXJn******a8azKJKtzV0oKSy+mwUrxSvUSRVDntrs78CsNfWoOJUMJKjLIxdWnGi1pgxJCBzNZ2YV/6ycTaZySSE1V6kqQ7A+GPwY******LpdGhhTVFMucnRmeDEzRFlNVWJjTmxJSmxTNFUiEjM1NTQwNzg0NzY2MDAyOTQyOCoGdXNyMDAxMOPzoJ2RKjoGUnNhTUQ1QnYKATEacQoFQWxsb3cSJwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aDwoNb3NzOlB1dE9iamVjdBI/Cg5SZXNvdXJjZUVxdWFscxIIUmVzb3VyY2UaIwohYWNzOm9zczoqOio6cmFtLXRlc3Qt******VzcjAwMS8qShAxODk0MTg5NzY5NzIyMjgzUgUyNjg0MloPQXNzdW1lZFJvbGVVc2VyYABqEjM1NTQwNzg0NzY2MDAyOTQyOHIPcmFtdGVzdGFwcHdyaXRl
     100%  Error Headers:
     [('content-length', '254'), ('server', 'AliyunOSS'), ('connection', 'keep-alive'), ('x-oss-request-id', '564A9C3FB8DE437A91B16772'), ('date', 'Tue, 17 Nov 2015 03:17:19 GMT'), ('content-type', 'application/xml')]
     Error Body:
     <?xml version="1.0" encoding="UTF-8"?>
     <Error>
       <Code>AccessDenied</Code>
       <Message>Access denied by authorizer's policy.</Message>
       <RequestId>564A9C3FB8DE437A91B16772</RequestId>
       <HostId>ram-test-app.oss-cn-hangzhou.aliyuncs.com</HostId>
     </Error>
     Error Status:
     403
     put Failed!

    這裡出現了問題,上傳test.txt失敗了。將本小節開始的時候傳入的Policy格式化之後如下:

    {
         "Version": "1",
             "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "oss:PutObject"
                     ],
                 "Resource": [
                     "acs:oss:*:*:ram-test-app/usr001/*"
                     ]
             }
         ]
     }

    這個Policy的意義是僅允許用戶向ram-test-app這個Bucket上傳類似usr001/的檔案,如果App用戶是usr002的時候,就可以修改Policy為僅允許上傳類似usr002/這種類型的檔案,通過這種對不同的App用戶設定不同的Policy的方式,可以做到不同App用戶之間擁有獨立的儲存空間互不干擾的目的。

  3. 重新實驗,將上傳的目標指定為ram-test-app/usr001/test.txt。
    [admin@NGIS-CWWF344M01C /home/admin/oss_test]
     $./osscmd put test.txt oss://ram-test-app/usr001/test.txt  --host=oss-cn-hangzhou.aliyuncs.com -i STS.rtfx13******NlIJlS4U -k 2fsaM8E2maB2dn******wpsKTyK4ajo7TxFr0zIM --sts_token=CAESkwMIARKAAUh3/Uzcg13******y0IZjGewMpg31ITxCleBFU1eO/3Sgpudid+GVs+Olvu1vXJn******a8azKJKtzV0oKSy+mwUrxSvUSRVDntrs78CsNfWoOJUMJKjLIxdWnGi1pgxJCBzNZ2YV/6ycTaZySSE1V6kqQ7A+GPwY******LpdGhhTVFMucnRmeDEzRFlNVWJjTmxJSmxTNFUiEjM1NTQwNzg0NzY2MDAyOTQyOCoGdXNyMDAxMOPzoJ2RKjoGUnNhTUQ1QnYKATEacQoFQWxsb3cSJwoMQWN0aW9uRXF1YWxzEgZBY3Rpb24aDwoNb3NzOlB1dE9iamVjdBI/Cg5SZXNvdXJjZUVxdWFscxIIUmVzb3VyY2UaIwohYWNzOm9zczoqOio6cmFtLXRlc3Qt******VzcjAwMS8qShAxODk0MTg5NzY5NzIyMjgzUgUyNjg0MloPQXNzdW1lZFJvbGVVc2VyYABqEjM1NTQwNzg0NzY2MDAyOTQyOHIPcmFtdGVzdGFwcHdyaXRl
     100%  
     Object URL is: http://ram-test-app.oss-cn-hangzhou.aliyuncs.com/usr001%2Ftest.txt
     Object abstract path is: oss://ram-test-app/usr001/test.txt
     ETag is "946A0A1AC8245696B9C6A6F35942690B" 
     0.071(s) elapsed

    可見上傳成功了。

總結

本章主要介紹了使用STS來臨時授權使用者訪問OSS。在典型的移動開發場景中,使用STS可以做到不同的App用戶需要訪問App的時候,可以通過獲取到的臨時授權來訪問OSS。臨時授權可以指定過期時間,因此大大降低了泄露的危害。在獲取臨時授權的時候,可以根據App用戶的不同,傳入不同的授權策略來限制用戶的存取權限,比如限制用戶訪問的Object路徑,從而達到隔離不同App用戶的儲存空間的目的。