全部產品
Search
文件中心

Object Storage Service:使用STS訪問

更新時間:Aug 30, 2018

OSS可以通過阿里雲STS服務,臨時進行授權訪問。使用STS時請按以下步驟進行:

  1. 在官網控制台建立子帳號,參考OSS STS
  2. 在官網控制台建立STS角色並賦予子帳號扮演角色的許可權,參考OSS STS
  3. 使用子帳號的AccessKeyId/AccessKeySecret向STS申請臨時token。
  4. 使用臨時token中的認證資訊建立OSS的Client。
  5. 使用OSS的Client訪問OSS服務。

在使用STS訪問OSS時,需要設定stsToken參數,如下面的例子所示:

  1. let OSS = require('ali-oss');
  2. let STS = OSS.STS;
  3. let sts = new STS({
  4. accessKeyId: '<子帳號的AccessKeyId>',
  5. accessKeySecret: '<子帳號的AccessKeySecret>'
  6. });
  7. async function assumeRole () {
  8. try {
  9. let token = yield sts.assumeRole(
  10. '<role-arn>', '<policy>', '<expiration>', '<session-name>');
  11. let client = new OSS({
  12. region: '<region>',
  13. accessKeyId: token.credentials.AccessKeyId,
  14. accessKeySecret: token.credentials.AccessKeySecret,
  15. stsToken: token.credentials.SecurityToken,
  16. bucket: '<bucket-name>'
  17. });
  18. } catch (e) {
  19. console.log(e);
  20. }
  21. }
  22. assumeRole();

在向STS申請臨時token時,還可以指定自訂的STS Policy。這樣申請的臨時權限是所扮演角色的許可權與Policy指定的許可權的交集。下面的例子將通過指定STS Policy申請對my-bucket的只讀許可權,並指定臨時token的過期時間為15分鐘:

  1. let OSS = require('ali-oss');
  2. let STS = OSS.STS;
  3. let sts = new STS({
  4. accessKeyId: '<子帳號的AccessKeyId>',
  5. accessKeySecret: '<子帳號的AccessKeySecret>'
  6. });
  7. let policy = {
  8. "Statement": [
  9. {
  10. "Action": [
  11. "oss:Get*"
  12. ],
  13. "Effect": "Allow",
  14. "Resource": ["acs:oss:*:*:my-bucket/*"]
  15. }
  16. ],
  17. "Version": "1"
  18. };
  19. async function assumeRole () {
  20. try {
  21. let token = await sts.assumeRole(
  22. '<role-arn>', policy, 15 * 60, '<session-name>');
  23. let client = new OSS({
  24. region: '<region>',
  25. accessKeyId: token.credentials.AccessKeyId,
  26. accessKeySecret: token.credentials.AccessKeySecret,
  27. stsToken: token.credentials.SecurityToken,
  28. bucket: '<bucket-name>'
  29. });
  30. } catch (e) {
  31. console.log(e);
  32. }
  33. }
  34. assumeRole();