Mengonfigurasi keamanan transportasi

Anda dapat mengamankan traffic antarlayanan di Cloud Service Mesh dengan Istio API dengan menerapkan mutual TLS (mTLS) yang ketat. Dalam workload Kubernetes, mTLS otomatis diaktifkan secara default: proxy sidecar klien secara otomatis mengirimkan traffic mTLS ke sidecar, tetapi layanan tujuan masih menerima permintaan teks biasa dan terenkripsi.

Kebijakan PeerAuthentication memungkinkan Anda membatasi layanan agar hanya menerima mTLS. Anda dapat menerapkan kebijakan di seluruh mesh, ke namespace tertentu, atau ke workload individual. Untuk mengetahui kolom yang didukung di berbagai platform, lihat Fitur yang didukung.

Mengaktifkan mutual TLS per namespace

Untuk mengaktifkan mTLS bagi semua workload dalam namespace tertentu, gunakan kebijakan autentikasi di seluruh namespace. Anda menentukan namespace yang berlaku di bagian metadata.

kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
  name: "AUTH_POLICY_NAME"
  namespace: "NAMESPACE"
spec:
  mtls:
    mode: STRICT
EOF

Output yang diharapkan:

peerauthentication.security.istio.io/AUTH_POLICY_NAME created

Mengaktifkan mutual TLS per workload

Untuk menetapkan kebijakan PeerAuthentication untuk workload tertentu, Anda harus mengonfigurasi bagian selector dan menentukan label yang cocok dengan workload yang ditargetkan. Namun, Cloud Service Mesh tidak dapat menggabungkan kebijakan tingkat workload untuk traffic mTLS keluar ke layanan. Anda perlu mengonfigurasi aturan tujuan untuk mengelola perilaku tersebut.

  1. Terapkan kebijakan autentikasi ke workload tertentu di namespace Anda:

    cat <<EOF | kubectl apply -n NAMESPACE -f -
    apiVersion: "security.istio.io/v1beta1"
    kind: "PeerAuthentication"
    metadata:
      name: "AUTH_POLICY_NAME"
      namespace: "NAMESPACE"
    spec:
      selector:
        matchLabels:
          app: WORKLOAD
      mtls:
        mode: STRICT
    EOF
    

    Output yang diharapkan:

    peerauthentication.security.istio.io/AUTH_POLICY_NAME created
  2. Konfigurasikan aturan tujuan yang cocok:

    cat <<EOF | kubectl apply -n NAMESPACE -f -
    apiVersion: "networking.istio.io/v1alpha3"
    kind: "DestinationRule"
    metadata:
      name: "DEST_RULE_NAME"
    spec:
      host: "WORKLOAD.NAMESPACE.svc.cluster.local"
      trafficPolicy:
        tls:
          mode: ISTIO_MUTUAL
    EOF
    

    Output yang diharapkan:

    destinationrule.networking.istio.io/WORKLOAD created

Menerapkan mTLS di seluruh mesh

Untuk mencegah semua layanan Anda di mesh menerima traffic teks biasa, tetapkan kebijakan PeerAuthentication di seluruh mesh dengan mode mTLS yang ditetapkan ke STRICT (defaultnya adalah PERMISSIVE). Kebijakan PeerAuthentication di seluruh mesh tidak boleh memiliki pemilih dan harus diterapkan di namespace root, istio-system. Saat Anda men-deploy kebijakan, bidang kontrol akan otomatis menyediakan sertifikat TLS sehingga workload dapat saling melakukan autentikasi.

Untuk menerapkan mTLS di seluruh mesh:

kubectl apply -f - <<EOF
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
  name: "AUTH_POLICY_NAME"
  namespace: "istio-system"
spec:
  mtls:
    mode: STRICT
EOF

Output yang diharapkan:

peerauthentication.security.istio.io/AUTH_POLICY_NAME created

Menonaktifkan mTLS untuk CSM Terkelola

Cloud Service Mesh tidak mendukung nilai mtls.mode: DISABLE dalam resource PeerAuthentication.

Agar berhasil menonaktifkan mTLS di Cloud Service Mesh, Anda harus menentukan perilaku klien secara eksplisit dengan persyaratan server menggunakan DestinationRule API.

Ringkasan Konseptual

  1. Sisi Server: Anda menggunakan resource PeerAuthentication untuk menetapkan nilai default proxy sisi server.
  2. Pendekatan Sisi Klien: Anda menggunakan resource DestinationRule untuk secara eksplisit memberi tahu proxy sisi klien agar menggunakan teks biasa saat berkomunikasi dengan server tertentu.

Contoh

Langkah 1: Konfigurasi PeerAuthentication

Dalam contoh ini, kita akan menggunakan kebijakan default PERMISSIVE, sehingga tidak perlu menentukan kebijakan secara eksplisit.

Langkah 2: Konfigurasi DestinationRule Sisi Klien

Konfigurasi ini memberi tahu klien untuk menggunakan teks biasa saat memanggil httpbin.

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: "DEST_RULE_NAME"
  namespace: sample-namespace
spec:
  host: "WORKLOAD.NAMESPACE.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: DISABLE

Menemukan dan menghapus kebijakan PeerAuthentication

Untuk mengetahui daftar semua kebijakan PeerAuthentication di mesh layanan:

kubectl get peerauthentication --all-namespaces

Jika ada kebijakan PeerAuthentication yang berlaku, Anda dapat menghapusnya dengan kubectl delete:

kubectl delete peerauthentication -n NAMESPACE AUTH_POLICY_NAME

Langkah berikutnya