通過PrivateLink調用雲控制API可以實現私網訪問服務,避免通過公網訪問服務帶來的潛在安全風險。
概述
什麼是PrivateLink
PrivateLink是阿里雲提供的一種私網訪問服務,能夠實現VPC與阿里雲服務之間的私網串連,避免通過公網訪問,從而提升安全性和穩定性。
使用情境
當您的應用程式運行在阿里雲生產環境上,並需要調用雲控制API服務時,推薦使用PrivateLink技術來實現內網調用,適用於以下情境:
-
安全合規要求高:企業內部安全性原則要求禁止或限制公網訪問。
-
成本最佳化:減少公網流量費用,降低總體擁有成本。
-
跨地區部署:需要在多個地區部署應用,要求統一的網路架構。
技術優勢
|
優勢 |
說明 |
|
低時延 |
內網直連,相比公網訪問可降低30%-50%的網路時延。 |
|
高穩定性 |
避免公網波動。 |
|
安全隔離 |
流量不經過公網。 |
前提條件
許可權要求
配置PrivateLink終端節點需授予以下許可權:
-
AliyunVPCFullAccess:VPC完整存取權限。 -
AliyunPrivateLinkFullAccess:PrivateLink完整存取權限。
資源要求
根據您調用的雲控制API服務部署地區,需要滿足以下條件:
|
雲控制API服務地區 |
訪問網域名稱 |
需要的VPC地區 |
|
國內服務 |
cloudcontrol.aliyuncs.com |
cn-zhangjiakou(華北3-張家口) |
|
國際服務 |
cloudcontrol.ap-southeast-1.aliyuncs.com |
ap-southeast-1(新加坡) |
資源清單:
-
目標地區的VPC執行個體。
-
VPC內至少一個可用的交換器(vSwitch)。
-
確保交換器有足夠的可用IP地址。
服務地區說明
雲控制API服務目前支援部署在以下地區,請根據您的業務需求選擇:
國內服務(cn-zhangjiakou)
-
終端節點服務:
com.aliyuncs.privatelink.cn-zhangjiakou.cloudcontrol-api -
公網網域名稱:
cloudcontrol.aliyuncs.com -
私網網域名稱:
cloudcontrol.vpc-proxy.aliyuncs.com
國際服務(ap-southeast-1)
-
終端節點服務:
com.aliyuncs.privatelink.ap-southeast-1.cloudcontrol -
公網網域名稱:
cloudcontrol.ap-southeast-1.aliyuncs.com -
私網網域名稱:
cloudcontrol-vpc.ap-southeast-1.aliyuncs.com
配置PrivateLink後,應用代碼需要將調用網域名稱修改為對應的私網網域名稱。
配置步驟
同地區配置
當您的應用部署在cn-zhangjiakou或ap-southeast-1時,可以直接在同地區建立終端節點。
步驟1:登入控制台
-
登入阿里雲VPC控制台。
-
在左側導覽列中,單擊進入終端節點頁面。
-
在介面終端節點中,單擊 開通私網串連服務 。

步驟2:選擇地區
在“所屬地區”下拉框中選擇:
-
訪問國內服務 → 選擇華北3(張家口)。
-
訪問國際服務 → 選擇新加坡。
步驟3:配置基本資料
|
配置項 |
說明 |
配置樣本 |
|
終端節點名稱 |
自訂名稱,建議使用有意義的命名 |
|
|
終端節點類型 |
選擇“介面終端節點” |
介面終端節點 |
|
資源類型 |
選擇“阿里雲服務” |
阿里雲服務 |
步驟4:選擇終端節點服務
-
在搜尋終端節點服務輸入框中,根據目標服務輸入:
-
國內服務:
com.aliyuncs.privatelink.cn-zhangjiakou.cloudcontrol-api -
國際服務:
com.aliyuncs.privatelink.ap-southeast-1.cloudcontrol
-
-
搜尋後會顯示唯一的終端節點服務,選中即可。
步驟5:啟用自訂網域名
勾選開啟自訂服務網域名稱,系統會自動分配私網訪問網域名稱,無需手動填寫。
-
國內服務網域名稱:
cloudcontrol.vpc-proxy.aliyuncs.com -
國際服務網域名稱:
cloudcontrol-vpc.ap-southeast-1.aliyuncs.com
選擇終端節點服務名稱為 com.aliyuncs.privatelink.cn-zhangjiakou.cloudcontrol-api 的服務。
步驟6:網路設定
|
配置項 |
說明 |
建議 |
|
Virtual Private Cloud |
選擇您的應用所在的VPC |
確保選擇正確的VPC |
|
可用性區域與交換器 |
至少選擇一個交換器,建議選擇多個以實現高可用 |
生產環境建議選擇2-3個不同可用性區域 |
|
安全性群組 |
選擇安全性群組限制訪問來源 |
建議配置僅允許應用安全性群組訪問 |
多可用性區域配置樣本:
可用性區域A:vsw-xxxxx
可用性區域B:vsw-yyyyy
步驟7:配置存取原則
終端節點策略用於控制哪些主帳號/RAM使用者可以通過該終端節點訪問服務。
根據最小許可權原則,建議限制僅允許必要的帳號訪問。
預設策略(允許所有):
{
"Version":"1",
"Statement":[
{
"Effect":"Allow",
"Principal":"*",
"Action":"*",
"Resource":"*"
}
]
}
推薦策略(僅允許本帳號):
{
"Version":"1",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Aliyun":[
"acs:ram:YOUR_ACCOUNT_ID:root"
]
},
"Action":"*",
"Resource":"*"
}
]
}
步驟8:建立並驗證
-
單擊確定建立,建立終端節點。
-
等待2-5分鐘,終端節點狀態變為可用。
-
串連狀態顯示為已串連。
狀態說明:
-
建立中:終端節點正在建立。
-
可用:終端節點已就緒,可以使用。
-
異常 :建立失敗或串連異常,需要檢查配置。
終端節點建立完成後,在終端節點詳情頁的基本資料地區,確認狀態為可用、串連狀態為已串連。在終端節點服務網域名稱地區,可查看預設服務網域名稱,並確認自訂服務網域名稱已啟用,網域名稱為cloudcontrol.vpc-proxy.aliyuncs.com。
跨地區配置
當您的應用部署在cn-zhangjiakou或ap-southeast-1以外的地區,需要通過雲企業網(CEN)打通跨地區網路。
步驟1:在目標地區建立終端節點
-
在
cn-zhangjiakou或ap-southeast-1建立終端節點。具體操作,請參見同地區配置。 -
記錄終端節點所在的VPC ID。
步驟2:建立CEN執行個體打通region
CEN配置說明請參考跨地區VPC互連。
驗證與測試
連通性驗證
登入到部署應用的ECS或容器執行個體,執行以下命令:
國內服務驗證:
curl -v cloudcontrol.vpc-proxy.aliyuncs.com
國際服務驗證:
curl -v cloudcontrol-vpc.ap-southeast-1.aliyuncs.com
成功標誌:
返回的HTTP回應標頭中包含 x-acs-request-id,樣本輸出:
< HTTP/1.1 401 Unauthorized
< date:Thu, 09 Oct 2025 10:30:00 GMT
< content-type:application/json
< x-acs-request-id:23C12345-1234-1234-1234-123456789ABC
< x-acs-trace-id:0b12345678901234567890123456789a
...
由於請求未攜帶身份憑證資訊,介面返回401狀態代碼屬於預期行為。
測試關注點:回應標頭中必須包含阿里雲標識性欄位(如 x-acs-request-id),以確認請求已被阿里雲 API Gateway或服務正確處理。
應用整合樣本
Java樣本
import com.aliyun.cloudcontrol20220830.Client;
import com.aliyun.teaopenapi.models.Config;
public class PrivateLinkExample {
public static void main(String[] args) throws Exception {
// 配置用戶端
Config config = new Config()
.setAccessKeyId("<YOUR-ACCESS-KEY-ID>")
.setAccessKeySecret("<YOUR-ACCESS-KEY-SECRET>")
// 使用私網網域名稱
.setEndpoint("cloudcontrol.vpc-proxy.aliyuncs.com") // 國內服務
.setHost("cloudcontrol.aliyuncs.com") // 國內服務
// .setEndpoint("cloudcontrol-vpc.ap-southeast-1.aliyuncs.com") // 國際服務
.setProtocol("https");
Client client = new Client(config);
// 後續使用client進行API調用
try {
var response = client.listResources(...);
System.out.println("Request successful: " + response.getBody().getRequestId());
} catch (Exception e) {
System.err.println("Request failed: " + e.getMessage());
}
}
}