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

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

背景信息

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

注意事项

类别

注意事项

私网连接

  • 当前仅华东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)
       }
    
    }