全部产品
Search
文档中心

Elastic Compute Service:Gunakan PrivateLink untuk Mengurangi Komunikasi Jaringan Publik yang Tidak Perlu

更新时间:Nov 02, 2025

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:

  1. 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.

  2. 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.

  3. 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:

  1. Konfigurasi Sisi Server (Penyedia Layanan)

    1. 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.

    2. Buat Layanan Titik Akhir: Di konsol PrivateLink, buat layanan titik akhir. Asosiasikan dengan instance SLB yang dibuat pada langkah sebelumnya.

    3. 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.

    4. 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.

  2. Konfigurasi Sisi Klien (Konsumen Layanan)

    1. Buat Titik Akhir: Di VPC1, buat titik akhir. Selama pembuatan, pilih layanan titik akhir yang dibuat di sisi server.

    2. Konfigurasikan Jaringan: Pilih vSwitch dan grup keamanan di VPC1 untuk titik akhir. Ini mengontrol sumber daya mana di VPC1 yang dapat mengakses titik akhir.

    3. Dapatkan Detail Titik Akhir: Setelah titik akhir dibuat, nama domain pribadi dan alamat IP dihasilkan.

    4. 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.

  1. 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: true menunjukkan 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.image.pngimage.pngPenguraian 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

    03

    4 byte

    0004

    0764b56b

    0764b56b

    TLV2

    Jenis e1 (jenis khusus)

    e1

    24 byte

    0018

    ID 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 jaringan

    04

    6 byte

    0006

    000000000000

    000000000000

  2. Jika 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.

  1. 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.

  2. 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.

  3. 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:

  1. Aktifkan Log Aliran VPC: Aktifkan fitur log aliran untuk VPC tempat bisnis inti Anda berada. Kirimkan log ke Simple Log Service (SLS).

  2. Analisis Lalu Lintas Keluar: Di SLS, kueri log aliran VPC dan filter untuk lalu lintas keluar (direction = out).

  3. 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.

image.png

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.