Untuk akses layanan lintas-VPC atau lintas-akun, Anda dapat menggunakan PrivateLink untuk mengakses layanan melalui jaringan pribadi alih-alih Internet. Ini mengurangi paparan terhadap Internet dan meningkatkan keamanan jaringan. Saat menggunakan layanan Server Load Balancer (SLB) untuk akses pribadi, Anda dapat mengaktifkan Proxy Protocol v2. Ini memungkinkan Anda mendapatkan ID VPC sumber permintaan dan ID titik akhir PrivateLink untuk lebih mengontrol akses jaringan.
Risiko keamanan
Dalam lingkungan cloud, layanan seperti platform database mandiri dan aplikasi inferensi AI, bersama dengan layanan Alibaba Cloud seperti Object Storage Service (OSS), sering dikonfigurasikan dengan elastic IP addresses (EIPs) atau titik akhir publik untuk kemudahan akses. Praktik ini nyaman, tetapi mengekspos layanan langsung ke Internet. Hal ini memperkenalkan risiko keamanan serius:
Risiko Serangan Jaringan Publik: Setiap layanan yang terpapar ke jaringan publik dapat menjadi target serangan. Layanan tersebut menghadapi ancaman seperti serangan DDoS, pemindaian kerentanan aplikasi dan eksploitasi, serta serangan brute-force.
Risiko Pemalsuan Identitas: Layanan Internet tradisional terutama mengandalkan otentikasi nama pengguna dan kata sandi. Jika kredensial bocor, penyerang dapat menyamar sebagai pengguna sah dari mana saja di dunia untuk mengakses secara ilegal, mencuri, atau memanipulasi data. Model akses publik tidak dapat secara efektif membatasi sumber jaringan permintaan.
Saluran Eksfiltrasi Data: Karyawan internal mungkin menggunakan akun pribadi mereka untuk mengunggah dan mengeksfiltrasi data inti perusahaan dari jaringan internal melalui titik akhir publik layanan Alibaba Cloud, seperti OSS. Karena komunikasi terjadi melalui jaringan publik, kebijakan jaringan perusahaan sulit diterapkan secara efektif.
Praktik terbaik
Gunakan PrivateLink untuk akses lintas-VPC dalam zona yang sama
Deskripsi: Sebuah layanan jaringan, seperti layanan web, ditempatkan pada instance ECS di VPC2. Koneksi PrivateLink dibuat antara VPC1 dan VPC2. Ini memungkinkan layanan jaringan diakses dari VPC1 menggunakan alamat IP pribadi (titik akhir).
Catatan: Untuk menggunakan PrivateLink, titik akhir (konsumen layanan) dan layanan titik akhir (penyedia layanan) harus berada dalam zona yang sama. Lebih spesifik lagi, zona tempat titik akhir ditempatkan harus merupakan subset dari zona tempat sumber daya layanan titik akhir ditempatkan. Misalnya, jika layanan titik akhir ditempatkan di Zona A dan B, titik akhir hanya dapat dibuat di Zona A atau Zona B.
Langkah-Langkah Inti:
Konfigurasi Sisi Server (Penyedia Layanan)
Buat Load Balancer: Di VPC2, buat instance SLB yang mendukung PrivateLink, seperti Classic Load Balancer (CLB) pribadi atau Network Load Balancer (NLB). Konfigurasikan grup server backend dan pendengar.
Buat Layanan Titik Akhir: Di konsol PrivateLink, buat layanan titik akhir. Asosiasikan dengan instance SLB yang dibuat pada langkah sebelumnya.
Konfigurasikan Daftar Putih Layanan (Hanya untuk Akses Lintas-Akun): Jika VPC1 milik Akun Alibaba Cloud yang berbeda, tambahkan UID akun tersebut ke daftar putih layanan dari layanan titik akhir.
Terima Permintaan Koneksi: Setelah klien memulai koneksi, navigasikan ke tab Koneksi dari layanan titik akhir. Temukan permintaan koneksi tertunda dan terima. Anda juga dapat mengatur layanan untuk secara otomatis menerima koneksi selama pembuatan.
Konfigurasi Sisi Klien (Konsumen Layanan)
Buat Titik Akhir: Di VPC1, buat titik akhir. Selama pembuatan, pilih layanan titik akhir yang dibuat di sisi server.
Konfigurasikan Jaringan: Pilih vSwitch dan grup keamanan di VPC1 untuk titik akhir. Ini mengontrol sumber daya mana di VPC1 yang dapat mengakses titik akhir.
Dapatkan Detail Titik Akhir: Setelah titik akhir dibuat, nama domain pribadi dan alamat IP dihasilkan.
Mulai Akses: Setelah penyedia layanan menerima koneksi, aplikasi di VPC1 dapat menggunakan nama domain atau alamat IP ini untuk mengakses layanan di VPC2.
Untuk informasi lebih lanjut, lihat Akses Layanan Alibaba Cloud Melalui Jaringan Pribadi.
Gunakan Proxy Protocol untuk mengontrol VPC yang dapat diakses dan alamat IP pribadinya
Saat Anda menyediakan layanan melalui PrivateLink, server dapat mengidentifikasi sumber sebenarnya dari permintaan jaringan, seperti dari titik akhir atau VPC mana mereka berasal. Ini memungkinkan layanan untuk menetapkan aturan keamanan. Misalnya, Anda dapat membatasi akun pengguna agar hanya digunakan dalam jaringan pribadi yang sah, artinya hanya menerima akses dari VPC yang sah. Bahkan jika kredensial akun bocor, ini mencegah akun digunakan untuk mengakses layanan dari Internet atau jaringan yang tidak sah.
Ikuti langkah-langkah di Gunakan PrivateLink untuk Akses Lintas-VPC dalam Zona yang Sama, lalu aktifkan aplikasi sisi server untuk mengidentifikasi VPC sumber permintaan dan menerapkan kontrol akses berdasarkan informasi ini.
Aktifkan Proxy Protocol v2: Aktifkan Proxy Protocol v2 pada pendengar NLB sisi server dan berlangganan ID VPC dan ID titik akhir.
# Gunakan Alibaba Cloud CLI untuk mengaktifkan Proxy Protocol v2 untuk pendengar tertentu dan berlangganan ID VPC dan ID titik akhir aliyun nlb UpdateListenerAttribute \ --ListenerId lsn-xxxxxxxxxxxxxxxx \ --ProxyProtocolEnabled true \ --ProxyProtocolV2Config '{"Ppv2VpcIdEnabled":true,"Ppv2PrivateLinkEpIdEnabled":true}' \ --RegionId cn-hangzhou--ListenerId: ID pendengar yang dibuat untuk layanan web dalam contoh ini.--ProxyProtocolEnabled:truemenunjukkan bahwa Proxy Protocol diaktifkan. Catatan: Protokol ini melewati informasi koneksi klien dalam paket pertama setelah jabat tangan TCP. Layanan backend harus mendukung protokol ini (lihat Langkah 2 untuk konfigurasi). Jika tidak, layanan akan terganggu.--ProxyProtocolV2Config: Menambahkan bidang TLV yang ditentukan oleh Alibaba Cloud. Dalam contoh ini, itu berlangganan ID VPC jaringan sumber dan ID titik akhir PrivateLink.
Penguraian TLV yang sesuai adalah sebagai berikut:Arti/Konten
Konten Asli
Header protokol
Tanda tangan tetap Proxy Protocol
0d0a0d0a000d0a515549540a
Versi 2, Perintah PROXY
21
TCP/IPv4
11
Data berikutnya adalah 84 byte panjangnya
0054
Informasi alamat
Alamat IP sumber: 10.0.0.14
0a00000e
Alamat IP tujuan: 10.0.0.15
0a00000f
Port sumber: 59074
e6c2
Port tujuan: 80
0050
TLV1
Jenis 03
034 byte
00040764b56b
0764b56b
TLV2
Jenis e1 (jenis khusus)
e124 byte
0018ID titik akhir PrivateLink:
ep-bp1i288487e586152d4b
0265702d6270316932383834383765353836313532643462
TLV3
Jenis e1 (jenis khusus)
e1
26 byte
001a
ID VPC:
vpc-bp179qeke0wzo1mr8bxhl
017670632d627031373971656b6530777a6f316d72386278686c
TLV4
04(PP2_TYPE_NETNS), digunakan untuk melewatkan namespace jaringan04
6 byte
0006000000000000000000000000Jika layanan web Anda menggunakan NGINX, konfigurasikan NGINX untuk mendukung Proxy Protocol sebagai berikut:
(NGINX Plus R16 atau lebih baru, atau open source NGINX 1.13.11 atau lebih baru, mendukung Proxy Protocol v2)
server { listen 80 proxy_protocol; # Aktifkan Proxy Protocol v1/v2 # Konfigurasi lainnya... }Dengan metode ini, nginx secara otomatis mengurai Proxy Protocol TLV pada port 80, tetapi versi standar nginx hanya mendukung pengambilan alamat IP dari TLV.
Ekstensi Lua diperlukan untuk memproses ID VPC khusus dan ID titik akhir PrivateLink dari Alibaba.
Kode berikut adalah contoh plugin Lua untuk nginx.conf yang menangani koneksi TCP dengan membaca paket dari soket dan mengurai buffer TLV.
Simpan ID titik akhir PrivateLink dalam konteks permintaan. Untuk permintaan `/login`, periksa apakah ID ini benar. Berikut adalah contoh kode Lua:
stream { server{ listen 80; # Jangan aktifkan proxy_protocol. Biarkan kode Lua di bawah ini menanganinya. preread_by_lua_block { -- 1. Coba baca header protokol tetap 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 protokol proxy: ", err) return end -- 2. Periksa tanda tangan protokol (12 byte) if string.sub(header, 1, 12) ~= "\x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A" then -- Jika bukan Proxy Protocol, masukkan kembali data yang dibaca ke dalam buffer untuk menghindari merusak permintaan asli sock:setreused(header) return end -- 3. Uraikan sisa header protokol local ver_cmd = string.byte(header, 13) -- Versi dan perintah local family = string.byte(header, 14) -- Keluarga alamat dan protokol local len = string.byte(header, 15) * 256 + string.byte(header, 16) -- Panjang total bagian variabel if len == 0 then -- Tidak ada informasi alamat atau TLV, kembalikan langsung return end -- 4. Baca bagian panjang variabel (berisi alamat dan 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 informasi alamat berdasarkan keluarga 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 informasi alamat dan data TLV local address_block = string.sub(variable_part, 1, addr_len) -- Anda dapat mengurai informasi alamat jika diperlukan local tlv_string = string.sub(variable_part, addr_len + 1) -- 7. Uraikan data TLV local tlvs = {} local pos = 1 while pos <= #tlv_string do -- Pastikan ada setidaknya 3 byte (Tipe, Panjang) if pos + 2 > #tlv_string then ngx.log(ngx.ERR, "data TLV rusak: tidak cukup byte 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) -- Pastikan panjang nilai tidak melebihi batas if pos + 2 + tlv_length > #tlv_string then ngx.log(ngx.ERR, "data TLV rusak: 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, -- Enkode nilai biner dalam Base64 untuk penyimpanan dan tampilan yang mudah value = ngx.encode_base64(tlv_value) }) pos = pos + 3 + tlv_length end -- 8. Simpan TLV yang diurai di ngx.ctx -- ngx.ctx unik untuk setiap permintaan dan merupakan cara standar untuk melewatkan data if #tlvs > 0 then ngx.ctx.proxy_protocol_tlvs = tlvs -- Contoh: Jika Anda ingin mencatatnya, Anda dapat menggunakan variabel $proxy_protocol_tlvs dalam log_format di bagian http -- Anda perlu mendefinisikan `lua_set $proxy_protocol_tlvs 'return ngx.var.proxy_protocol_tlvs_json';` di blok http -- dan `ngx.var.proxy_protocol_tlvs_json = cjson.encode(ngx.ctx.proxy_protocol_tlvs)` di `preread_by_lua_block` end } proxy_pass localhost:8080; # Teruskan permintaan HTTP berikutnya ke server HTTP } } http { server { listen 8080; # Lokasi khusus untuk menangani permintaan /login location /login { access_by_lua_block { local expected_value = "some value" -- Dapatkan nilai TLV kedua (Base64-encoded) yang dilewatkan dari lapisan stream dari variabel NGINX local privateLinkEndId = ngx.var.pp_tlv2_value -- Tolak permintaan jika nilainya tidak sesuai harapan if received_value ~= expected_value then ngx.log(ngx.ERR, "Akses ke /login ditolak: Nilai TLV tidak cocok. Diharapkan '", expected_value, "', didapat '", received_value, "'") return ngx.exit(ngx.HTTP_FORBIDDEN) end -- Jika verifikasi berhasil, permintaan dilanjutkan diproses } # Setelah verifikasi berhasil, teruskan permintaan ke backend Python proxy_pass http://your_python_backend; } # Tangani semua permintaan lainnya location / { # Di sini, Anda dapat memutuskan apakah akan mengizinkan akses berdasarkan kebutuhan Anda # Misalnya, teruskan langsung ke backend proxy_pass http://your_python_backend; } } # Definisi upstream layanan backend Python Anda upstream your_python_backend { server 127.0.0.1:5000; # Anggap program backend Anda berjalan di port 5000 } }
Gunakan PrivateLink untuk mengakses layanan Alibaba Cloud
Beberapa layanan Alibaba Cloud mendukung akses melalui PrivateLink untuk menghindari risiko keamanan akses jaringan publik dengan mengonfigurasi akun yang berwenang dalam jaringan pribadi untuk menghindari
Menggunakan akun pribadi menimbulkan risiko eksfiltrasi data perusahaan. Anda juga dapat mengonfigurasi akun perusahaan untuk mengizinkan akses hanya dari jaringan pribadi yang sah untuk mencegah eksploitasi eksternal jika akun terganggu.
Beberapa layanan Alibaba Cloud sekarang mendukung akses melalui PrivateLink untuk menghindari risiko akses jaringan publik. 1) Konfigurasikan akun yang sah yang diizinkan digunakan dalam jaringan pribadi. Ini mencegah risiko eksfiltrasi data menggunakan akun pribadi. 2) Konfigurasikan akun perusahaan agar hanya dapat diakses dari jaringan pribadi yang sah. Ini mencegah akun dieksploitasi secara eksternal jika kredensial bocor.
Buat Titik Akhir untuk Layanan Alibaba Cloud: Di konsol PrivateLink, buat titik akhir gateway untuk layanan Alibaba Cloud yang perlu Anda akses, seperti OSS. Asosiasikan titik akhir dengan VPC perusahaan Anda dan tabel rute.
Anda dapat mengasosiasikannya dengan VPC internal dan tabel rute.
Konfigurasikan Kebijakan Akses Titik Akhir: Di kebijakan titik akhir, batasi akses hanya ke identitas Resource Access Management (RAM) (pengguna atau peran) di bawah Akun Alibaba Cloud perusahaan Anda. Ini mencegah akun lain, seperti akun pribadi karyawan, mengakses OSS melalui saluran pribadi ini.
Ini mencegah akun lain, seperti akun pribadi karyawan, mengakses OSS melalui saluran pribadi ini.
Di kebijakan akses titik akhir, batasi akses ke layanan Alibaba Cloud hanya ke akun yang termasuk dalam perusahaan Anda.
Konfigurasikan Kebijakan RAM (Peningkatan Opsional): Untuk kontrol yang lebih kuat, Anda dapat mengonfigurasi kebijakan untuk pengguna atau peran RAM. Misalnya, Anda dapat menegakkan bahwa akses mereka ke OSS harus berasal dari VPC tertentu.
Mereka harus mengakses OSS dari VPC tertentu.
Kemampuan kepatuhan
Pemeriksaan: Tentukan apakah ada akses dari VPC ke alamat IP publik Alibaba Cloud
Sebelum memulai, Anda dapat memeriksa lingkungan Anda untuk komunikasi jaringan publik yang dapat dioptimalkan menggunakan PrivateLink. Untuk melakukannya, analisis log aliran VPC untuk menemukan lalu lintas keluar dari VPC ke alamat IP publik Alibaba Cloud.
Lalu lintas keluar dari VPC ke alamat IP publik layanan Alibaba Cloud.
Langkah-Langkah:
Aktifkan Log Aliran VPC: Aktifkan fitur log aliran untuk VPC tempat bisnis inti Anda berada. Kirimkan log ke Simple Log Service (SLS).
Analisis Lalu Lintas Keluar: Di SLS, kueri log aliran VPC dan filter untuk lalu lintas keluar (direction = out).
Filter dan Lokasi:
Filter Paket Respons: Untuk mengurangi kebisingan, filter lalu lintas dengan port tujuan kurang dari 1024 dan lalu lintas lain yang merupakan bagian dari respons layanan normal.
Identifikasi Alamat IP Publik Alibaba Cloud: Kueri kepemilikan alamat IP tujuan (dstaddr) dalam log menggunakan alat seperti ipip.net. Fokus pada alamat IP publik yang dimiliki oleh Alibaba Cloud.
Perhatikan khusus alamat IP publik yang dimiliki oleh Alibaba Cloud.
Lokasi Instance ECS Sumber: Gunakan bidang `vm-id` dalam log aliran untuk menentukan instance ECS yang memulai akses.
Contoh Analisis Log:
Dengan menganalisis jenis log ini, Anda dapat mengidentifikasi instance mana yang mengakses sumber daya cloud lainnya melalui jaringan publik.

Penentuan Hasil:
Jika alamat IP publik tujuan yang dikueri adalah titik akhir publik untuk layanan Alibaba Cloud, seperti OSS atau ECS, kami sangat menyarankan untuk beralih ke titik akhir PrivateLink.
Mengakses node
Jika alamat IP publik tujuan menunjuk ke layanan (seperti EIP atau SLB) di VPC lain dalam akun Anda, Anda dapat menggunakan PrivateLink untuk skenario komunikasi lintas-VPC ini.
Ini adalah skenario ideal untuk optimasi.