You need to enable JavaScript to run this app.
导航
使用私网连接访问对象存储
最近更新时间:2024.10.16 15:38:52首次发布时间:2023.08.10 18:51:41

您可以使用私网连接,实现在本地 IDC 通过专线访问对象存储。本文介绍如何使用私网连接访问对象存储。

背景信息

您可以使用 VPN、CEN 或专线连接实现云上 VPC 与 本地 IDC 网络互通,然后使用私网连接的终端节点和终端节点服务建立私有网络 VPC 和对象存储 TOS 的网络连接,最后实现在本地数据中心访问对象存储。
以下以专线连接为例,展示在本地 IDC 访问对象存储的过程。
Image

注意事项

类别

注意事项

私网连接

  • 当前仅华东2(上海)、华南1(广州)、亚太东南(柔佛)支持 TOS 的终端节点服务。该服务在华北2(北京)处于邀测状态,如果您要在该地域使用 TOS 的终端节点服务,请联系客户经理。
  • 终端节点最大带宽限制为 10Gbps。访问对象存储时,请勿超过该带宽限制。关于终端节点的详细介绍,请参见终端节点

对象存储

  • 通过私网连接访问 TOS 默认使用 HTTP 协议和终端节点域名,如果您希望通过 TOS 原有域名访问,或者希望通过私网连接使用 HTTPS 协议访问 TOS,则需要配置私有 DNS 名称。具体操作,请参见通过自定义域名访问对象存储
  • 使用私网连接访问对象存储时,无法使用 Bucket 策略的 SourceIP 以及 SourceVpc 条件、 IAM 策略的 SourceIP 以及 SourceVpc 条件。

费用

使用本方案访问对象存储时,会产生终端节点实例费用和流量处理费用。详细介绍,请参见计费说明

前提条件

  • 已创建私有网络 VPC,具体操作,请参见创建私有网络
  • 已使用专线连接、CEN 或 VPN 搭建云上 VPC 和本地 IDC 的连接通道。推荐使用专线连接,具体操作,请参见配置专线连接

操作步骤

  1. 登录私有网络控制台

  2. 在顶部导航栏,选择目标地域。

  3. 在左侧导航栏选择私网连接 > 终端节点

  4. 接口终端节点页签下,单击创建终端节点

  5. 创建终端节点页面,配置如下参数。

    类别

    参数

    说明

    基本信息

    地域

    选择终端节点所属的地域。

    名称

    输入终端节点的名称。

    类型

    选择终端节点的类型。本场景选择接口

    描述

    输入终端节点的描述。

    项目

    选择终端节点所属的项目。详细介绍,请参见项目管理

    终端节点服务

    添加方式

    选择待关联终端节点服务的添加方式。本场景选择火山引擎服务

    终端节点服务

    选择对接 TOS 的终端节点服务,已默认创建了 2 个对接 TOS 的终端节点服务,您无需手动创建。可选以下服务,具体说明如下:

    • com.volces.privatelink.cn-<地域>.tos-s3:遵循 S3 协议的终端节点服务,选择该服务后,必须使用遵循 S3 协议的 SDK 和 API 才能访问 TOS。
    • com.volces.privatelink.cn-<地域>.tos:遵循 tos 协议的终端节点服务,选择该服务后,必须使用遵循 tos 协议的 SDK 和 API 才能访问 TOS。

    网络配置

    私有网络

    选择配置专线连接时使用的私有网络。

    可用区及子网

    选择需要建立连接的终端节点服务可用区和子网。

    安全组

    选择安全组。

    说明

    创建私有网络时,系统会为该私有网络自动创建一个默认安全组 Default。关于安全组的详细介绍,请参见安全组概述

    高级选项

    标签

    标签由一个键值对组成,用于资源的分类和搜索。更多关于标签的介绍请参见标签管理
    单击添加标签,输入标签键和标签值,为终端节点服务添加标签。

  6. 单击确认订单

  7. 阅读并勾选**《产品和服务协议》《私网连接服务条款》《私网连接服务等级协议》,单击立即购买**。

  8. 单击去控制台,在接口终端节点页签下终端节点域名列,获取目标终端节点的域名。

  9. 在本地 IDC ping 终端节点域名,如果能 ping 通,说明本地 IDC 和对象存储之间网络连通正常。
    将 Endpoint 修改为终端节点的域名后,您可以使用 API、 SDK 访问对象存储。例如在本地 IDC 使用 GO SDK 列举对象,示例代码如下:

    package main
    
    import (
       "context"
       "fmt"
    
       "github.com/volcengine/ve-tos-golang-sdk/v2/tos"
    )
    
    func checkErr(err error) {
       if err != nil {
          if serverErr, ok := err.(*tos.TosServerError); ok {
             fmt.Println("Error:", serverErr.Error())
             fmt.Println("Request ID:", serverErr.RequestID)
             fmt.Println("Response Status Code:", serverErr.StatusCode)
             fmt.Println("Response Header:", serverErr.Header)
             fmt.Println("Response Err Code:", serverErr.Code)
             fmt.Println("Response Err Msg:", serverErr.Message)
          } else if clientErr, ok := err.(*tos.TosClientError); ok {
             fmt.Println("Error:", clientErr.Error())
             fmt.Println("Client Cause Err:", clientErr.Cause.Error())
          } else {
             fmt.Println("Error:", err)
          }
          panic(err)
       }
    }
    
    func main() {
       var (
          accessKey = "*** Provide your access key ***"
          secretKey = "*** Provide your secret key ***"
          // 填写终端节点域名
          endpoint = "ep-3rf21wq2bsh6o5zsk2ipt****.tos-s3.cn-beijing-.privatelink.volces.com"
          region   = "cn-beijing"
          // 填写 BucketName
          bucketName = "*** Provide your bucket name ***"
    
          ctx = context.Background()
       )
       // 初始化客户端
       client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))
       checkErr(err)
    
       // 获取 bucket 中最多 10 个对象
       output, err := client.ListObjectsV2(ctx, &tos.ListObjectsV2Input{
          Bucket: bucketName,
          ListObjectsInput: tos.ListObjectsInput{
             MaxKeys: 10,
          },
       })
       checkErr(err)
       for _, obj := range output.Contents {
          // 对象 Key
          fmt.Println("Object Key:", obj.Key)
          // 对象最后修改时间
          fmt.Println("Object LastModified:", obj.LastModified)
          // 对象 Etag
          fmt.Println("Object ETag:", obj.ETag)
          // 对象大小
          fmt.Println("Object Size:", obj.Size)
          // 对象 Owner
          fmt.Println("Object Owner:", obj.Owner)
          // 对象存储类型
          fmt.Println("Object StorageClass:", obj.StorageClass)
          // 对象 CRC64
          fmt.Println("Object HashCrc64ecma:", obj.HashCrc64ecma)
       }
    
    }