私網串連(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執行個體建立隨用隨付執行個體。
步驟一:建立終端節點
前往VPC終端節點頁面,點擊建立終端節點。首次使用請按頁面提示完成開通私網串連服務操作。
根據以下參數進行配置,未列出的配置項保持預設值即可。
所屬地區:選擇目標OSS Bucket所在地區,如華東1(杭州)。
節點名稱:輸入便於識別的終端節點名稱,建議使用描述性命名,如
privatelink-oss。終端節點類型:選擇介面終端節點。
終端節點服務:選擇阿里雲服務,在服務列表中選擇OSS終端節點服務(服務名稱以
oss結尾的條目)。說明如果在終端節點服務列表中未找到對應的OSS終端節點服務,請聯絡支援人員申請開通。
專用網路:選擇需要建立終端節點的目標專用網路,如無可用網路可單擊建立專用網路建立。
安全性群組:選擇終端節點綁定的安全性群組,用於控制存取權限,如無合適安全性群組可單擊建立安全性群組建立。
可用性區域與交換器:選擇終端節點部署的可用性區域和對應交換器,如無可用交換器可單擊建立交換器建立。
點擊確定建立,系統將自動完成終端節點建立。建立完成後,在終端節點詳情頁面可查看並複製終端節點服務網域名稱,該網域名稱將用於後續OSS訪問。

步驟二:驗證終端節點網域名稱
通過網路連通性測試和OSS檔案下載操作驗證終端節點配置正確性,確保PrivateLink私網訪問網路暢通且功能完整。
網路連通性驗證
使用
ping命令測試終端節點網域名稱的網路連通性,驗證DNS解析和網路路徑是否正常。ping -c 4 ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com檔案下載驗證
在相同地區的ECS執行個體中使用ossutil工具執行實際的OSS檔案下載操作,驗證PrivateLink串連的功能完整性和資料轉送穩定性。
使用終端節點網域名稱(如
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訪問檔案為例說明配置方法,實現網路層和應用程式層的雙重存取控制。
前往Bucket列表,單擊目標Bucket。
在左側功能表列單擊。
單擊新增授權,按照以下內容進行配置,其他參數可保持預設選項。
授權使用者:選擇所有帳號(*)。
授權操作:選擇進階設定。
效力:選擇拒絕。
操作:選擇oss:GetObject。
條件:勾選VPC ≠,並在下拉框中選擇PrivateLink綁定的VPC。
單擊確定,完成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串連的功能完整性和資料轉送穩定性。
使用終端節點網域名稱(如
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串連本機資料中心/其他雲。
應用於生產環境
最佳實務
費用說明
PrivateLink按實際使用量計費,每小時出賬,費用包含執行個體費和流量處理費。服務使用方和服務提供者可以是不同的阿里雲帳號,支援將費用歸入指定帳號進行出賬。更多計費資訊請參見計費說明。