Mengonfigurasi keamanan transportasi

Di Cloud Service Mesh 1.5 dan yang lebih baru, mode otomatis mutual TLS (mTLS otomatis) diaktifkan oleh secara default. Dengan mTLS otomatis, proxy file bantuan klien secara otomatis mendeteksi apakah memiliki file bantuan. File bantuan klien mengirimkan mTLS ke workload dengan file bantuan dan mengirimkan teks biasa ke workload tanpa file bantuan. Namun, perlu diketahui bahwa layanan menerima traffic teks biasa dan mTLS. Saat Anda memasukkan proxy file bantuan ke Pod, sebaiknya konfigurasi juga layanan Anda agar hanya menerima traffic mTLS.

Dengan Cloud Service Mesh, Anda dapat mengonfigurasi layanan agar hanya menerima mTLS dengan menerapkan kebijakan PeerAuthentication. Cloud Service Mesh memberi Anda fleksibilitas untuk menerapkan kebijakan ke seluruh mesh layanan, ke namespace, atau beban kerja individu. Ketika Anda menetapkan kebijakan untuk beban kerja tertentu, maka kebijakan itu kebijakan akan diprioritaskan. Misalnya, kebijakan khusus beban kerja mengambil diprioritaskan di atas nama khusus namespace. Jika tidak ada kebijakan yang ditentukan untuk workload tersebut mewarisi kebijakan dari namespace atau mesh.

Mengaktifkan TLS bersama per namespace

Untuk mengaktifkan mTLS untuk semua beban kerja dalam namespace tertentu, gunakan kebijakan autentikasi tingkat namespace. Tentukan namespace tempat berlaku di bawah 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 TLS bersama per workload

Agar dapat menetapkan kebijakan PeerAuthentication untuk workload tertentu, Anda harus mengonfigurasi bagian selector dan tentukan label yang sesuai dengan workload yang diinginkan. Namun, Cloud Service Mesh tidak dapat menggabungkan kebijakan tingkat workload untuk layanan outbound traffic mTLS ke layanan. Anda perlu mengonfigurasi aturan tujuan untuk mengelola perilaku tersebut.

  1. Terapkan kebijakan autentikasi ke beban kerja 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. Mengonfigurasi 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 seluruh mesh

Untuk mencegah semua layanan Anda di mesh menerima traffic teks biasa, setel kebijakan PeerAuthentication seluruh mesh dengan mode mTLS yang disetel ke STRICT ( defaultnya adalah PERMISSIVE). Kebijakan PeerAuthentication seluruh mesh tidak boleh memiliki pemilih dan harus diterapkan dalam namespace root, istio-system. Kapan Anda men-deploy kebijakan, bidang kontrol akan otomatis menyediakan TLS sertifikat sehingga beban kerja dapat mengotentikasi satu sama lain.

Untuk menerapkan mTLS 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

Temukan dan hapus PeerAuthentication kebijakan

Untuk mengetahui daftar semua kebijakan PeerAuthentication dalam 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 selanjutnya