全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Gunakan kebijakan otorisasi untuk mengontrol lalu lintas akses dari layanan dalam instance ASM ke situs web eksternal

更新时间:Dec 04, 2025

Kubernetes memungkinkan Anda menggunakan objek NetworkPolicy di kluster Kubernetes untuk menolak atau mengizinkan lalu lintas akses dari layanan di namespace tertentu ke situs web eksternal tertentu. Namun, penggunaan objek NetworkPolicy hanya memberikan isolasi jaringan granular kasar dan tidak dapat menjamin keamanan aplikasi atau bisnis. Sistem keamanan zero-trust dari Service Mesh (ASM) memungkinkan Anda mengonfigurasi kebijakan otorisasi secara dinamis untuk mengontrol lalu lintas akses dari layanan di namespace ke situs web eksternal, membantu mengurangi risiko. Topik ini menjelaskan cara menggunakan kebijakan otorisasi untuk menolak lalu lintas akses dari semua layanan di namespace ke situs web eksternal. Namespace demo-frontend dan situs web eksternal aliyun.com digunakan sebagai contoh.

Prasyarat

  • Kluster telah ditambahkan ke instance ASM. Untuk informasi lebih lanjut, lihat Tambahkan kluster ke instance ASM.

  • Namespace bernama demo-frontend telah dibuat dan injeksi proxy sidecar otomatis telah diaktifkan untuk namespace tersebut. Untuk informasi lebih lanjut, lihat Kelola namespace global.

Langkah 1: Buat layanan uji

  1. Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster. Untuk informasi lebih lanjut, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.

  2. Buat layanan bernama sleep di namespace demo-frontend.

    1. Buat file sleep.yaml dengan konten berikut:

      Tampilkan file sleep.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: curlimages/curl
              command: ["/bin/sleep", "3650d"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. Jalankan perintah berikut untuk membuat layanan sleep:

      kubectl apply -f sleep.yaml -n demo-frontend
  3. Verifikasi bahwa proxy sidecar disuntikkan ke layanan sleep.

    1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

    2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel sebelah kiri, pilih Workloads > Pods.

    3. Di bagian atas halaman Pods, pilih demo-frontend dari daftar drop-down Namespace dan klik nama pod layanan sleep.

      Di tab Container, proxy sidecar bernama istio-proxy akan ditampilkan. Ini menunjukkan bahwa proxy sidecar telah disuntikkan ke layanan sleep.

Langkah 2: Buat gateway egress

Anda dapat menggunakan gateway egress untuk mengontrol lalu lintas akses dari layanan di instans Service Mesh ke situs web eksternal. Setelah mengonfigurasi kebijakan otorisasi untuk gateway egress, Anda juga dapat menentukan kondisi untuk mengontrol apakah akses ke situs web eksternal diizinkan. Dalam contoh ini, nama gateway egress diatur menjadi egressgateway. Untuk informasi lebih lanjut, lihat Buat gateway egress.

Langkah 3: Konfigurasikan kebijakan untuk mengakses layanan eksternal

Secara default, layanan di instance ASM diizinkan mengakses semua layanan eksternal. Untuk mengontrol akses ke situs web eksternal tertentu, atur parameter Outbound Traffic Policy ke REGISTRY_ONLY untuk instance ASM di Konsol ASM. Dalam hal ini, layanan eksternal yang tidak didaftarkan sebagai entri layanan tidak dapat diakses oleh layanan di instans Service Mesh.

  1. Konfigurasikan kebijakan untuk mengakses layanan eksternal.

    1. Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

    2. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sebelah kiri, pilih Data Plane Component Management > Sidecar Proxy Setting.

    3. Di tab global, klik Outbound Traffic Policy, atur parameter Outbound Traffic Policy ke REGISTRY_ONLY, lalu klik Update Settings.

  2. Daftarkan situs web eksternal aliyun.com sebagai entri layanan.

    1. Di halaman detail instance ASM, pilih Cluster & Workload Management > External Service(ServiceEntry) di panel navigasi sebelah kiri. Di halaman yang muncul, klik Create from YAML.

    2. Di halaman Buat, pilih istio-system dari daftar drop-down Namespace dan salin konten berikut ke editor kode. Lalu, klik Create.

      apiVersion: networking.istio.io/v1beta1
      kind: ServiceEntry
      metadata:
        name: aliyuncom-ext
        namespace: istio-system
      spec:
        hosts:
          - www.aliyun.com  
        location: MESH_EXTERNAL
        ports:
          - name: http
            number: 80
            protocol: HTTP
          - name: tls
            number: 443
            protocol: TLS
        resolution: DNS

Langkah 4: Buat kebijakan lalu lintas

Buat gateway Istio, aturan tujuan, dan layanan virtual untuk merutekan lalu lintas dari namespace demo-frontend ke gateway egress dan kemudian ke situs web eksternal tertentu.

  1. Buat gateway Istio di namespace istio-system dengan menggunakan kode YAML berikut. Untuk informasi lebih lanjut, lihat Kelola gateway Istio.

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: istio-egressgateway
      namespace: istio-system
    spec:
      selector:
        istio: egressgateway
      servers:
        - port:
            number: 80
            name: http
            protocol: HTTPS
          tls:
            mode: ISTIO_MUTUAL
          hosts:
            - '*'

    Dalam kode sebelumnya, parameter mode diatur ke ISTIO_MUTUAL. Ini berarti autentikasi Transport Layer Security mutual (mTLS) diaktifkan. Dalam hal ini, layanan di instance ASM harus melewati autentikasi TLS sebelum dapat mengakses situs web eksternal.

  2. Buat aturan tujuan di namespace demo-frontend dengan menggunakan kode YAML berikut. Untuk informasi lebih lanjut, lihat Kelola aturan tujuan.

    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: target-egress-gateway
      namespace: demo-frontend
    spec:
      host: istio-egressgateway.istio-system.svc.cluster.local
      subsets:
        - name: target-egress-gateway-mTLS
          trafficPolicy:
            loadBalancer:
              simple: ROUND_ROBIN
            tls:
              mode: ISTIO_MUTUAL

    Dalam kode sebelumnya, parameter mode diatur ke ISTIO_MUTUAL. Ini berarti autentikasi mTLS diaktifkan. Dalam hal ini, layanan di instance ASM harus melewati autentikasi TLS sebelum dapat mengakses situs web eksternal.

  3. Buat layanan virtual di namespace demo-frontend dengan menggunakan kode YAML berikut. Untuk informasi lebih lanjut, lihat Kelola layanan virtual.

    Tampilkan kode YAML layanan virtual

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: example-com-through-egress-gateway
      namespace: demo-frontend
    spec:
      exportTo:
        - istio-system
        - demo-frontend
      gateways:
        - mesh
        - istio-system/istio-egressgateway
      hosts:
        - www.aliyun.com
      http:
        - match:
            - gateways:
                - mesh
              port: 80
          route:
            - destination:
                host: istio-egressgateway.istio-system.svc.cluster.local
                port:
                  number: 80
                subset: target-egress-gateway-mTLS
              weight: 100
        - match:
            - gateways:
                - istio-system/istio-egressgateway
              port: 80
          route:
            - destination:
                host: www.aliyun.com
                port:
                  number: 80
              weight: 100

    Dalam bagian http pada kode sebelumnya, dua aturan pencocokan dikonfigurasi.

    • Dalam aturan pencocokan pertama, parameter gateways diatur ke mesh. Ini menunjukkan bahwa aturan pencocokan pertama berlaku untuk proxy sidecar yang disuntikkan ke namespace demo-frontend dan digunakan untuk merutekan lalu lintas dari namespace demo-frontend ke gateway egress.

    • Dalam aturan pencocokan kedua, parameter gateways diatur ke istio-system/istio-egressgateway. Ini menunjukkan bahwa aturan pencocokan kedua digunakan untuk merutekan lalu lintas dari gateway egress ke layanan eksternal yang terdaftar.

Langkah 5: Buat kebijakan otorisasi

Di namespace demo-frontend, buat kebijakan otorisasi yang mengizinkan gateway egress egressgateway untuk menolak lalu lintas akses dari namespace demo-frontend.

  1. Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

  2. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sebelah kiri, pilih Mesh Security Center > AuthorizationPolicy. Di halaman yang muncul, klik Create.

  3. Di halaman Create, atur parameter yang dijelaskan dalam tabel berikut, lalu klik Create.

    Parameter

    Deskripsi

    Name

    Nama kebijakan otorisasi.

    Policy Type

    Aksi otorisasi. Dalam contoh ini, parameter ini diatur ke DENY.

    ASM Gateway

    Gateway tempat kebijakan otorisasi berlaku. Dalam contoh ini, parameter ASM Gateway di tab Gateway Scope diatur ke egressgateway.

    Request Matching Rules

    Dalam contoh ini, Namespaces diaktifkan di bagian Add Request Source dan nilainya diatur ke demo-frontend.

Langkah 6: Verifikasi bahwa kebijakan otorisasi dapat digunakan untuk menolak lalu lintas akses dari layanan di namespace demo-frontend ke situs web eksternal

  1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel sebelah kiri, pilih Workloads > Pods.

  3. Di bagian atas halaman Pods, pilih demo-frontend dari daftar drop-down Namespace. Temukan nama pod layanan sleep dan klik Terminal > sleep di kolom Actions.

  4. Jalankan perintah berikut untuk mengakses situs web eksternal aliyun.com:

    curl -I http://www.aliyun.com

    Output yang diharapkan:

    HTTP/1.1 403 Forbidden
    content-length: 19
    content-type: text/plain
    date: Thu, 12 Oct 2023 07:14:09 GMT
    server: envoy
    x-envoy-upstream-service-time: 4

    Kesalahan 403 dikembalikan, yang menunjukkan bahwa layanan di namespace demo-frontend gagal mengakses situs web eksternal aliyun.com. Hasil pengujian menunjukkan bahwa kebijakan otorisasi dapat digunakan untuk menolak lalu lintas akses dari layanan di namespace demo-frontend ke situs web eksternal.