使用私有链接下载
对于私有Bucket,可以生成私有链接(又称为“签名URL”)供用户访问:
- # -*- coding: utf-8 -*-
- import oss2
- auth = oss2.Auth('您的AccessKeyId', '您的AccessKeySecret')
- bucket = oss2.Bucket(auth, '您的Endpoint', '您的Bucket名')
- print(bucket.sign_url('GET', 'object-in-bucket.txt', 60))
上面的代码会打印出一个私有链接,可以把该链接分享给其他用户,直接用浏览器或者wget之类的工具下载。这个链接只在生成之时起60秒内有效。
提示:带图片处理的授权访问方法,请参看
图片处理。
使用STS服务临时授权
OSS用户可以通过阿里云STS服务(Security Token Service)进行临时授权访问。更多有关STS的内容请参考
阿里云STS。
使用STS时请按以下步骤进行:
- 在官网控制台创建子账号,参考OSS STS。
- 在官网控制台创建STS角色并赋予子账号扮演角色的权限,参考OSS STS。
- 使用子账号的AccessKeyId/AccessKeySecret向STS申请临时token。
- 使用临时token中的认证信息创建 StsAuth 类实例。
- 使用 StsAuth 类实例初始化 Bucket 类实例。
下面我们给出一个完整的例子。首先安装官方的Python STS客户端:
- $ pip install aliyun-python-sdk-sts
接下来,通过STS服务获取临时授权。下面代码中的 end_point 、 bucket_name 、access_key_id、access_key_secret 、 role_arn 需要用户根据实际情况,填写正确的值。并且我们假设,要扮演的角色是有上传文件权限的。
其中 role_arn 是角色的资源描述符,请参考
STS授权访问中关于角色创建和使用的部分。
- # -*- coding: utf-8 -*-
- from aliyunsdkcore import client
- from aliyunsdksts.request.v20150401 import AssumeRoleRequest
- import json
- import oss2
- endpoint = 'oss-cn-hangzhou.aliyuncs.com'
- bucket_name = '<待访问的Bucket名>'
- access_key_id = '<子账号AccessKeyId>'
- access_key_secret = '<子账号AccessKeySecret>'
- role_arn = '<角色的资源描述符>'
- clt = client.AcsClient(access_key_id, access_key_secret, 'cn-hangzhou')
- req = AssumeRoleRequest.AssumeRoleRequest()
- # 为了简化讨论,这里没有设置Duration、Policy等,更多细节请参考RAM、STS的相关文档。
- req.set_accept_format('json') # 设置返回值格式为JSON
- req.set_RoleArn(role_arn)
- req.set_RoleSessionName('session-name')
- body = clt.do_action(req)
- # 为了简化讨论,没有做出错检查
- token = json.loads(body)
- # 初始化StsAuth实例
- auth = oss2.StsAuth(token['Credentials']['AccessKeyId'],
- token['Credentials']['AccessKeySecret'],
- token['Credentials']['SecurityToken'])
- # 初始化Bucket实例
- bucket = oss2.Bucket(auth, endpoint, bucket_name)
- # 上传一个字符串
- bucket.put_object('object-name.txt', b'hello world')
注意:
- 临时token会在一段时间后过期,这就要在适当的时刻,重新获取token,并设置 oss2.Bucket 中的 auth 成员变量为新的 StsAuth。
- 要求 2.0.6 及以后版本。
- STS应用完整的示例代码请参看 GitHub 。