You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ibm_boto3中调用generate_presigned_post?签名版本报错求助

解决IBM COS generate_presigned_post的UnsupportedSignatureVersionError问题

我来帮你搞定这个问题——你遇到的错误根源很明确:你当前使用的oauth签名版本并不支持预签名POST操作。虽然OAuth签名能正常处理put_object、upload_file这类常规请求,但IBM COS的OAuth机制并没有实现oauth-presign-post这个签名版本,而预签名POST需要依赖HMAC-based的S3v4签名。

具体解决方案

既然你已经创建了带{"HMAC":true}的凭证,直接把签名版本切换为S3v4即可:

  • 修改客户端配置中的signature_version为s3v4
  • 移除和OAuth相关的配置项(不需要signature_version='oauth'了)

修改后的完整代码

import ibm_boto3
from ibm_botocore.client import Config

class COSPresignedURL():
    def __init__(self, config):
        # 关键修改:使用s3v4签名版本,适配HMAC凭证的预签名POST需求
        cfg = Config(signature_version='s3v4', s3={"payload_signing_enabled":True})
        self.cos = ibm_boto3.client(
            's3',
            ibm_api_key_id=config['api_key'],
            ibm_service_instance_id=config['instance_id'],
            ibm_auth_endpoint=config['auth_endpoint'],
            endpoint_url=config['url_endpoint'],
            config=cfg)
    def generate(self, bucket, key, Fields=None, Conditions=None, ExpiresIn=300):
        return self.cos.generate_presigned_post(bucket, key, Fields, Conditions, ExpiresIn)

def main():
    config = {
        "api_key" : "VALUE OF apikey FROM CLOUD CREDENTIALS",
        "instance_id" : "VALUE OF resource_instance_id FROM CLOUD CREDENTIALS",
        "auth_endpoint" : "https://iam.cloud.ibm.com/identity/token",
        "url_endpoint" : "https://s3.eu-de.cloud-object-storage.appdomain.cloud"
    }
    bucket = 'somebucket'
    poster = COSPresignedURL(config)
    uri = poster.generate(bucket, 'somekey')
    print(f'{uri}')

if __name__ == '__main__':
    main()

为什么这样有效?

  • 预签名POST操作需要生成带有HMAC签名的表单字段,这只有基于S3v4的HMAC签名机制才能支持
  • 你已经创建了带HMAC的凭证,这个凭证本身就包含了生成S3v4签名所需的密钥对,切换签名版本后就能正常生成预签名POST的参数了

另外确认一下:你的凭证权限是write或manager,这已经满足生成预签名POST的权限要求,不需要调整权限。

内容的提问来源于stack exchange,提问作者MyStackoverflowAcc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:02:52