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

IBM Cloud Object Storage报nosuchkey错误:缺失密钥及生成方法咨询

为什么会出现nosuchkey错误?该用什么密钥?

我之前也碰到过类似的坑——你现在用的IAM Bearer Token并不适用于IBM Cloud对象存储的S3兼容API请求,这才导致了看似“密钥找不到”的nosuchkey错误。S3风格的接口认的是HMAC密钥对(Access Key ID + Secret Access Key),而不是直接用IAM Token来授权。

怎么生成HMAC密钥对?

步骤很简单,跟着来:

  • 登录IBM Cloud控制台,打开你的对象存储实例页面
  • 左侧菜单点「服务凭证」,然后点「新建凭证」
  • 给凭证起个名字(比如cdn-upload-creds),一定要勾选「包括HMAC凭证」(默认是不勾的,这是关键)
  • 权限选「Writer」就够了(满足上传文件的需求),然后点「添加」
  • 生成的凭证里,access_key_id就是你的Access Key,secret_access_key是对应的Secret Key,把这俩存好别丢了

修改你的curl命令(用HMAC认证)

直接用HMAC签名的curl请求示例如下,把占位符换成你的实际信息就行:

# 替换成你自己的密钥、桶名和文件路径
ACCESS_KEY="你的access_key_id"
SECRET_KEY="你的secret_access_key"
BUCKET_NAME="你的桶名称"
LOCAL_FILE="a-picture.png"
REMOTE_FILE="a-picture.png"

# 生成签名需要的日期和签名串
DATE=$(date -R)
SIGNATURE_STRING="PUT\n\nimage/png\n$DATE\n/$BUCKET_NAME/$REMOTE_FILE"
SIGNATURE=$(echo -en "$SIGNATURE_STRING" | openssl sha1 -hmac "$SECRET_KEY" -binary | base64)

# 执行上传请求
curl -X PUT "https://s3-api.us-geo.objectstorage.softlayer.net/$BUCKET_NAME/$REMOTE_FILE" \
  -H "Date: $DATE" \
  -H "Content-Type: image/png" \
  -H "Authorization: AWS $ACCESS_KEY:$SIGNATURE" \
  -H "x-amz-acl: public-read" \
  -T "$LOCAL_FILE"

如果嫌curl签名麻烦,也可以用AWS CLI来操作:先配置好HMAC密钥和IBM的S3端点,之后上传就很简单了:

# 配置AWS CLI(适配IBM存储)
aws configure set aws_access_key_id $ACCESS_KEY
aws configure set aws_secret_access_key $SECRET_KEY
aws configure set default.s3.endpoint_url https://s3-api.us-geo.objectstorage.softlayer.net

# 上传并设置公开读权限
aws s3 cp a-picture.png s3://$BUCKET_NAME/a-picture.png --acl public-read

补充:关于IAM Token的使用

如果非要用IAM Token来做S3请求,得额外加x-amz-api-key头(值是服务凭证里的apikey),而且权限配置要到位,但这种方式在S3兼容接口里容易出兼容性问题,真心不如HMAC密钥好用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:10:32