全部产品
对象存储 OSS

授权访问

更新时间:2017-06-26 16:57:30   分享:   

使用私有链接下载

对于私有Bucket,可以生成私有链接(又称为“签名URL”)供用户访问:

  1. # -*- coding: utf-8 -*-
  2. import oss2
  3. auth = oss2.Auth('您的AccessKeyId', '您的AccessKeySecret')
  4. bucket = oss2.Bucket(auth, '您的Endpoint', '您的Bucket名')
  5. print(bucket.sign_url('GET', 'object-in-bucket.txt', 60))

上面的代码会打印出一个私有链接,可以把该链接分享给其他用户,直接用浏览器或者wget之类的工具下载。这个链接只在生成之时起60秒内有效。

提示:带图片处理的授权访问方法,请参看图片处理

使用STS服务临时授权

OSS用户可以通过阿里云STS服务(Security Token Service)进行临时授权访问。更多有关STS的内容请参考阿里云STS

使用STS时请按以下步骤进行:

  1. 在官网控制台创建子账号,参考OSS STS
  2. 在官网控制台创建STS角色并赋予子账号扮演角色的权限,参考OSS STS
  3. 使用子账号的AccessKeyId/AccessKeySecret向STS申请临时token。
  4. 使用临时token中的认证信息创建 StsAuth 类实例。
  5. 使用 StsAuth 类实例初始化 Bucket 类实例。

下面我们给出一个完整的例子。首先安装官方的Python STS客户端:

  1. $ pip install aliyun-python-sdk-sts

接下来,通过STS服务获取临时授权。下面代码中的 end_pointbucket_nameaccess_key_idaccess_key_secretrole_arn 需要用户根据实际情况,填写正确的值。并且我们假设,要扮演的角色是有上传文件权限的。

其中 role_arn 是角色的资源描述符,请参考STS授权访问中关于角色创建和使用的部分。

  1. # -*- coding: utf-8 -*-
  2. from aliyunsdkcore import client
  3. from aliyunsdksts.request.v20150401 import AssumeRoleRequest
  4. import json
  5. import oss2
  6. endpoint = 'oss-cn-hangzhou.aliyuncs.com'
  7. bucket_name = '<待访问的Bucket名>'
  8. access_key_id = '<子账号AccessKeyId>'
  9. access_key_secret = '<子账号AccessKeySecret>'
  10. role_arn = '<角色的资源描述符>'
  11. clt = client.AcsClient(access_key_id, access_key_secret, 'cn-hangzhou')
  12. req = AssumeRoleRequest.AssumeRoleRequest()
  13. # 为了简化讨论,这里没有设置Duration、Policy等,更多细节请参考RAM、STS的相关文档。
  14. req.set_accept_format('json') # 设置返回值格式为JSON
  15. req.set_RoleArn(role_arn)
  16. req.set_RoleSessionName('session-name')
  17. body = clt.do_action(req)
  18. # 为了简化讨论,没有做出错检查
  19. token = json.loads(body)
  20. # 初始化StsAuth实例
  21. auth = oss2.StsAuth(token['Credentials']['AccessKeyId'],
  22. token['Credentials']['AccessKeySecret'],
  23. token['Credentials']['SecurityToken'])
  24. # 初始化Bucket实例
  25. bucket = oss2.Bucket(auth, endpoint, bucket_name)
  26. # 上传一个字符串
  27. bucket.put_object('object-name.txt', b'hello world')

注意:

  • 临时token会在一段时间后过期,这就要在适当的时刻,重新获取token,并设置 oss2.Bucket 中的 auth 成员变量为新的 StsAuth
  • 要求 2.0.6 及以后版本。
  • STS应用完整的示例代码请参看 GitHub
本文导读目录
本文导读目录
以上内容是否对您有帮助?