Halaman ini menunjukkan cara membuat kebijakan otorisasi di jaringan sekitar.
Prasyarat
Sebelum dapat menyelesaikan langkah-langkah dalam dokumen ini, Anda harus memenuhi kondisi berikut:
- Cluster GKE yang berjalan dengan jaringan ambient Cloud Service Mesh diaktifkan.
- Namespace yang terdaftar dalam Ambient Networking
(misalnya,
ambient-test) dengan contoh workload klien dan server yang di-deploy. - Mutual TLS (mTLS) diaktifkan
antara workload klien dan server menggunakan
GCPServerTLSPolicy(denganmtlsMode: Strict) danGCPClientTLSPolicy. Aturan berbasis identitasGCPAuthzPolicyyang cocok denganCLIENT_CERT_URI_SANmemerlukan mTLS aktif untuk mengekstraksi identitas SPIFFE klien.
Untuk penyiapan lingkungan yang mendetail, lihat Menyiapkan jaringan ambient GKE.
Kebijakan tolak secara default
Secara default, GKE Ambient Authorization Policy API mengizinkan semua
traffic kecuali jika dibatasi oleh kebijakan, yang sesuai dengan perilakuNetworkPolicy
Kubernetes standar.
Tindakan DENY_BY_DEFAULT memungkinkan Anda mengubah perilaku default ini. Jika diterapkan ke namespace, kebijakan ini akan memblokir semua traffic ke workload di namespace tersebut, kecuali jika diizinkan secara eksplisit oleh kebijakan ALLOW.
Halaman ini menunjukkan cara mengonfigurasi dan menggunakan DENY_BY_DEFAULT di
Cloud Service Mesh untuk menetapkan postur aman secara default untuk
workload Anda.
Batasan
Sebelum menerapkan kebijakan DENY_BY_DEFAULT, perhatikan batasan berikut:
- Anda hanya dapat membuat satu kebijakan
DENY_BY_DEFAULTper namespace. - Kebijakan dengan tindakan
DENY_BY_DEFAULTtidak dapat memiliki aturan yang ditentukan. - Gunakan tindakan ini untuk menetapkan dasar
matchLabels: {}di seluruh namespace guna menargetkan semua Pod. Anda tidak dapat menggunakanDENY_BY_DEFAULTuntuk pembatasan per-Pod.
Menyiapkan kebijakan otorisasi tolak secara default
Untuk menetapkan dasar-dasar penolakan secara default di seluruh namespace dan mengizinkan akses secara selektif ke beban kerja tertentu, ikuti langkah-langkah berikut:
Buat dan terapkan
GCPAuthzPolicydengan tindakan yang ditetapkan keDENY_BY_DEFAULTke namespace Anda.cat <<EOF > deny-by-default-policy.yaml && kubectl apply -f deny-by-default-policy.yaml apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: deny-by-default-authz namespace: ambient-test spec: action: DENY_BY_DEFAULT enforcementLevel: L4 targetRefs: - group: "" kind: Pod selector: matchLabels: {} EOFOutputnya mirip dengan:
gcpauthzpolicy.networking.gke.io/deny-by-default-authz createdKebijakan ini memblokir semua traffic masuk (Timur-Barat dan ingress) ke beban kerja di namespace
ambient-testsecara default. Kebijakan ini tidak membatasi traffic keluar yang berasal dari workload di namespace.Untuk mengizinkan traffic secara selektif, buat dan terapkan kebijakan
ALLOW:cat <<EOF > allow-policy.yaml && kubectl apply -f allow-policy.yaml apiVersion: networking.gke.io/v1 kind: GCPAuthzPolicy metadata: name: allow-client-to-server namespace: ambient-test spec: action: ALLOW enforcementLevel: L4 targetRefs: - group: "" kind: Pod selector: matchLabels: app: server rules: - from: sources: - principals: - principalSelector: CLIENT_CERT_URI_SAN principal: type: Exact value: spiffe://PROJECT_ID.svc.id.goog/ns/ambient-test/sa/client EOFGanti PROJECT_ID dengan project ID Anda.
Penerapan kebijakan dapat memerlukan waktu hingga tiga menit setelah pengontrol menerima kebijakan. Tunggu tiga menit sebelum melanjutkan.
Uji konektivitas dari klien ke server. Permintaan ini akan berhasil karena cocok dengan kebijakan
ALLOW.kubectl exec -it deploy/client -n ambient-test -- /bin/curl -fsLS server.ambient-test.svc.cluster.localUji konektivitas dari server ke server itu sendiri (atau workload lain tanpa kebijakan izin eksplisit). Permintaan akan gagal karena kebijakan
DENY_BY_DEFAULT.kubectl exec -it deploy/server -n ambient-test -- /bin/curl -fsLS server.ambient-test.svc.cluster.localOutputnya mirip dengan:
curl: (52) Empty reply from server.
Logging
Jika permintaan ditolak oleh kebijakan otorisasi, proxy node akan menulis entri log akses ke Cloud Logging dengan nama log gke-ambient-node-proxy-accesslog. Entri berisi kolom berikut dalam payload JSON:
jsonPayload.error_details:- rbac_access_denied_matched_policy[none]
Anda dapat menggunakan Logs Explorer di konsol Google Cloud untuk melihat entri log akses untuk koneksi yang ditolak:
resource.type="k8s_container"
logName="projects/PROJECT_ID/logs/gke-ambient-node-proxy-accesslog"
jsonPayload.error_details=~"rbac_access_denied"
Untuk mengetahui informasi selengkapnya, lihat Memverifikasi bahwa traffic diautentikasi dan diberi otorisasi.
Kebijakan keamanan keluar
Untuk memeriksa dan mengontrol traffic keluar dari workload jaringan sekitar ke endpoint eksternal atau internet, Anda dapat merutekan traffic keluar melalui Secure Web Proxy (SWP).
Untuk mengetahui petunjuk tentang cara mengonfigurasi resource GCPBackend dan GCPEgressPolicy,
lihat Merutekan traffic egress ambient melalui Secure Web Proxy.