全部產品
Search
文件中心

Object Storage Service:通過PrivateLink私網訪問OSS

更新時間:Jan 21, 2026

私網串連(PrivateLink)在Virtual Private Cloud與阿里雲OSS服務間建立安全私人串連通道,從網路層實現原生流量隔離,有效解決資料轉送安全隱患、網路地址衝突和營運管控複雜性等問題,為企業構建安全可控的雲端儲存訪問架構。

工作原理

PrivateLink通過在VPC內部建立指向阿里雲OSS服務的專屬私人終端節點 (Endpoint),實現訪問流量全程在阿里雲骨幹網路內傳輸,避免經過公網。同時提供基於源IP的精確存取控制和VPC流日誌審計能力,構建企業級資料安全防護體系。相較OSS預設提供的內網訪問網域名稱,PrivateLink提供更進階別的網路原生安全隔離和精細化管控能力,適用於以下業務情境:

業務情境

內網訪問網域名稱

PrivateLink私網串連

嚴格的安全合規要求

訪問公用服務入口,攻擊面暴露給所有VPC,安全控制主要依賴應用程式層策略。

收斂攻擊面。入口在VPC內部,其他VPC無法發現也無法訪問,流量在網路層實現原生隔離。

需要對訪問來源做精細的網路層控制

無法通過安全性群組對訪問OSS的行為進行控制,只能依賴Bucket Policy。

支援綁定安全性群組。可為PrivateLink終端節點配置安全性群組規則,精確控制哪些源IP可以訪問OSS。

需要審計所有網路連接嘗試

OSS訪問日誌只記錄成功的請求,無法審計被拒絕的網路層串連嘗試。

支援VPC流日誌。可捕獲並審計所有嘗試訪問終端節點的流量,無論成功與否。

混合雲網路架構複雜,可能存在IP衝突

雲端服務預設佔用網段100.64.0.0/10,可能與本地IDC網路規劃衝突。

避免IP衝突。終端節點使用VPC網段內的IP,完全遵循自訂的IP規劃,簡化混合雲路由配置。

支援地區

華東1(杭州)、華東2(上海)、華北1(青島)、華北2(北京)、華北3(張家口)、華北6(烏蘭察布)、華南1(深圳)、華南2(河源)、華南3(廣州)、西南1(成都)、中國香港、日本(東京)、韓國(首爾)、新加坡、印尼(雅加達)、泰國(曼穀)、德國(法蘭克福)、美國(矽谷)、美國(維吉尼亞)。

配置和使用PrivateLink

通過建立終端節點建立PrivateLink私網串連,實現從VPC或本機資料中心安全訪問OSS資源。

建立並驗證終端節點

首先建立終端節點,建立VPC與OSS間的安全私人串連通道。建立完成後通過ECS執行個體驗證終端節點網路連通性和實際的OSS訪問操作,確保配置正確且功能完整。

配置前請確保已建立專用網路和交換器,驗證步驟需要ECS執行個體,如無現有執行個體可參考購買ECS執行個體建立隨用隨付執行個體。

步驟一:建立終端節點

  1. 前往VPC終端節點頁面,點擊建立終端節點。首次使用請按頁面提示完成開通私網串連服務操作。

  2. 根據以下參數進行配置,未列出的配置項保持預設值即可。

    • 所屬地區:選擇目標OSS Bucket所在地區,如華東1(杭州)。

    • 節點名稱:輸入便於識別的終端節點名稱,建議使用描述性命名,如privatelink-oss

    • 終端節點類型:選擇介面終端節點

    • 終端節點服務:選擇阿里雲服務,在服務列表中選擇OSS終端節點服務(服務名稱以oss結尾的條目)。

      說明

      如果在終端節點服務列表中未找到對應的OSS終端節點服務,請聯絡支援人員申請開通。

    • 專用網路:選擇需要建立終端節點的目標專用網路,如無可用網路可單擊建立專用網路建立。

    • 安全性群組:選擇終端節點綁定的安全性群組,用於控制存取權限,如無合適安全性群組可單擊建立安全性群組建立。

    • 可用性區域與交換器:選擇終端節點部署的可用性區域和對應交換器,如無可用交換器可單擊建立交換器建立。

  3. 點擊確定建立,系統將自動完成終端節點建立。建立完成後,在終端節點詳情頁面可查看並複製終端節點服務網域名稱,該網域名稱將用於後續OSS訪問。

    image

步驟二:驗證終端節點網域名稱

通過網路連通性測試和OSS檔案下載操作驗證終端節點配置正確性,確保PrivateLink私網訪問網路暢通且功能完整。

  • 網路連通性驗證

    使用ping命令測試終端節點網域名稱的網路連通性,驗證DNS解析和網路路徑是否正常。

    ping -c 4 ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com
  • 檔案下載驗證

    在相同地區的ECS執行個體中使用ossutil工具執行實際的OSS檔案下載操作,驗證PrivateLink串連的功能完整性和資料轉送穩定性。

    1. 安裝並配置ossutil 2.0

    2. 使用終端節點網域名稱(如ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com)訪問OSS資源,以下載指定Bucket(如example-bucket)中的檔案(如dest.jpg)為例:

      ossutil cp oss://example-bucket/dest.jpg /tmp/ -e ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com --addressing-style path

      命令執行成功後,終端將顯示以下輸出結果,表明檔案下載完成,可在/tmp目錄中查看下載的檔案:

      Success: Total 1 object, size 134102 B, Download done:(1 files, 134102 B), avg 680.112 KiB/s
      
      0.193189(s) elapsed

增強雲上VPC訪問安全性

PrivateLink功能驗證完成後,通過配置Bucket Policy存取原則進一步增強安全性。以下以限制只允許PrivateLink綁定的VPC訪問檔案為例說明配置方法,實現網路層和應用程式層的雙重存取控制。

  1. 前往Bucket列表,單擊目標Bucket。

  2. 在左側功能表列單擊許可權控制 > Bucket授權策略

  3. 單擊新增授權,按照以下內容進行配置,其他參數可保持預設選項。

    • 授權使用者:選擇所有帳號(*)

    • 授權操作:選擇進階設定

    • 效力:選擇拒絕

    • 操作:選擇oss:GetObject

    • 條件:勾選VPC ≠,並在下拉框中選擇PrivateLink綁定的VPC。

  4. 單擊確定,完成Bucket Policy配置。

本地裝置通過SSL-VPN接入

SSL-VPN方案通過在VPC中部署SSL-VPN網關,為單個本地裝置(如開發人員工作站、隨處工作裝置)提供快速、靈活的VPC接入能力。裝置通過SSL-VPN建立加密隧道後,即可利用已配置的PrivateLink終端節點安全訪問OSS,適用於遠程辦公、開發測試和應急訪問情境。

步驟一:建立SSL-VPN網關和本地配置

部署SSL-VPN網關並完成用戶端配置,建立本地裝置與VPC的加密串連。具體配置步驟請參見用戶端通過SSL-VPN遠程加密訪問VPC

步驟二:驗證PrivateLink私網訪問OSS

通過連通性測試和檔案下載操作驗證PrivateLink私網串連配置正確性,確保私網訪問鏈路暢通且功能完整。

  • 連通性驗證

    使用ping命令測試終端節點網域名稱的網路連通性,驗證DNS解析和網路路徑是否正常。

    ping -c 4 ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com
  • 檔案下載驗證

    ossutil

    在相同地區的ECS執行個體中使用ossutil工具執行實際的OSS檔案操作,驗證PrivateLink串連的功能完整性和資料轉送穩定性。

    1. 安裝並配置ossutil 2.0

    2. 使用終端節點網域名稱(如ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com)訪問OSS資源,以下載指定Bucket(如example-bucket)中的檔案(如dest.jpg)為例:

      ossutil cp oss://example-bucket/dest.jpg /tmp/ -e ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com --addressing-style path

      命令執行成功後,終端將顯示以下輸出結果,表明檔案下載完成,可在/tmp目錄中查看下載的檔案:

      Success: Total 1 object, size 134102 B, Download done:(1 files, 134102 B), avg 680.112 KiB/s
      
      0.193189(s) elapsed

    SDK

    SDK方式更貼近實際生產環境的使用情境,支援複雜的商務邏輯整合和異常處理機制,以下語言SDK支援通過PrivateLink私網訪問OSS。

    Java

    在PrivateLink訪問情境下使用setSLDEnabled(true)開啟路徑風格(Path-style)訪問模式,公網訪問時請設定為setSLDEnabled(false)

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.GetObjectRequest;
    import java.io.File;
    
    /**
     * OSS PrivateLink訪問樣本
     * 示範如何通過PrivateLink私網方式訪問OSS並下載檔案
     */
    public class Test {
    
        public static void main(String[] args) throws Exception {
            // PrivateLink終端節點網域名稱
            String endpoint = "https://ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com";
    
            // 填寫Endpoint對應的Region資訊,例如cn-hangzhou
            String region = "cn-hangzhou";
    
            // 從環境變數中擷取訪問憑證
            // 運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET
            EnvironmentVariableCredentialsProvider credentialsProvider =
                    CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
    
            // 填寫Bucket名稱,例如example-bucket
            String bucketName = "example-bucket";
    
            // 填寫不包含Bucket名稱在內的Object完整路徑
            String objectName = "dest.jpg";
    
            // 本地儲存檔案名稱
            String pathName = "dest.jpg";
    
            // 配置用戶端參數
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
    
            // PrivateLink訪問時開啟Path-style訪問方式(通過Bucket外網網域名稱訪問時需設定為false)
            clientBuilderConfiguration.setSLDEnabled(true);
    
            // 顯式聲明使用V4簽名演算法
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
    
            // 建立OSS用戶端執行個體
            OSS ossClient = OSSClientBuilder.create()
                    .endpoint(endpoint)
                    .credentialsProvider(credentialsProvider)
                    .clientConfiguration(clientBuilderConfiguration)
                    .region(region)
                    .build();
    
            try {
                // 下載Object到本地檔案,並儲存到指定的本地路徑中
                // 如果指定的本地檔案存在會覆蓋,不存在則建立
                // 如果未指定本地路徑,則下載後的檔案預設儲存到樣本程式所屬專案對應本地路徑中
                ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(pathName));
    
            } catch (OSSException oe) {
                // OSS服務端異常處理
                System.out.println("捕獲OSS異常,請求已到達OSS服務端,但被拒絕並返回錯誤響應。");
                System.out.println("錯誤資訊: " + oe.getErrorMessage());
                System.out.println("錯誤碼: " + oe.getErrorCode());
                System.out.println("請求ID: " + oe.getRequestId());
                System.out.println("主機ID: " + oe.getHostId());
    
            } catch (ClientException ce) {
                // 用戶端異常處理
                System.out.println("捕獲用戶端異常,用戶端在嘗試與OSS通訊時遇到嚴重的內部問題," +
                        "例如無法訪問網路。");
                System.out.println("錯誤資訊: " + ce.getMessage());
    
            } finally {
                // 釋放資源
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

    Python

    在PrivateLink訪問情境下使用is_path_style=True開啟路徑風格(Path-style)訪問模式。

    # -*- coding: utf-8 -*-
    """
    OSS PrivateLink訪問樣本
    通過PrivateLink私網方式訪問OSS並下載檔案到本地
    """
    
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    
    def main():
        """主函數:示範通過PrivateLink訪問OSS並下載檔案"""
        
        # 配置訪問憑證
        # 注意:阿里雲帳號AccessKey擁有所有API的存取權限,風險很高
        # 強烈建議您建立並使用RAM帳號進行API訪問或日常營運,請登入RAM控制台建立RAM帳號
        auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
        
        # PrivateLink終端節點網域名稱
        endpoint = 'https://ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com'
        
        # Bucket名稱
        bucket_name = 'example-bucket'
        
        # 建立Bucket對象
        # is_path_style=True 用於開啟路徑風格訪問模式,適用於PrivateLink等特定情境
        bucket = oss2.Bucket(auth, endpoint, bucket_name, is_path_style=True)
        
        # OSS物件路徑(完整路徑中不包含Bucket名稱)
        object_name = 'dest.jpg'
        
        # 本地儲存檔案路徑
        local_file_path = 'dest.jpg'
        
        # 下載Object到本地檔案
        # 如果指定的本地檔案存在會覆蓋,不存在則建立
        bucket.get_object_to_file(object_name, local_file_path)
        
        print(f"檔案下載成功:{object_name} -> {local_file_path}")
    
    
    if __name__ == '__main__':
        main()      

    Go

    在PrivateLink訪問情境下使用ForcePathStyle(true)開啟路徑風格(Path-style)訪問模式。

    package main
    
    import (
    	"fmt"
    	"os"
    
    	"github.com/aliyun/aliyun-oss-go-sdk/oss"
    )
    
    const (
    	// PrivateLink終端節點網域名稱
    	endpoint = "https://ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com"
    
    	// Bucket名稱
    	bucketName = "example-bucket"
    
    	// OSS物件路徑(完整路徑中不包含Bucket名稱)
    	objectName = "dest.jpg"
    
    	// 本地儲存檔案路徑
    	localFilePath = "dest.jpg"
    )
    
    func main() {
    	// 初始化訪問憑證提供者
    	// 從環境變數中擷取訪問憑證
    	// 運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET
    	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    	if err != nil {
    		fmt.Printf("初始化憑證提供者失敗: %v\n", err)
    		os.Exit(-1)
    	}
    
    	// 建立OSS用戶端執行個體
    	// oss.ForcePathStyle(true) 用於開啟路徑風格訪問模式,適用於PrivateLink等特定情境
    	client, err := oss.New(
    		endpoint,
    		"", // AccessKeyId 通過憑證提供者擷取
    		"", // AccessKeySecret 通過憑證提供者擷取
    		oss.SetCredentialsProvider(&provider),
    		oss.ForcePathStyle(true),
    	)
    	if err != nil {
    		fmt.Printf("建立OSS用戶端失敗: %v\n", err)
    		os.Exit(-1)
    	}
    
    	// 擷取Bucket對象
    	bucket, err := client.Bucket(bucketName)
    	if err != nil {
    		fmt.Printf("擷取Bucket對象失敗: %v\n", err)
    		os.Exit(-1)
    	}
    
    	// 下載Object到本地檔案
    	// 如果指定的本地檔案存在會覆蓋,不存在則建立
    	// 如果未指定本地路徑,則下載後的檔案預設儲存到樣本程式所屬專案對應本地路徑中
    	err = bucket.GetObjectToFile(objectName, localFilePath)
    	if err != nil {
    		fmt.Printf("下載檔案失敗: %v\n", err)
    		os.Exit(-1)
    	}
    
    	fmt.Printf("檔案下載成功: %s -> %s\n", objectName, localFilePath)
    }
    

    C++

    在PrivateLink訪問情境下使用conf.isPathStyle = true開啟路徑風格(Path-style)訪問模式。

    #include <alibabacloud/oss/OssClient.h>
    #include <memory>
    #include <fstream>
    #include <iostream>
    
    using namespace AlibabaCloud::OSS;
    
    int main(void)
    {
        // PrivateLink終端節點網域名稱
        std::string Endpoint = "https://ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com";
        
        // Bucket名稱
        std::string BucketName = "example-bucket";
        
        // OSS物件路徑(完整路徑中不能包含Bucket名稱)
        std::string ObjectName = "dest.jpg";
        
        // 本地儲存檔案路徑
        // 如果指定的本地檔案存在會覆蓋,不存在則建立
        // 如果未指定本地路徑,則下載後的檔案預設儲存到樣本程式所屬專案對應本地路徑中
        std::string FileNametoSave = "dest.jpg";
    
        // 初始化OSS SDK網路等資源
        InitializeSdk();
    
        // 配置用戶端參數
        ClientConfiguration conf;
        
        // 從環境變數中擷取訪問憑證
        // 運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET
        auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
        
        // 開啟路徑風格訪問模式,適用於PrivateLink等特定情境
        conf.isPathStyle = true;
        
        // 建立OSS用戶端執行個體
        OssClient client(Endpoint, credentialsProvider, conf);
    
        // 構建下載Object請求
        GetObjectRequest request(BucketName, ObjectName);
        
        // 設定響應流工廠,用於建立本地檔案流
        request.setResponseStreamFactory([=]() {
            return std::make_shared<std::fstream>(
                FileNametoSave, 
                std::ios_base::out | std::ios_base::in | std::ios_base::trunc | std::ios_base::binary
            );
        });
    
        // 執行下載操作
        auto outcome = client.GetObject(request);
    
        // 處理下載結果
        if (outcome.isSuccess()) {
            std::cout << "檔案下載成功,大小: " 
                      << outcome.result().Metadata().ContentLength() 
                      << " 位元組" << std::endl;
            std::cout << "檔案儲存路徑: " << FileNametoSave << std::endl;
        }
        else {
            // 錯誤處理
            std::cout << "檔案下載失敗" << std::endl
                      << "錯誤碼: " << outcome.error().Code() << std::endl
                      << "錯誤資訊: " << outcome.error().Message() << std::endl
                      << "請求ID: " << outcome.error().RequestId() << std::endl;
            
            // 釋放資源並返回錯誤碼
            ShutdownSdk();
            return -1;
        }
    
        // 釋放OSS SDK網路等資源
        ShutdownSdk();
        return 0;
    }

本機資料中心通過專線/VPN網關互聯

企業資料中心可通過Express Connect專線串連或VPN網關建立與阿里雲VPC的網路連通,進而利用PrivateLink實現OSS私網訪問。專線串連提供穩定的網路效能和頻寬保障,VPN網關則提供靈活的加密串連方式,兩種方案均適用於生產環境的大規模資料轉送情境。詳細配置方法請參見VPC串連本機資料中心/其他雲

應用於生產環境

最佳實務

  • 安全性群組配置最佳化

    基於最小許可權原則配置安全性群組規則,僅對必要的IP位址區段開放終端節點訪問連接埠,建立週期性安全規則審查機制。通過精確的源IP控制和連接埠限制,確保存取控制策略與業務需求保持一致,有效防範許可權泛化和未授權訪問風險。

  • 網路連通性監控

    開啟VPC流日誌功能,建立基於流量模式的異常檢測機制,即時監控PrivateLink訪問行為和資料轉送狀況。

  • 多可用性區域部署

    在生產環境中跨多個可用性區域部署終端節點,構建容災能力強的服務高可用架構。通過負載平衡或DNS輪詢實現智能流量分發,當單個可用性區域發生故障時,業務流量自動切換至其他可用性區域的健康終端節點,確保服務連續性和業務穩定運行。

費用說明

PrivateLink按實際使用量計費,每小時出賬,費用包含執行個體費和流量處理費。服務使用方和服務提供者可以是不同的阿里雲帳號,支援將費用歸入指定帳號進行出賬。更多計費資訊請參見計費說明