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

使用curl从OCI VM下载OCI Object storage对象的认证问题

OCI 同账号VM访问私有对象存储的认证问题解答

核心结论

  • 私有状态(非公开)的OCI对象存储资源,所有请求强制要求认证,不存在"同账号下VM自动免鉴权"的逻辑。哪怕请求发起的VM和对象存储归属于同一租户,不带合法认证信息的curl请求会直接被服务端返回401/403错误,无法下载对象。
  • 你不想手动构造auth headers、同时不开放对象公共访问的需求完全可以实现,本质是把手动传认证头的逻辑换成VM自动获取凭证的认证方式,不是跳过认证。

常见认知误区澄清

很多人误以为同账号资源内网访问免认证,实际混淆了两种不需要手动传auth headers的场景:

  1. 存储桶/对象被设置为公共读权限:这种场景确实不需要带任何认证信息即可下载,但会导致所有能访问到对象存储端点的用户都能拉取对象,存在数据泄露、流量盗刷风险,不符合你的需求。
  2. 为VM配置实例主体(Instance Principal)授权:这是OCI官方推荐的VM访问同租户服务的方案,你不需要在VM里硬编码长期AK/SK,也不需要手动计算签名构造Authorization头,VM会自动和OCI元数据服务交互获取临时安全凭证完成认证,全程你不需要手动处理认证逻辑。

无手动构造auth头的curl下载实现步骤

  1. 先完成权限配置:创建动态组包含目标VM实例,编写IAM策略授予该动态组对目标存储桶/对象的读权限。
  2. 在VM内通过元数据服务获取临时会话token:
    # 获取元数据服务认证token
    TOKEN=$(curl -s -X PUT -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/identity/token)
    
  3. 携带该临时token直接请求对象存储下载接口即可,不需要手动计算签名:
    curl -H "Authorization: Bearer $TOKEN" \
      https://<你的对象存储命名空间>.objectstorage.<区域标识符>.oci.customer-oci.com/n/<命名空间>/b/<存储桶名>/o/<对象名> \
      --output <本地保存的文件路径>
    

如果你的VM上已经安装了OCI CLI,操作会更简单:直接给CLI配置实例主体认证后,用oci os object get命令即可下载,CLI会自动处理所有认证流程,不需要你写任何认证相关的请求头。

注意:不要为了简化流程将私有对象设置为公共读,实例主体方案既可以保持存储桶的私有访问权限,又能免去手动构造签名头的麻烦,同时临时凭证自动轮转,安全性远高于硬编码长期密钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:18:14