文档

ECS实例通过OSS内网地址访问OSS资源

更新时间:
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

当您通过OSS内网地址访问OSS资源时,不收取流量费用。本文介绍ECS实例如何通过OSS内网地址访问OSS资源。

通过OSS内网地址访问OSS资源有以下两种方式:

  • 与OSS同地域ECS实例可以直接通过内网访问有权限的OSS资源。

  • 与OSS不同地域的ECS实例或公网用户可通过配置ECS反向代理,间接实现通过OSS内网地址访问OSS资源。

获取OSS内网地址

  • 通过OSS控制台获取

    1. 登录OSS管理控制台

    2. 单击Bucket列表,然后单击目标Bucket名称。

    3. 在左侧导航栏,单击概览

    4. 访问端口区域,查看Bucket的Endpoint和Bucket域名。访问端口

  • 通过固定格式获取

    OSS的访问地址为固定格式:BucketName.Endpoint。其中,BucketName为您的存储空间名称,Endpoint为存储空间所在的地域对应的访问域名。详情请参见OSS访问域名使用规则

同地域ECS实例访问OSS资源

与OSS同地域的ECS实例可以通过以下方式使用内网访问OSS资源:

  • 通过URL直接访问OSS资源

    您可以直接使用OSS资源的内网地址访问有权限的OSS资源。例如,杭州地域某Bucket名为test,根目录下有个Object名为1.jpg,处于公共读状态。此时,杭州地域的ECS实例均可以使用http://test.oss-cn-hangzhou-internal.aliyuncs.com/1.jpg访问此Object。因此,您可以将OSS资源的访问URL嵌入到您的网站中,提供给同地域的ECS用户或已通过专线接入到与OSS同地域内网的用户访问。

    警告

    为了您的数据安全,不建议您将OSS资源设置为公共读或公共读写,您可以通过Bucket Policy授权给指定用户访问您的资源。

  • 通过ossbrowser访问OSS资源

    您可以在配置ossbrowser访问参数的时候,将Endpoint设置为自定义,并填写OSS的内网Endpoint地址。详情请参见ossbrowser

  • 通过ossutil访问OSS资源

    您可以在配置ossutil访问参数的时候,将Endpoint设置为OSS的内网Endpoint地址。详情请参见ossutil

  • 通过SDK访问OSS资源

    SDK初始化client的时候,Endpoint配置OSS内网对应的Endpoint即可。

    • Java SDK

      String endpoint = "http://oss-cn-hangzhou-internal.aliyuncs.com";//以华东 1为例
      String accessKeyId = "<yourAccessKeyId>";
      String accessKeySecret = "<yourAccessKeySecret>";
      OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);          

      更多详情请参见Java SDK初始化

    • PHP SDK

      $accessKeyId = "<yourAccessKeyId>";
      $accessKeySecret = "<yourAccessKeySecret>";
      $endpoint = "<您选定的OSS数据中心访问域名,例如http://oss-cn-hangzhou-internal.aliyuncs.com>";           

      更多详情请参见PHP SDK初始化

    • Python SDK

      auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>')
      endpoint = 'http://oss-cn-hangzhou-internal.aliyuncs.com' # 您选定的OSS数据中心访问域名,假设Bucket处于杭州地域
      bucket = oss2.Bucket(auth, endpoint, 'BucketName')         

      更多详情请参见Python SDK初始化

    • .NET SDK

      const string accessKeyId = "<yourAccessKeyId>";
      const string accessKeySecret = "<yourAccessKeySecret>";
      const string endpoint = "http://oss-cn-hangzhou-internal.aliyuncs.com";
      var ossClient = new OssClient(endpoint, accessKeyId, accessKeySecret);   

      更多详情请参见.NET SDK初始化

    • C SDK

      options->config = oss_config_create(options->pool);
      aos_str_set(&options->config->endpoint, "http://oss-cn-hangzhou-internal.aliyuncs.com");
      aos_str_set(&options->config->access_key_id, "<yourAccessKeyId>");
      aos_str_set(&options->config->access_key_secret, "<yourAccessKeySecret>");
      options->config->is_cname = 0;
      options->ctl = aos_http_controller_create(options->pool, 0);         

      更多详情请参见C SDK初始化

通过ECS反向代理访问OSS资源

不同地域的ECS实例或外网用户是无法直接通过OSS内网地址访问OSS资源的,但是您可以通过配置ECS反向代理来间接实现:

  1. 在OSS同地域创建一个有公网地址的ECS实例。详情请参见创建ECS实例

  2. 在ECS实例上配置反向代理。详情请参见基于CentOS的ECS实例实现OSS反向代理基于Ubuntu的ECS实例实现OSS反向代理基于Windows的ECS实例实现OSS反向代理

  3. OSS配置Bucket Policy,允许该ECS实例的内网地址访问OSS资源。详情请参见通过Bucket Policy授权用户访问指定资源

以上步骤配置完成后,您的用户将通过您的ECS公网地址访问您的OSS资源。当用户访问时,ECS实例通过内网向OSS请求资源,之后再返回给用户。