开发者社区> 问答> 正文

JavaScript sdk怎么通过STS Policy申请对bucket的权限

已解决

展开
收起
2018-03-28 16:07:53 929 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

    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();
    2018-04-01 00:00:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
跨平台的云服务SDK需要什么 立即下载
JavaScript 语言在引擎级别的执行过程 立即下载
一个跨平台的云服务SDK需要什么 立即下载