更新时间:2026-01-15 GMT+08:00

快速入门(Python SDK)

创建AK、SK

OBS通过用户账户中的AK和SK进行签名验证,确保通过授权的账户才能访问指定的OBS资源。以下是对AK和SK的解释说明:

  • AK:Access Key ID,接入键标识,用户在对象存储服务系统中的接入键标识,一个接入键标识唯一对应一个用户,一个用户可以同时拥有多个接入键标识。对象存储服务系统通过接入键标识识别访问系统的用户。
  • SK:Secret Access Key,安全接入键,用户在对象存储服务系统中的安全接入键,是用户访问对象存储服务系统的密钥,用户根据安全接入键和请求头域生成鉴权信息。安全接入键和接入键标识一一对应。

访问密钥分永久访问密钥(AK/SK)和临时访问密钥(AK/SK和SecurityToken)两种。每个用户最多可创建两个有效的永久访问密钥。临时访问密钥只在设置的有效期内能够访问OBS,过期后需要重新获取。出于安全性考虑,建议您使用临时访问密钥访问OBS,或使用永久访问密钥访问OBS时,定期更新您的访问密钥(AK/SK)。两种密钥的获取方式如下所示。

  • 永久访问密钥:
    1. 登录管理控制台。
    2. 单击页面右上角的用户名,并选择“我的凭证”。
    3. 在“我的凭证”页面,单击左侧导航栏的“访问密钥”。
    4. 在“访问密钥”页面,单击“新增访问密钥”

    5. 在弹出的“新增访问密钥”对话框中,输入描述内容(建议),单击“确定”。

    6. 在弹出的“创建成功”提示框中,单击“立即下载”后,密钥会直接保存到浏览器默认的下载文件夹中。

    7. 打开下载下来的“credentials.csv”文件即可获取到访问密钥(AK和SK)。
    • 在密钥文件中,Access Key ID列对应的值即AK,Secret Access Key列对应的值即SK。
    • 为防止访问密钥泄露,建议您将其保存到安全的位置。如果用户在此提示框中单击“取消”,则不会下载密钥,后续也将无法重新下载。如果需要使用访问密钥,可以重新创建新的访问密钥。
  • 临时访问密钥:

    临时AK/SK和SecurityToken是系统颁发给用户的临时访问令牌,通过接口设置有效期,范围为15分钟至24小时,过期后需要重新获取。临时AK/SK和SecurityToken遵循权限最小化原则。使用临时AK/SK鉴权时,临时AK/SK和SecurityToken必须同时使用。

初始化OBS客户端

向OBS发送任一HTTP/HTTPS请求之前,必须先创建一个ObsClient实例:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 引入模块
from obs import ObsClient

# 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险。
# 您可以登录访问管理控制台获取访问密钥AK/SK。
ak = os.getenv("AccessKeyID")
sk = os.getenv("SecretAccessKey")
# 【可选】如果使用临时AKSK和SecurityToken访问OBS,则同样推荐通过环境变量获取
security_token = os.getenv("SecurityToken")
# server填写桶所在区域的endpoint。
server = "https://your-endpoint"

# 创建obsClient实例
# 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过security_token参数指定securityToken值
obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
# 使用访问OBS

# 关闭obsClient
obsClient.close()

更多关于OBS客户端初始化的内容请参考“初始化”章节。

日志配置详见日志初始化

创建桶

桶是OBS全局命名空间,相当于数据的容器、文件系统的根目录,可以存储若干对象。

本示例用于创建名为examplebucket的桶,桶ACL是私有桶,存储类型是访问存储。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from obs import CreateBucketHeader, HeadPermission
from obs import ObsClient
import os
import traceback

# 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险
# 您可以登录访问管理控制台获取访问密钥AK/SK。
ak = os.getenv("AccessKeyID")
sk = os.getenv("SecretAccessKey")
# 【可选】如果使用临时AKSK和SecurityToken访问OBS,则同样推荐通过环境变量获取
# security_token = os.getenv("SecurityToken")
# server填写桶所在区域的endpoint。
server = "https://your-endpoint"

# 创建obsClient实例
# 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过security_token参数指定securityToken值
obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
try:
    # 创建桶的附加头域,桶ACL是私有桶,存储类型是标准访问存储,多AZ方式存储
    header = CreateBucketHeader(aclControl=HeadPermission.PRIVATE, storageClass="STANDARD", availableZone="3az")
    # 指定存储桶所在区域,必须跟传入的endpoint所在的region保持一致
    location = "region"
    bucketName = "examplebucket"
    # 创建桶
    resp = obsClient.createBucket(bucketName, header, location)
    # 返回码为2xx时,接口调用成功,否则接口调用失败
    if resp.status < 300:
        print('Create Bucket Succeeded')
        print('requestId:', resp.requestId)
    else:
        print('Create Bucket Failed')
        print('requestId:', resp.requestId)
        print('errorCode:', resp.errorCode)
        print('errorMessage:', resp.errorMessage)
except:
    print('Create Bucket Failed')
    print(traceback.format_exc())
  • 桶的名字是全局唯一的,所以您需要确保不与已有的桶名称重复。
  • 桶命名规则如下:
    • 3~63个字符,数字或字母开头,支持小写字母、数字、“-”、“.”。
    • 禁止使用类IP地址。
    • 禁止以“-”或“.”开头及结尾。
    • 禁止两个“.”相邻(如:“my..bucket”)。
    • 禁止“.”和“-”相邻(如:“my-.bucket”和“my.-bucket”)。
  • 同一用户多次创建同名桶不会报错,创建的桶属性以第一次请求为准。
  • 更多创建桶的信息,请参见创建桶

上传对象

本示例用于上传文本对象。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from obs import ObsClient
import os
import traceback

# 推荐通过环境变量获取AKSK,这里也可以使用其他外部引入方式传入,如果使用硬编码可能会存在泄露风险
# 您可以登录访问管理控制台获取访问密钥AK/SK
# 运行本代码示例之前,请确保已设置环境变量AccessKeyID和SecretAccessKey
ak = os.getenv("AccessKeyID")
sk = os.getenv("SecretAccessKey")
# 【可选】如果使用临时AKSK和SecurityToken访问OBS,则同样推荐通过环境变量获取
# security_token = os.getenv("SecurityToken")
# server填写桶所在区域的endpoint
server = "https://your-endpoint"

# 创建obsClient实例
# 如果使用临时AKSK和SecurityToken访问OBS,需要在创建实例时通过security_token参数指定securityToken值
obsClient = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
try:
    bucketName = "examplebucket"
    objectKey = "objectname"
    # 设置待上传的文本内容
    content = 'Hello OBS'
    # 上传文本对象
    resp = obsClient.putContent(bucketName, objectKey, content)
    # 返回码为2xx时,接口调用成功,否则接口调用失败
    if resp.status < 300:
        print('Put Content Succeeded')
        print('requestId:', resp.requestId)
        print('etag:', resp.body.etag)
    else:
        print('Put Content Failed')
        print('requestId:', resp.requestId)
        print('errorCode:', resp.errorCode)
        print('errorMessage:', resp.errorMessage)
except:
    print('Put Content Failed')
    print(traceback.format_exc())

更多上传对象的信息,请参见上传对象