全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Jalankan kebijakan otorisasi ASM dalam mode uji coba

更新时间:Jul 02, 2025

Konfigurasi yang tidak tepat dari kebijakan otorisasi dapat menyebabkan akses yang tidak terduga ditolak atau diizinkan. Anda dapat menggunakan kebijakan otorisasi Service Mesh (ASM) dalam mode uji coba untuk memverifikasi kebenaran dan keandalannya tanpa memengaruhi lingkungan produksi. Ini mengurangi risiko masalah yang muncul di lingkungan produksi dan memastikan penerapan serta operasi kebijakan berjalan lancar.

Prasyarat

Informasi latar belakang

ASM memungkinkan Anda mengonfigurasi kebijakan otorisasi untuk mengimplementasikan kontrol akses untuk semua beban kerja atau hanya beban kerja tertentu dalam sebuah namespace. Kebijakan otorisasi mengontrol lalu lintas akses. Jika tidak dikonfigurasi dengan benar, permintaan akses mungkin diizinkan atau ditolak secara tidak terduga. Dalam hal ini, administrator ASM menghadapi tantangan besar. Misalnya, beberapa permintaan akses normal ditolak, sedangkan permintaan akses yang seharusnya ditolak diizinkan. Untuk menyelesaikan masalah ini, ASM menyediakan mode uji coba untuk kebijakan otorisasi. Dalam mode uji coba, kebijakan otorisasi dieksekusi, tetapi mereka tidak mengizinkan atau memblokir lalu lintas. Hanya log eksekusi yang dicatat. Administrator ASM dapat memeriksa apakah hasil eksekusi kebijakan otorisasi sesuai dengan harapan berdasarkan log ini. Jika tidak, mereka dapat menyesuaikan kebijakan otorisasi hingga hasil eksekusi memenuhi harapan dan kemudian menonaktifkan mode uji coba untuk membuat kebijakan otorisasi berlaku.

Dalam contoh ini, dua aplikasi uji, sleep dan HTTPBin, diterapkan. Proses pengujian keseluruhan adalah sebagai berikut: Akses aplikasi HTTPBin menggunakan perintah curl di pod tempat aplikasi sleep berada, verifikasi konektivitas, konfigurasikan kebijakan otorisasi untuk instance ASM untuk menolak permintaan tertentu dan aktifkan mode uji coba, lalu inisiasi permintaan yang memenuhi kondisi penolakan kebijakan otorisasi. Dalam mode uji coba, permintaan tidak ditolak dan proxy sidecar menghasilkan log eksekusi kebijakan otorisasi. Setelah Anda mengonfirmasi bahwa hasil eksekusi kebijakan otorisasi memenuhi harapan Anda, nonaktifkan mode uji coba untuk membuat kebijakan otorisasi berlaku.

Langkah 1: Terapkan aplikasi sleep dan HTTPbin dan uji konektivitasnya

  1. Gunakan konten berikut untuk membuat file sleep.yaml:

    Perluas untuk melihat file sleep.yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: sleep
      namespace: foo
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sleep
      namespace: foo
      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. Gunakan kubectl untuk terhubung ke klaster dan jalankan perintah berikut untuk menerapkan aplikasi sleep di namespace foo.

    Untuk informasi lebih lanjut tentang cara menggunakan kubectl untuk terhubung ke klaster, lihat Dapatkan file kubeconfig klaster dan gunakan kubectl untuk terhubung ke klaster.

    kubectl apply -f sleep.yaml -n foo
  3. Gunakan konten berikut untuk membuat file httpbin.yaml:

    Perluas untuk melihat file httpbin.yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: httpbin
      namespace: foo
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      namespace: foo
      labels:
        app: httpbin
        service: httpbin
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 80
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
      namespace: foo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          serviceAccountName: httpbin
          containers:
          - image: docker.io/kennethreitz/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  4. Jalankan perintah berikut untuk menerapkan aplikasi HTTPBin di namespace foo:

    kubectl apply -f httpbin.yaml -n foo
  5. Jalankan perintah berikut untuk menguji konektivitas antara aplikasi sleep dan aplikasi HTTPBin:

    for i in {1..20}; do kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/headers -s -o /dev/null -w "%{http_code}\n"; done

    Output yang diharapkan:

    200
    200
    200
    ...

    Output menunjukkan bahwa ketika Anda mengakses aplikasi HTTPBin sebanyak 20 kali dengan menjalankan perintah curl di pod tempat aplikasi sleep berada, kode status yang dikembalikan selalu 200. Ini menunjukkan bahwa koneksi jaringan normal.

Langkah 2: Buat kebijakan otorisasi dan aktifkan mode uji coba

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

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

  3. Di halaman Create, konfigurasikan parameter berikut dan klik Create.

    创建授权策略

Langkah 3: Amati hasil eksekusi kebijakan otorisasi

  1. Jalankan perintah berikut lagi untuk mengakses aplikasi HTTPBin dari pod tempat aplikasi sleep berada:

    for i in {1..20}; do kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/headers -s -o /dev/null -w "%{http_code}\n"; done

    Output yang diharapkan:

    200
    200
    200
    ...

    Output menunjukkan bahwa permintaan akses masih diizinkan karena kebijakan otorisasi sedang berjalan dalam mode uji coba.

  2. Jalankan perintah berikut untuk menyesuaikan level log kontrol akses berbasis peran (RBAC) dari proxy sidecar aplikasi HTTPBin ke Debug:

    kubectl exec "$(kubectl get pod -l app=httpbin -n foo -o jsonpath={.items..metadata.name})" -c istio-proxy -n foo -- curl -X POST 127.0.0.1:15000/logging?rbac=debug

    Output yang diharapkan:

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0active loggers:
      ...
      rbac: debug
      ...
    100  1028    0  1028    0     0  1003k      0 --:--:-- --:--:-- --:--:-- 1003k
  3. Jalankan perintah berikut untuk memfilter log uji coba kebijakan otorisasi dari proxy sidecar aplikasi HTTPBin:

    kubectl logs "$(kubectl -n foo -l app=httpbin get pods -o jsonpath={.items..metadata.name})" -c istio-proxy -n foo | grep "shadow denied"

    Output berikut menunjukkan log pemblokiran:

    2023-12-20T03:58:47.107915Z     debug   envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:130        shadow denied, matched policy ns[foo]-policy[test]-rule[0]     thread=32
    2023-12-20T03:58:48.800098Z     debug   envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:130        shadow denied, matched policy ns[foo]-policy[test]-rule[0]     thread=33
    2023-12-20T03:58:50.420179Z     debug   envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:130        shadow denied, matched policy ns[foo]-policy[test]-rule[0]     thread=32

Langkah 4: Nonaktifkan mode uji coba

Setelah Anda menentukan bahwa hasil eksekusi kebijakan otorisasi memenuhi harapan berdasarkan log, Anda dapat menonaktifkan mode uji coba untuk membuat kebijakan otorisasi berlaku.

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

  2. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sisi kiri, pilih Mesh Security Center > AuthorizationPolicy.

  3. Di halaman AuthorizationPolicy, temukan kebijakan otorisasi yang Anda buat di Langkah 2, matikan sakelar di kolom Commissioning mode, lalu klik OK di pesan Submit untuk menonaktifkan mode uji coba.

  4. Jalankan perintah berikut untuk menginisiasi permintaan akses lagi:

    for i in {1..20}; do kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/headers -s -o /dev/null -w "%{http_code}\n"; done

    Output yang diharapkan:

    403
    403
    403
    ...

    Output menunjukkan bahwa permintaan akses ditolak dan 403 dikembalikan karena kebijakan otorisasi berlaku.

  5. Jalankan perintah berikut untuk mengembalikan level log proxy sidecar ke Warning:

    kubectl exec "$(kubectl get pod -l app=httpbin -n foo -o jsonpath={.items..metadata.name})" -c istio-proxy -n foo -- curl -X POST 127.0.0.1:15000/logging?rbac=warning

    Output yang diharapkan:

      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0active loggers:
      ...
      rbac: warning
      ...
    100  1028    0  1028    0     0  1003k      0 --:--:-- --:--:-- --:--:-- 1003k

Referensi