Untuk akses layanan lintas-VPC atau lintas-akun, gunakan PrivateLink untuk mengarahkan traffic melalui jaringan pribadi alih-alih Internet. Pendekatan ini mengurangi eksposur jaringan publik dan meningkatkan keamanan. Saat menggunakan Server Load Balancer (SLB) untuk akses privat, aktifkan Proxy Protocol v2 guna mengidentifikasi Virtual Private Cloud (VPC) sumber dan endpoint PrivateLink dari setiap permintaan—memungkinkan penerapan kontrol akses tingkat detail halus.
Sebelum memulai
Sebelum menyiapkan PrivateLink, perhatikan batasan berikut:
| Batasan | Detail |
|---|---|
| Persyaratan zona yang sama | Endpoint (sisi konsumen layanan) dan layanan endpoint (sisi penyedia layanan) harus berada di zona yang sama. Zona tempat endpoint ditempatkan harus merupakan himpunan bagian dari zona tempat sumber daya layanan endpoint ditempatkan. Misalnya, jika layanan endpoint mencakup Zona A dan B, endpoint hanya dapat dibuat di Zona A atau Zona B. |
| Ketergantungan load balancer | PrivateLink memerlukan instans Server Load Balancer (SLB) di sisi penyedia layanan. Untuk mengidentifikasi VPC sumber dan endpoint yang sebenarnya, aktifkan Proxy Protocol v2 (lihat Gunakan Proxy Protocol v2 untuk mengontrol VPC yang dapat diakses). |
| Persetujuan koneksi | Secara default, permintaan koneksi tetap tertunda hingga penyedia layanan menerimanya. Anda dapat mengonfigurasi layanan endpoint agar secara otomatis menerima koneksi, atau menyetujui setiap permintaan secara manual dari tab Connections. |
Risiko keamanan dan manfaat PrivateLink
Risiko eksposur jaringan publik
Layanan yang diekspos ke jaringan publik—baik database yang dibangun sendiri, aplikasi inferensi AI, maupun layanan Alibaba Cloud seperti Object Storage Service (OSS)—menghadapi tiga kategori risiko:
Serangan DDoS dan kerentanan. Setiap layanan yang menghadap internet menjadi sasaran serangan DDoS, pemindaian kerentanan, dan upaya login brute-force.
Pemalsuan identitas. Layanan internet tradisional mengandalkan kredensial untuk autentikasi. Kredensial yang bocor memungkinkan penyerang menyamar sebagai pengguna sah dari mana saja di dunia, tanpa cara membatasi jaringan asal permintaan tersebut.
Eksfiltrasi data. Karyawan dapat menggunakan akun pribadi untuk mengunggah data perusahaan melalui endpoint publik layanan Alibaba Cloud seperti OSS. Karena traffic melewati jaringan publik, kebijakan jaringan perusahaan tidak dapat mencegatnya.
Manfaat yang diberikan PrivateLink
Menggunakan PrivateLink untuk menggantikan endpoint publik mengatasi masing-masing risiko tersebut:
| Manfaat | Deskripsi |
|---|---|
| Hilangkan permukaan serangan publik | Layanan hanya dapat diakses dari jaringan pribadi yang ditentukan, bukan dari Internet. |
| Terapkan kontrol akses tingkat jaringan | Batasi akses berdasarkan VPC atau ID endpoint, sehingga kredensial yang valid saja tidak cukup—permintaan juga harus berasal dari jaringan yang disetujui. |
| Blokir eksfiltrasi data yang tidak sah | Konfigurasikan OSS agar hanya menerima akses dari VPC perusahaan Anda, sehingga akun pribadi tidak dapat mengekstraksi data melalui endpoint OSS publik meskipun kredensialnya valid. |
Akses lintas-VPC dalam zona yang sama
Layanan web berjalan pada instans Elastic Compute Service (ECS) di VPC2. Koneksi PrivateLink dibuat antara VPC1 dan VPC2, sehingga aplikasi di VPC1 dapat mengakses layanan web tersebut menggunakan alamat IP pribadi—tanpa perlu eksposur jaringan publik.
Konfigurasi penyedia layanan
Buat load balancer. Di VPC2, buat instans Classic Load Balancer (CLB) atau NLB privat. Konfigurasikan grup server backend dan pendengar.
Buat layanan endpoint. Di konsol PrivateLink, buat layanan endpoint dan kaitkan dengan load balancer yang dibuat pada langkah sebelumnya.
Konfigurasikan daftar izin (hanya lintas-akun). Jika VPC1 milik Akun Alibaba Cloud yang berbeda, tambahkan UID akun konsumen ke daftar izin layanan endpoint.
Terima permintaan koneksi. Setelah konsumen membuat endpoint, permintaan koneksi muncul di tab Connections layanan endpoint. Terima permintaan tersebut, atau konfigurasikan layanan endpoint agar menerima koneksi secara otomatis.
Konfigurasi konsumen layanan
Buat endpoint. Di VPC1, buat endpoint dan pilih layanan endpoint yang dibuat di sisi penyedia.
Konfigurasikan akses jaringan. Tetapkan vSwitch dan security group di VPC1 ke endpoint. Hal ini mengontrol sumber daya mana di VPC1 yang dapat mengakses endpoint.
Ambil detail endpoint. Setelah endpoint dibuat, nama domain pribadi dan alamat IP pribadi akan dihasilkan.
Mulai mengirim traffic. Setelah penyedia layanan menerima koneksi, aplikasi di VPC1 dapat menggunakan nama domain pribadi atau alamat IP untuk mengakses layanan di VPC2.
Untuk panduan langkah demi langkah, lihat Akses layanan Alibaba Cloud melalui jaringan pribadi.
Gunakan Proxy Protocol v2 untuk mengontrol VPC yang dapat diakses
Saat traffic mencapai backend Anda melalui PrivateLink dan NLB, IP sumber adalah IP privat node NLB—bukan IP aktual konsumen. Aktifkan Proxy Protocol v2 pada pendengar NLB untuk menerima ID VPC sumber dan ID endpoint PrivateLink dalam header setiap koneksi. Backend Anda kemudian dapat menerapkan aturan kontrol akses, seperti menolak permintaan dari VPC yang tidak sah.
Bagian ini mengembangkan konfigurasi pada Akses lintas-VPC dalam zona yang sama.
Langkah 1: Aktifkan Proxy Protocol v2 pada pendengar NLB
Gunakan Alibaba Cloud CLI untuk mengaktifkan Proxy Protocol v2 dan berlangganan bidang ID VPC dan ID endpoint:
aliyun nlb UpdateListenerAttribute \
--ListenerId lsn-xxxxxxxxxxxxxxxx \
--ProxyProtocolEnabled true \
--ProxyProtocolV2Config '{"Ppv2VpcIdEnabled":true,"Ppv2PrivateLinkEpIdEnabled":true}' \
--RegionId cn-hangzhou| Parameter | Deskripsi |
|---|---|
--ListenerId | ID pendengar NLB untuk layanan web Anda. |
--ProxyProtocolEnabled | Atur ke true untuk mengaktifkan Proxy Protocol. Penting Layanan backend harus dikonfigurasi untuk mengurai header Proxy Protocol (lihat Langkah 2). Mengaktifkan ini pada pendengar yang back-end-nya tidak mendukung protokol tersebut akan mengganggu traffic. |
--ProxyProtocolV2Config | Menambahkan bidang TLV (Type-Length-Value) yang ditentukan Alibaba Cloud ke header. Pada contoh ini, berlangganan ID VPC sumber dan ID endpoint PrivateLink. |
Setelah diaktifkan, NLB menambahkan header biner Proxy Protocol v2 di awal setiap koneksi TCP baru. Header tersebut mencakup bidang alamat standar dan dua ekstensi TLV kustom:


Rincian header TLV:
| Bidang | Konten | Byte mentah (contoh) |
|---|---|---|
| Signature protokol | Signature Proxy Protocol tetap sepanjang 12 byte | 0d0a0d0a000d0a515549540a |
| Versi/perintah | Versi 2, perintah PROXY | 21 |
| Address family | TCP/IPv4 | 11 |
| Panjang data | 84 byte berikutnya | 0054 |
| IP sumber | 10.0.0.14 | 0a00000e |
| Alamat IP tujuan | 10.0.0.15 | 0a00000f |
| Port sumber | 59074 | e6c2 |
| Port tujuan | 80 | 0050 |
| TLV1 | Tipe 03, 4 byte | 0764b56b |
| TLV2 (kustom) | Tipe e1, 24 byte — ID endpoint PrivateLink: ep-bp1i288487e586152d4b | 0265702d6270316932383834383765353836313532643462 |
| TLV3 (kustom) | Tipe e1, 26 byte — ID VPC: vpc-bp179qeke0wzo1mr8bxhl | 017670632d627031373971656b6530777a6f316d72386278686c |
| TLV4 | Tipe 04 (PP2_TYPE_NETNS), 6 byte | 000000000000 |
Langkah 2: Konfigurasikan NGINX untuk mengurai Proxy Protocol v2
NGINX Plus R16 atau versi lebih baru (dan NGINX open-source 1.13.11 atau lebih baru) mendukung Proxy Protocol v2. Konfigurasi pendengar standar adalah:
server {
listen 80 proxy_protocol; # Aktifkan Proxy Protocol v1/v2
# Konfigurasi lainnya...
}Dengan konfigurasi ini, NGINX secara otomatis mengurai header Proxy Protocol dan mengekstrak IP klien. Namun, build NGINX standar tidak memproses bidang TLV kustom Alibaba Cloud (ID VPC dan ID endpoint). Gunakan ekstensi Lua untuk mengekstrak nilai-nilai tersebut.
Blok nginx.conf berikut membaca dan mengurai seluruh header Proxy Protocol v2, termasuk bidang TLV kustom, sebelum meneruskan traffic ke lapisan HTTP:
stream {
server{
listen 80; -- Jangan aktifkan proxy_protocol. Biarkan kode Lua di bawah ini yang menanganinya.
preread_by_lua_block {
-- 1. Baca header protokol tetap sepanjang 16 byte
local sock = ngx.req.socket(true)
local header, err = sock:receive(16)
if not header then
ngx.log(ngx.ERR, "gagal menerima header proxy protocol: ", err)
return
end
-- 2. Verifikasi signature protokol (12 byte pertama)
if string.sub(header, 1, 12) ~= "\x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A" then
-- Bukan header Proxy Protocol; kembalikan data agar permintaan tidak rusak
sock:setreused(header)
return
end
-- 3. Uraikan bidang header tetap
local ver_cmd = string.byte(header, 13) -- Versi dan perintah
local family = string.byte(header, 14) -- Family alamat dan protokol
local len = string.byte(header, 15) * 256 + string.byte(header, 16) -- Panjang bagian variabel
if len == 0 then
-- Tidak ada data alamat atau TLV
return
end
-- 4. Baca bagian panjang variabel (info alamat + bidang TLV)
local variable_part, err = sock:receive(len)
if not variable_part or #variable_part < len then
ngx.log(ngx.ERR, "gagal membaca bagian variabel (alamat + tlvs): ", err)
return
end
-- 5. Tentukan panjang blok alamat berdasarkan family alamat
local addr_len = 0
local protocol = family & 0x0F
local address_family = family >> 4
if address_family == 1 then -- AF_INET (IPv4)
addr_len = 12
elseif address_family == 2 then -- AF_INET6 (IPv6)
addr_len = 36
elseif address_family == 3 then -- AF_UNIX
addr_len = 216
end
-- 6. Pisahkan blok alamat dan data TLV
local address_block = string.sub(variable_part, 1, addr_len)
local tlv_string = string.sub(variable_part, addr_len + 1)
-- 7. Uraikan data TLV ke dalam tabel
local tlvs = {}
local pos = 1
while pos <= #tlv_string do
if pos + 2 > #tlv_string then
ngx.log(ngx.ERR, "data TLV tidak sesuai format: byte tidak cukup untuk tipe dan panjang")
break
end
local tlv_type = string.byte(tlv_string, pos)
local tlv_length = string.byte(tlv_string, pos + 1) * 256 + string.byte(tlv_string, pos + 2)
if pos + 2 + tlv_length > #tlv_string then
ngx.log(ngx.ERR, "data TLV tidak sesuai format: panjang melebihi data yang tersedia")
break
end
local tlv_value = string.sub(tlv_string, pos + 3, pos + 2 + tlv_length)
table.insert(tlvs, {
type = tlv_type,
length = tlv_length,
-- Encode nilai biner dalam Base64 untuk penyimpanan dan inspeksi
value = ngx.encode_base64(tlv_value)
})
pos = pos + 3 + tlv_length
end
-- 8. Simpan TLV yang telah diurai dalam ngx.ctx untuk diakses oleh lapisan HTTP
if #tlvs > 0 then
ngx.ctx.proxy_protocol_tlvs = tlvs
end
}
proxy_pass localhost:8080; -- Teruskan permintaan HTTP berikutnya ke server HTTP
}
}
http {
server {
listen 8080;
-- Terapkan pemeriksaan ID endpoint pada permintaan /login
location /login {
access_by_lua_block {
local expected_value = "some value"
-- Ambil ID endpoint PrivateLink dari TLV2 (di-encode Base64)
local privateLinkEndId = ngx.var.pp_tlv2_value
-- Tolak permintaan jika ID endpoint tidak cocok
if received_value ~= expected_value then
ngx.log(ngx.ERR, "Akses ke /login ditolak: nilai TLV tidak cocok. Diharapkan '",
expected_value, "', diterima '", received_value, "'")
return ngx.exit(ngx.HTTP_FORBIDDEN)
end
-- Verifikasi berhasil; lanjutkan pemrosesan
}
-- Teruskan permintaan yang telah diverifikasi ke backend
proxy_pass http://your_python_backend;
}
-- Tangani semua permintaan lainnya
location / {
proxy_pass http://your_python_backend;
}
}
upstream your_python_backend {
server 127.0.0.1:5000;
}
}Ganti some value dengan ID endpoint PrivateLink aktual yang harus diterima layanan Anda. Permintaan dengan ID endpoint yang tidak cocok atau tidak ada akan menerima respons HTTP 403.
Akses layanan Alibaba Cloud melalui PrivateLink
Beberapa layanan Alibaba Cloud, seperti OSS, mendukung akses melalui PrivateLink. Hal ini memungkinkan Anda membatasi akun dan jaringan mana yang dapat mengakses layanan tersebut, melindungi dari dua risiko umum:
Eksfiltrasi data akun pribadi. Karyawan dapat menggunakan akun Alibaba Cloud pribadi untuk menyalin data perusahaan ke penyimpanan pribadi melalui endpoint publik OSS. Mengarahkan akses OSS melalui endpoint gateway di VPC Anda memblokir saluran ini.
Kompromi kredensial. Jika kredensial akun perusahaan bocor, penyerang di internet publik dapat menggunakannya untuk mengakses OSS. Mengonfigurasi OSS agar hanya menerima traffic dari VPC perusahaan Anda membuat kredensial yang bocor tidak berguna dari luar jaringan tersebut.
Langkah-langkah penyiapan:
Buat endpoint gateway untuk layanan Alibaba Cloud. Di konsol PrivateLink, buat endpoint gateway untuk OSS (atau layanan lain yang didukung). Kaitkan dengan VPC perusahaan Anda dan tabel rute.
Konfigurasikan kebijakan akses endpoint. Di kebijakan endpoint, batasi akses hanya untuk identitas Resource Access Management (RAM) (pengguna atau peran) di bawah Akun Alibaba Cloud perusahaan Anda. Hal ini memblokir akun pribadi—bahkan yang memiliki kredensial OSS—dari menggunakan saluran privat ini.
Terapkan akses berbasis VPC dengan kebijakan RAM (opsional). Untuk kontrol yang lebih ketat, tambahkan kebijakan RAM yang mensyaratkan akses OSS harus berasal dari VPC tertentu. Hal ini memastikan akun perusahaan hanya dapat mengakses OSS dari dalam jaringan pribadi Anda, bukan dari internet publik.
Periksa traffic jaringan publik yang ada
Sebelum migrasi ke PrivateLink, identifikasi beban kerja mana yang saat ini berkomunikasi melalui jaringan publik. Analisis log aliran VPC untuk menemukan traffic arah keluar dari VPC Anda ke alamat IP publik.
Aktifkan log aliran VPC
Aktifkan fitur log aliran untuk VPC tempat beban kerja inti Anda berjalan. Kirim log tersebut ke Simple Log Service.
Identifikasi traffic jaringan publik
Di Simple Log Service, kueri log aliran VPC dan filter traffic arah keluar (direction = out). Kemudian persempit hasilnya:
Filter paket respons. Kecualikan traffic dengan port tujuan di bawah 1024 dan traffic lain yang merupakan bagian dari respons layanan normal. Hal ini mengurangi kebisingan dari balasan arah keluar.
Identifikasi alamat IP publik Alibaba Cloud. Cari kepemilikan alamat IP tujuan (
dstaddr) menggunakan alat seperti ipip.net. Fokus pada alamat IP publik yang dimiliki oleh Alibaba Cloud.Temukan instans sumber. Gunakan bidang
vm-iddalam log aliran untuk mengidentifikasi instans ECS yang memulai setiap koneksi.

Interpretasi hasil
| Temuan | Tindakan |
|---|---|
| Alamat IP tujuan adalah endpoint publik layanan Alibaba Cloud (seperti OSS) | Beralih ke endpoint gateway PrivateLink untuk layanan tersebut. |
| Alamat IP tujuan mengarah ke layanan di VPC lain dalam akun Anda (seperti EIP atau SLB) | Gunakan PrivateLink untuk komunikasi lintas-VPC ini. |