Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Keamanan jaringan
Tip
Jelaj
Keamanan jaringan memiliki beberapa aspek. Yang pertama melibatkan penerapan aturan yang membatasi aliran lalu lintas jaringan antar layanan. Yang kedua melibatkan enkripsi lalu lintas saat sedang transit. Mekanisme untuk menerapkan langkah-langkah keamanan ini pada EKS bervariasi tetapi sering mencakup item berikut:
Kontrol lalu lintas
-
Kebijakan Jaringan
-
Grup Keamanan
Enkripsi jaringan
-
Jaring Layanan
-
Pengontrol Ingress dan Penyeimbang Beban
-
Instans Nitro
-
CA Pribadi ACM dengan manajer sertifikat
Kebijakan jaringan
Dalam cluster Kubernetes, semua komunikasi Pod ke Pod diizinkan secara default. Meskipun fleksibilitas ini dapat membantu mempromosikan eksperimen, itu tidak dianggap aman. Kebijakan jaringan Kubernetes memberi Anda mekanisme untuk membatasi lalu lintas jaringan antara Pod (sering disebut sebagai East/West lalu lintas) serta antara Pod dan layanan eksternal. Kebijakan jaringan Kubernetes beroperasi pada lapisan 3 dan 4 dari model OSI. Kebijakan jaringan menggunakan pod, pemilih namespace dan label untuk mengidentifikasi pod sumber dan tujuan, tetapi juga dapat menyertakan alamat IP, nomor port, protokol, atau kombinasi dari ini. Kebijakan Jaringan dapat diterapkan pada koneksi Inbound atau Outbound ke pod, sering disebut aturan Ingress dan Egress.
Dengan dukungan kebijakan jaringan asli dari Plugin Amazon VPC CNI, Anda dapat menerapkan kebijakan jaringan untuk mengamankan lalu lintas jaringan di cluster kubernetes. Ini terintegrasi dengan API Kebijakan Jaringan Kubernetes hulu, memastikan kompatibilitas dan kepatuhan terhadap standar Kubernetes. Anda dapat menentukan kebijakan menggunakan pengi dentifikasi berbeda yang
penting
Ketika Anda pertama kali menyediakan cluster EKS, fungsionalitas Kebijakan Jaringan VPC CNI tidak diaktifkan secara default. Pastikan Anda menerapkan Add-on versi VPC CNI yang didukung dan setel ENABLE_NETWORK_POLICY flag ke true pada add-on vpc-cni untuk mengaktifkan ini. Lihat Panduan Pengguna Amazon EKS untuk petunjuk terperinci.
Rekomendasi
Memulai dengan Kebijakan Jaringan - Ikuti Prinsip Hak Terkecil
Membuat kebijakan penolakan default
Seperti halnya kebijakan RBAC, disarankan untuk mengikuti prinsip-prinsip akses yang paling tidak memiliki hak istimewa dengan kebijakan jaringan. Mulailah dengan membuat kebijakan tolak semua yang membatasi semua lalu lintas masuk dan keluar dengan dalam namespace.
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny namespace: default spec: podSelector: {} policyTypes: - Ingress - Egress
default-tolak
catatan
Gambar di atas dibuat oleh penampil kebijakan jaringan dari Tufin
Buat aturan untuk mengizinkan kueri DNS
Setelah aturan tolak semua default diterapkan, Anda dapat memulai layering pada aturan tambahan, seperti aturan yang memungkinkan pod untuk menanyakan CoreDNS untuk resolusi nama.
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-dns-access namespace: default spec: podSelector: matchLabels: {} policyTypes: - Egress egress: - to: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: kube-system podSelector: matchLabels: k8s-app: kube-dns ports: - protocol: UDP port: 53
izinkan-dns-akses
Tambahkan aturan secara bertahap untuk secara selektif memungkinkan aliran lalu lintas antara namespaces/pods
Memahami persyaratan aplikasi dan buat aturan masuk dan keluar yang halus sesuai kebutuhan. Contoh di bawah ini menunjukkan cara membatasi lalu lintas masuk pada port 80 ke app-one dariclient-one. Ini membantu meminimalkan permukaan serangan dan mengurangi risiko akses yang tidak sah.
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-ingress-app-one namespace: default spec: podSelector: matchLabels: k8s-app: app-one policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: k8s-app: client-one ports: - protocol: TCP port: 80
izinkan masukan-aplikasi-satu
Memantau penegakan kebijakan jaringan
-
Gunakan editor Kebijakan Jaringan
-
Editor kebijakan jaringan
membantu visualisasi, skor keamanan, autogenerate dari log aliran jaringan -
Membangun kebijakan jaringan dengan cara yang interaktif
-
-
Log Audit
-
Tinjau log audit cluster EKS Anda secara teratur
-
Log audit memberikan banyak informasi tentang tindakan apa yang telah dilakukan pada cluster Anda termasuk perubahan kebijakan jaringan
-
Gunakan informasi ini untuk melacak perubahan kebijakan jaringan Anda dari waktu ke waktu dan mendeteksi perubahan yang tidak sah atau tidak terduga
-
-
Pengujian otomatis
-
Terapkan pengujian otomatis dengan membuat lingkungan pengujian yang mencerminkan lingkungan produksi Anda dan secara berkala menerapkan beban kerja yang mencoba melanggar kebijakan jaringan Anda.
-
-
Metrik pemantauan
-
Konfigurasikan agen pengamatan Anda untuk mengikis metrik prometheus dari agen node VPC CNI, yang memungkinkan untuk memantau kesehatan agen, dan kesalahan sdk.
-
-
Mengaudit Kebijakan Jaringan secara teratur
-
Audit Kebijakan Jaringan Anda secara berkala untuk memastikan bahwa kebijakan tersebut memenuhi persyaratan aplikasi Anda saat ini. Saat aplikasi Anda berkembang, audit memberi Anda kesempatan untuk menghapus entri yang berlebihan, aturan keluar, dan memastikan bahwa aplikasi Anda tidak memiliki izin yang berlebihan.
-
-
Pastikan Kebijakan Jaringan ada menggunakan Open Policy Agent (OPA)
-
Gunakan Kebijakan OPA seperti yang ditunjukkan di bawah ini untuk memastikan Kebijakan Jaringan selalu ada sebelum onboarding pod aplikasi. Kebijakan ini menolak onboarding pod k8s dengan label
k8s-app: sample-appjika kebijakan jaringan yang sesuai tidak ada.
-
package kubernetes.admission import data.kubernetes.networkpolicies deny[msg] { input.request.kind.kind == "Pod" pod_label_value := {v["k8s-app"] | v := input.request.object.metadata.labels} contains_label(pod_label_value, "sample-app") np_label_value := {v["k8s-app"] | v := networkpolicies[_].spec.podSelector.matchLabels} not contains_label(np_label_value, "sample-app") msg:= sprintf("The Pod %v could not be created because it is missing an associated Network Policy.", [input.request.object.metadata.name]) } contains_label(arr, val) { arr[_] == val }
Pemecahan masalah
Pantau log vpc-network-policy-controller, node-agent
Aktifkan log pengelola pengontrol bidang Kontrol EKS untuk mendiagnosis fungsionalitas kebijakan jaringan. Anda dapat melakukan streaming log bidang kontrol ke grup CloudWatch log dan menggunakan wawasan CloudWatch Log untuk melakukan kueri lanjutan. Dari log, Anda dapat melihat objek titik akhir pod apa yang diselesaikan ke Kebijakan Jaringan, status rekonsiliasi kebijakan, dan men-debug jika kebijakan berfungsi seperti yang diharapkan.
Selain itu, Amazon VPC CNI memungkinkan Anda mengaktifkan pengumpulan dan ekspor log penegakan kebijakan ke Amazon Cloudwatch
Amazon VPC CNI juga mengirimkan SDK yang menyediakan antarmuka untuk berinteraksi dengan program eBPF pada node. SDK diinstal saat aws-node digunakan ke node. Anda dapat menemukan biner SDK yang diinstal di bawah /opt/cni/bin direktori pada node. Saat diluncurkan, SDK memberikan dukungan untuk fungsionalitas mendasar seperti memeriksa program dan peta eBPF.
sudo /opt/cni/bin/aws-eks-na-cli ebpf progs
Log metadata lalu lintas jaringan
AWS VPC Flow Logs menangkap metadata tentang lalu lintas yang mengalir melalui VPC, seperti alamat IP sumber dan tujuan serta port bersama dengan accepted/dropped paket. Informasi ini dapat dianalisis untuk mencari aktivitas yang mencurigakan atau tidak biasa antara sumber daya dalam VPC, termasuk Pod. Namun, karena alamat IP pod sering berubah saat diganti, Flow Log mungkin tidak cukup dengan sendirinya. Calico Enterprise memperluas Flow Log dengan label pod dan metadata lainnya, membuatnya lebih mudah untuk menguraikan arus lalu lintas antar pod.
Grup keamanan
EKS menggunakan AWS VPC Security Groups (SGs) untuk mengontrol lalu lintas antara bidang kontrol Kubernetes dan node pekerja cluster. Grup keamanan juga digunakan untuk mengontrol lalu lintas antara node pekerja, dan sumber daya VPC lainnya, dan alamat IP eksternal. Saat Anda menyediakan cluster EKS (dengan Kubernetes versi 1.14-eks.3 atau lebih tinggi), grup keamanan cluster dibuat secara otomatis untuk Anda. Grup keamanan ini memungkinkan komunikasi tanpa batas antara bidang kontrol EKS dan node dari grup node yang dikelola. Untuk kesederhanaan, disarankan agar Anda menambahkan cluster SG ke semua grup node, termasuk grup node yang tidak dikelola.
Sebelum Kubernetes versi 1.14 dan EKS versi eks.3, ada grup keamanan terpisah yang dikonfigurasi untuk bidang kontrol EKS dan grup node. Aturan minimum dan yang disarankan untuk grup keamanan bidang kontrol dan grup simpul dapat ditemukan di https://docs.aws.amazon.com/eks/latest/userguide/sec-group-reqs.html. Aturan minimum untuk grup keamanan bidang kontrol mengi zinkan port 443 masuk dari node pekerja SG. Aturan inilah yang memungkinkan kubelet berkomunikasi dengan server API Kubernetes. Ini juga mencakup port 10250 untuk lalu lintas keluar ke node pekerja SG; 10250 adalah port yang didengarkan oleh kubelet. Demikian pula, aturan grup simpul minimum memungkinkan port 10250 masuk dari bidang kontrol SG dan 443 keluar ke bidang kontrol SG. Akhirnya ada aturan yang memungkinkan komunikasi tanpa batas antara node dalam grup node.
Jika Anda perlu mengontrol komunikasi antara layanan yang berjalan di dalam cluster dan layanan yang dijalankan di luar cluster seperti database RDS, pertimbangkan grup keamanan untuk pod. Dengan grup keamanan untuk pod, Anda dapat menetapkan grup keamanan yang ada ke kumpulan pod.
Awas
Jika Anda mereferensikan grup keamanan yang tidak ada sebelum pembuatan pod, pod tidak akan dijadwalkan.
Anda dapat mengontrol pod mana yang ditetapkan ke grup keamanan dengan membuat SecurityGroupPolicy objek dan menentukan a PodSelector atau aServiceAccountSelector. Menyetel pemilih ke {} akan menetapkan SG yang direferensikan di SecurityGroupPolicy ke semua pod dalam namespace atau semua Akun Layanan dalam namespace. Pastikan Anda telah membiasakan diri dengan semua pertimbangan sebelum menerapkan grup keamanan untuk pod.
penting
Jika Anda menggunakan SG untuk pod, Anda harus membuat SG yang mengizinkan port 53 keluar ke grup keamanan cluster. Demikian pula, Anda harus memperbarui grup keamanan cluster untuk menerima lalu lintas masuk port 53 dari grup keamanan pod.
penting
B atas untuk grup keamanan masih berlaku saat menggunakan grup keamanan untuk pod, jadi gunakan dengan bijaksana.
penting
Anda harus membuat aturan untuk lalu lintas masuk dari grup keamanan cluster (kubelet) untuk semua probe yang dikonfigurasi untuk pod.
penting
Grup keamanan untuk pod bergantung pada fitur yang dikenal sebagai trunking ENI yang dibuat untuk meningkatkan kepadatan ENI instans EC2. Ketika pod ditugaskan ke SG, pengontrol VPC mengaitkan ENI cabang dari grup node dengan pod. Jika tidak ada cukup ENI cabang yang tersedia dalam grup node pada saat pod dijadwalkan, pod akan tetap dalam status tertunda. Jumlah ENI cabang yang dapat didukung instans bervariasi menurut instance type/family. Lihat https://docs.aws.amazon.com/eks/latest/userguide/security-groups-for-pods.html #supported -instance-types untuk detail lebih lanjut.
Meskipun grup keamanan untuk pod menawarkan AWS-native cara untuk mengontrol lalu lintas jaringan di dalam dan di luar cluster Anda tanpa overhead daemon kebijakan, opsi lain tersedia. Misalnya, mesin kebijakan Cilium memungkinkan Anda mereferensikan nama DNS dalam kebijakan jaringan. Calico Enterprise menyertakan opsi untuk memetakan kebijakan jaringan ke grup keamanan AWS. Jika Anda telah menerapkan mesh layanan seperti Istio, Anda dapat menggunakan gateway keluar untuk membatasi keluar jaringan ke domain atau alamat IP tertentu yang memenuhi syarat. Untuk informasi lebih lanjut tentang opsi ini, baca seri tiga bagian tentang kontrol lalu lintas keluar di Isti
Kapan menggunakan Kebijakan Jaringan vs Grup Keamanan untuk Pod?
Kapan menggunakan kebijakan jaringan Kubernetes
-
Mengontrol lalu lintas pod-to-pod
-
Cocokan untuk mengontrol lalu lintas jaringan antara pod di dalam cluster (lalu lintas timur-barat)
-
-
Kontrol lalu lintas di alamat IP atau tingkat port (OSI layer 3 atau 4)
Kapan menggunakan grup Keamanan AWS untuk pod (SGP)
-
Memanfaatkan konfigurasi AWS yang ada
-
Jika Anda sudah memiliki kumpulan grup keamanan EC2 kompleks yang mengelola akses ke layanan AWS dan Anda memigrasikan aplikasi dari instans EC2 ke EKS, SGP dapat menjadi pilihan yang sangat baik yang memungkinkan Anda menggunakan kembali sumber daya grup keamanan dan menerapkannya ke pod Anda.
-
-
Kontrol akses ke layanan AWS
-
Aplikasi Anda yang berjalan dalam cluster EKS ingin berkomunikasi dengan layanan AWS lain (database RDS), menggunakan SGP sebagai mekanisme yang efisien untuk mengontrol lalu lintas dari pod ke layanan AWS.
-
-
Isolasi lalu lintas Pod & Node
-
Jika Anda ingin benar-benar memisahkan lalu lintas pod dari lalu lintas node lainnya, gunakan SGP dalam
POD_SECURITY_GROUP_ENFORCING_MODE=strictmode.
-
Praktik terbaik menggunakan grup Keamanan untuk pod dan Kebijakan Jaringan
-
Keamanan berlapis
-
Gunakan kombinasi kebijakan jaringan SGP dan kubernetes untuk pendekatan keamanan berlapis
-
Gunakan SGP untuk membatasi akses tingkat jaringan ke layanan AWS yang bukan bagian dari cluster, sementara kebijakan jaringan kubernetes dapat membatasi lalu lintas jaringan antar pod di dalam cluster
-
-
Prinsip hak istimewa terkecil
-
Hanya izinkan lalu lintas yang diperlukan antara pod atau ruang nama
-
-
Segmentasikan aplikasi Anda
-
Jika memungkinkan, segmentasikan aplikasi berdasarkan kebijakan jaringan untuk mengurangi radius ledakan jika aplikasi dikompromikan
-
-
Jaga kebijakan sederhana dan jelas
-
Kebijakan jaringan Kubernetes bisa sangat terperinci dan kompleks, yang terbaik adalah membuatnya sesederhana mungkin untuk mengurangi risiko kesalahan konfigurasi dan meringankan overhead manajemen
-
-
Kurangi permukaan serangan
-
Minimalkan permukaan serangan dengan membatasi eksposur aplikasi Anda
-
penting
Grup Keamanan untuk pod menyediakan dua mode penegakan: strict danstandard. Anda harus menggunakan standard mode saat menggunakan Kebijakan Jaringan dan Grup Keamanan untuk fitur pod di cluster EKS.
Ketika datang ke keamanan jaringan, pendekatan berlapis seringkali merupakan solusi yang paling efektif. Menggunakan kebijakan jaringan kubernetes dan SGP dalam kombinasi dapat memberikan strategi pertahanan mendalam yang kuat untuk aplikasi Anda yang berjalan di EKS.
Penegakan Kebijakan Mesh Layanan atau kebijakan jaringan Kubernetes
A service mesh adalah lapisan infrastruktur khusus yang dapat Anda tambahkan ke aplikasi Anda. Ini memungkinkan Anda untuk secara transparan menambahkan kemampuan seperti pengamatan, manajemen lalu lintas, dan keamanan, tanpa menambahkannya ke kode Anda sendiri.
Service mesh memberlakukan kebijakan pada Layer 7 (aplikasi) model OSI sedangkan kebijakan jaringan kubernetes beroperasi pada Layer 3 (jaringan) dan Lapisan 4 (transportasi). Ada banyak penawaran di ruang ini seperti AWSAppMesh, Istio, Linkerd, dll.,
Kapan menggunakan Service mesh untuk penegakan kebijakan
-
Memiliki investasi yang ada dalam jaring layanan
-
Butuh kemampuan yang lebih canggih seperti manajemen lalu lintas, pengamatan & keamanan
-
Kontrol lalu lintas, penyeimbangan beban, pemutusan sirkuit, pembatasan laju, batas waktu dll.
-
Wawasan terperinci tentang kinerja layanan Anda (latensi, tingkat kesalahan, permintaan per detik, volume permintaan, dll.)
-
Anda ingin menerapkan dan memanfaatkan mesh layanan untuk fitur keamanan seperti MTL
-
Pilih kebijakan jaringan Kubernetes untuk kasus penggunaan yang lebih sederhana
-
Batasi pod mana yang dapat berkomunikasi satu sama lain
-
Kebijakan jaringan memerlukan sumber daya yang lebih sedikit daripada service mesh sehingga cocok untuk kasus penggunaan yang lebih sederhana atau untuk cluster yang lebih kecil di mana overhead menjalankan dan mengelola mesh layanan mungkin tidak dapat dibenarkan
catatan
Kebijakan jaringan dan Service mesh juga dapat digunakan bersama. Gunakan kebijakan jaringan untuk memberikan tingkat dasar keamanan dan isolasi antara pod Anda, lalu gunakan mesh layanan untuk menambahkan kemampuan tambahan seperti manajemen lalu lintas, pengamatan, dan keamanan.
ThirdParty Mesin Kebijakan Jaringan
Pertimbangkan Mesin Kebijakan Jaringan Pihak Ketiga ketika Anda memiliki persyaratan kebijakan lanjutan seperti Kebijakan Jaringan Global, dukungan untuk aturan berbasis DNS Hostname, aturan Layer 7, aturan ServiceAccount berbasis, dan deny/log tindakan eksplisit, dll., Calico
Anda dapat menemukan daftar kebijakan jaringan Kubernetes umum di Seperangkat aturan https://github.com/ahmetb/kubernetes-network-policy-recipes. serupa untuk Calico tersedia di https://docs.projectcalico.org/security/calico-network-policy.
Migrasi ke Mesin Kebijakan Jaringan Amazon VPC CNI
Untuk menjaga konsistensi dan menghindari perilaku komunikasi pod yang tidak terduga, disarankan untuk menerapkan hanya satu Mesin Kebijakan Jaringan di cluster Anda. Jika Anda ingin bermigrasi dari 3P ke VPC CNI Network Policy Engine, sebaiknya ubah NetworkPolicy CRD 3P yang ada ke NetworkPolicy sumber daya Kubernetes sebelum mengaktifkan dukungan kebijakan jaringan VPC CNI. Dan, uji kebijakan yang dimigrasi di cluster pengujian terpisah sebelum menerapkannya di lingkungan produksi Anda. Ini memungkinkan Anda mengidentifikasi dan mengatasi masalah potensial atau inkonsistensi dalam perilaku komunikasi pod.
Alat Migrasi
Untuk membantu proses migrasi Anda, kami telah mengembangkan alat bernama K8s Network Policy Migrator
penting
Alat migrasi hanya akan mengonversi kebijakan 3P yang kompatibel dengan api kebijakan jaringan kubernetes asli. Jika Anda menggunakan fitur kebijakan jaringan lanjutan yang ditawarkan oleh plugin 3P, alat Migrasi akan melewatkan dan melaporkannya.
Harap dicatat bahwa alat migrasi saat ini tidak didukung oleh tim rekayasa kebijakan AWS VPC CNI Network, alat ini tersedia untuk pelanggan berdasarkan upaya terbaik. Kami mendorong Anda untuk menggunakan alat ini untuk memfasilitasi proses migrasi Anda. Jika Anda mengalami masalah atau bug dengan alat ini, kami mohon Anda membuat GitHub masalah
Sumber Daya Tambahan
-
Kubernetes & Tigera: Kebijakan Jaringan, Keamanan, dan Audit
-
NetworkPolicyEditor
editor kebijakan interaktif dari Cilium -
Inspektor Gadget
menyarankan gadget kebijakan jaringan Menyarankan kebijakan jaringan berdasarkan analisis lalu lintas jaringan
Enkripsi saat bergerak
Aplikasi yang harus sesuai dengan PCI, HIPAA, atau peraturan lainnya mungkin perlu mengenkripsi data saat sedang transit. Saat ini TLS adalah pilihan de facto untuk mengenkripsi lalu lintas pada kawat. TLS, seperti pendahulunya SSL, menyediakan komunikasi yang aman melalui jaringan menggunakan protokol kriptografi. TLS menggunakan enkripsi simetris di mana kunci untuk mengenkripsi data dihasilkan berdasarkan rahasia bersama yang dinegosiasikan pada awal sesi. Berikut ini adalah beberapa cara untuk mengenkripsi data di lingkungan Kubernetes.
Instans Nitro
Lalu lintas yang dipertukarkan antara jenis instance Nitro berikut, misalnya C5n, G4, I3en, M5dn, M5n, P3dn, R5dn, dan R5n, secara otomatis dienkripsi secara default. Ketika ada lompatan perantara, seperti gateway transit atau penyeimbang beban, lalu lintas tidak dienkripsi. Lihat Enkripsi dalam transit untuk detail lebih lanjut tentang enkripsi dalam transit serta daftar lengkap jenis instans yang mendukung enkripsi jaringan secara default.
Jaring Layanan
Enkripsi dalam transit juga dapat diimplementasikan dengan mesh layanan seperti App Mesh, Linkerd v2, dan Istio. AppMesh mendukung MTL dengan X.509 sertifikat atau Layanan Penemuan Rahasia Envoy (SDS). Linkerd dan Istio keduanya memiliki dukungan untuk MTL.
GitHub Repositori
App Mesh juga mendukung enkripsi TLS dengan sertifikat pribadi yang dikeluarkan oleh AWS Certi ficate Manager (ACM) atau sertifikat yang disimpan di sistem file lokal node virtual.
GitHub Repositori
Pengontrol Ingress dan Penyeimbang Beban
Pengontrol Ingress adalah cara bagi Anda untuk secara cerdas merut HTTP/S ekan lalu lintas yang berasal dari luar cluster ke layanan yang berjalan di dalam cluster. Seringkali, Ingress ini didahului oleh penyeimbang beban lapisan 4, seperti Classic Load Balancer atau Network Load Balancer (NLB). Lalu lintas terenkripsi dapat dihentikan di tempat yang berbeda dalam jaringan, misalnya di penyeimbang beban, di sumber daya masuk, atau Pod. Bagaimana dan di mana Anda menghentikan koneksi SSL Anda pada akhirnya akan ditentukan oleh kebijakan keamanan jaringan organisasi Anda. Misalnya, jika Anda memiliki kebijakan yang memerlukan enkripsi ujung ke ujung, Anda harus mendekripsi lalu lintas di Pod. Ini akan menempatkan beban tambahan pada Pod Anda karena harus menghabiskan siklus untuk membuat jabat tangan awal. Pem SSL/TLS rosesan keseluruhan sangat intensif CPU. Akibatnya, jika Anda memiliki fleksibilitas, coba lakukan offload SSL di Ingress atau load balancer.
Gunakan enkripsi dengan penyeimbang beban AWS Elastic
AWS Application Load Balancer (ALB) dan Network Load Balancer (NLB) keduanya memiliki dukungan untuk enkripsi transportasi (SSL dan TLS). A alb.ingress.kubernetes.io/certificate-arn notasi untuk ALB memungkinkan Anda menentukan sertifikat mana yang akan ditambahkan ke ALB. Jika Anda menghilangkan anotasi, pengontrol akan mencoba menambahkan sertifikat ke pendengar yang memerlukannya dengan mencocokkan sertifikat AWS Certificate Manager (ACM) yang tersedia menggunakan bidang host. Dimulai dengan EKS v1.15 Anda dapat menggunakan service.beta.kubernetes.io/aws-load-balancer-ssl-cert anotasi dengan NLB seperti yang ditunjukkan pada contoh di bawah ini.
apiVersion: v1 kind: Service metadata: name: demo-app namespace: default labels: app: demo-app annotations: service.beta.kubernetes.io/aws-load-balancer-type: "nlb" service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "<certificate ARN>" service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443" service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "http" spec: type: LoadBalancer ports: - port: 443 targetPort: 80 protocol: TCP selector: app: demo-app //--- kind: Deployment apiVersion: apps/v1 metadata: name: nginx namespace: default labels: app: demo-app spec: replicas: 1 selector: matchLabels: app: demo-app template: metadata: labels: app: demo-app spec: containers: - name: nginx image: nginx ports: - containerPort: 443 protocol: TCP - containerPort: 80 protocol: TCP
Berikut ini adalah contoh tambahan untuk SSL/TLS penghentian.
penting
Beberapa Ingress, seperti pengontrol AWS LB, menerapkan penggunaan Anotasi alih-alih sebagai bagian dari Ingress Spec. SSL/TLS
CA Pribadi ACM dengan manajer sertifikat
Anda dapat mengaktifkan TLS dan MTL untuk mengamankan beban kerja aplikasi EKS Anda di input, di pod, dan di antara pod menggunakan ACM Private Certificate Authority (CA) dan cert-manager
Short-Lived Mode CA untuk TLS Bersama Antara Beban Kerja
Saat menggunakan CA Pribadi ACM untuk MTL di EKS, disarankan agar Anda menggunakan sertifikat berumur pendek dengan mode CA berumur pendek. Meskipun dimungkinkan untuk mengeluarkan sertifikat berumur pendek dalam mode CA tujuan umum, menggunakan mode CA berumur pendek bekerja lebih hemat biaya (~ 75% lebih murah daripada mode umum) untuk kasus penggunaan di mana sertifikat baru perlu sering dikeluarkan. Selain itu, Anda harus mencoba menyelaraskan masa berlaku sertifikat pribadi dengan masa pakai pod di cluster EKS Anda. Pelajari lebih lanjut tentang ACM Private CA dan manfaatnya di sini
Petunjuk Pengaturan ACM
Mulailah dengan membuat CA Pribadi dengan mengikuti prosedur yang disediakan dalam dokumen teknologi CA Pribadi ACM. Setelah Anda memiliki CA Pribadi, instal cert-manager menggunakan instruksi instalasi reguler.
Sekarang setelah Anda memiliki CA Pribadi dan cluster EKS dengan manajer sertifikat dan plugin diinstal, saatnya untuk mengatur izin dan membuat penerbit. Perbarui izin IAM dari peran simpul EKS untuk mengizinkan akses ke CA Pribadi ACM. Ganti <CA_ARN> dengan nilai dari CA Pribadi Anda:
{ "Version":"2012-10-17", "Statement": [ { "Sid": "awspcaissuer", "Action": [ "acm-pca:DescribeCertificateAuthority", "acm-pca:GetCertificate", "acm-pca:IssueCertificate" ], "Effect": "Allow", "Resource": "arn:aws:acm-pca:us-west-2:123456789012:certificate-authority/12345678-1234-1234-1234-123456789012" } ] }
Peran Layanan untuk Akun IAM, atau IRSA juga dapat digunakan. Silakan lihat bagian Sumber Daya Tambahan di bawah ini untuk contoh lengkap.
Buat Penerbit di Amazon EKS dengan membuat file Definisi Sumber Daya Kustom bernama cluster-issuer.yaml dengan teks berikut di dalamnya, ganti <CA_ARN> dan <Region> informasikan dengan CA Pribadi Anda.
apiVersion: awspca.cert-manager.io/v1beta1 kind: AWSPCAClusterIssuer metadata: name: demo-test-root-ca spec: arn: <CA_ARN> region: <Region>
Terapkan Penerbit yang Anda buat.
kubectl apply -f cluster-issuer.yaml
Cluster EKS Anda dikonfigurasi untuk meminta sertifikat dari CA Pribadi. Anda sekarang dapat menggunakan Certificate sumber daya cert-manager untuk mengeluarkan sertifikat dengan mengubah nilai issuerRef bidang menjadi Penerbit CA Pribadi yang Anda buat di atas. Untuk detail selengkapnya tentang cara menentukan dan meminta sumber daya Sertifikat, silakan periksa panduan Sumber Daya Sertifikat cert-manager.
CA Pribadi ACM dengan Istio dan manajer sertifikat
Jika Anda menjalankan Istio di cluster EKS Anda, Anda dapat menonaktifkan bidang kontrol Istio (khususnyaistiod) agar tidak berfungsi sebagai root Certificate Authority (CA), dan mengonfigurasi CA Pribadi ACM sebagai CA root untuk MTL antar beban kerja. Jika Anda menggunakan pendekatan ini, pertimbangkan untuk menggunakan mode CA berumur pendek di ACM Private CA. Lihat bagian sebelumnya dan posting blog ini
Cara Kerja Penandatanganan Sertifikat di Istio (Default)
Beban kerja di Kubernetes diidentifikasi menggunakan akun layanan. Jika Anda tidak menentukan akun layanan, Kubernetes akan secara otomatis menetapkannya ke beban kerja Anda. Selain itu, akun layanan secara otomatis memasang token terkait. Token ini digunakan oleh akun layanan untuk beban kerja untuk mengotentikasi terhadap API Kubernetes. Akun layanan mungkin cukup sebagai identitas untuk Kubernetes tetapi Istio memiliki sistem manajemen identitas dan CA sendiri. Ketika beban kerja dimulai dengan proxy sidecar utusan, diperlukan identitas yang ditetapkan dari Istio agar dapat dianggap dapat dipercaya dan diizinkan untuk berkomunikasi dengan layanan lain di mesh.
Untuk mendapatkan identitas ini dari Istio, istio-agent mengirimkan permintaan yang dikenal sebagai permintaan penandatanganan sertifikat (atau CSR) ke bidang kontrol Istio. CSR ini berisi token akun layanan sehingga identitas beban kerja dapat diverifikasi sebelum diproses. Proses verifikasi ini ditangani olehistiod, yang bertindak sebagai Otoritas Registrasi (atau RA) dan CA. RA berfungsi sebagai penjaga gerbang yang memastikan hanya CSR terverifikasi yang berhasil masuk ke CA. Setelah CSR diverifikasi, CSR akan diteruskan ke CA yang kemudian akan mengeluarkan sertifikat yang berisi identitas
Alur default untuk Permintaan Penandatanganan Sertifikat Istio:
Cara Kerja Penandatanganan Sertifikat di Istio dengan ACM Private CA
Anda dapat menggunakan add-on manajer sertifikat yang disebut agen Permintaan Penandatanganan Sertifikat Istio (istio-csr
Setiap kali ada CSR dari beban kerja, itu akan diteruskan ke istio-csr, yang akan meminta sertifikat dari ACM Private CA. Komunikasi antara istio-csr dan ACM Private CA ini diaktifkan oleh plugin penerbit CA Pribadi AWS.
Alur untuk Permintaan Penandatanganan Sertifikat Istio dengan istio-csr
image: :istio-csr-with-acm-private-ca.png [Alur untuk Permintaan Penandatanganan Sertifikat Istio dengan istio-csr]
Istio dengan Instruksi Pengaturan CA Pribadi
-
Mulailah dengan mengikuti petunjuk pen yiapan yang sama di bagian ini untuk menyelesaikan hal berikut:
-
Buat CA Pribadi
-
Instal cert-manager
-
Instal plugin penerbit
-
Tetapkan izin dan buat penerbit. Penerbit mewakili CA dan digunakan untuk menandatangani
istioddan menyatukan sertifikat beban kerja. Ini akan berkomunikasi dengan ACM Private CA. -
Buat
istio-systemnamespace. Di sinilah sumber daya Istio lainnya akan dikerahkan.istiod certificate -
Instal Istio CSR yang dikonfigurasi dengan AWS Private CA Issuer Plugin. Anda dapat mempertahankan permintaan penandatanganan sertifikat untuk beban kerja untuk memverifikasi bahwa mereka disetujui dan ditandatangani (
preserveCertificateRequests=true).helm install -n cert-manager cert-manager-istio-csr jetstack/cert-manager-istio-csr \ --set "app.certmanager.issuer.group=awspca.cert-manager.io" \ --set "app.certmanager.issuer.kind=AWSPCAClusterIssuer" \ --set "app.certmanager.issuer.name=<the-name-of-the-issuer-you-created>" \ --set "app.certmanager.preserveCertificateRequests=true" \ --set "app.server.maxCertificateDuration=48h" \ --set "app.tls.certificateDuration=24h" \ --set "app.tls.istiodCertificateDuration=24h" \ --set "app.tls.rootCAFile=/var/run/secrets/istio-csr/ca.pem" \ --set "volumeMounts[0].name=root-ca" \ --set "volumeMounts[0].mountPath=/var/run/secrets/istio-csr" \ --set "volumes[0].name=root-ca" \ --set "volumes[0].secret.secretName=istio-root-ca" -
Instal Istio dengan konfigurasi khusus untuk diganti
istiodcert-manager istio-csrsebagai penyedia sertifikat untuk mesh. Proses ini dapat dilakukan dengan menggunakan Operator Istio. apiVersion: install.istio.io/v1alpha1 kind: IstioOperator metadata: name: istio namespace: istio-system spec: profile: "demo" hub: gcr.io/istio-release values: global: # Change certificate provider to cert-manager istio agent for istio agent caAddress: cert-manager-istio-csr.cert-manager.svc:443 components: pilot: k8s: env: # Disable istiod CA Sever functionality - name: ENABLE_CA_SERVER value: "false" overlays: - apiVersion: apps/v1 kind: Deployment name: istiod patches: # Mount istiod serving and webhook certificate from Secret mount - path: spec.template.spec.containers.[name:discovery].args[7] value: "--tlsCertFile=/etc/cert-manager/tls/tls.crt" - path: spec.template.spec.containers.[name:discovery].args[8] value: "--tlsKeyFile=/etc/cert-manager/tls/tls.key" - path: spec.template.spec.containers.[name:discovery].args[9] value: "--caCertFile=/etc/cert-manager/ca/root-cert.pem" - path: spec.template.spec.containers.[name:discovery].volumeMounts[6] value: name: cert-manager mountPath: "/etc/cert-manager/tls" readOnly: true - path: spec.template.spec.containers.[name:discovery].volumeMounts[7] value: name: ca-root-cert mountPath: "/etc/cert-manager/ca" readOnly: true - path: spec.template.spec.volumes[6] value: name: cert-manager secret: secretName: istiod-tls - path: spec.template.spec.volumes[7] value: name: ca-root-cert configMap: defaultMode: 420 name: istio-ca-root-cert -
Terapkan sumber daya khusus di atas yang Anda buat.
istioctl operator init kubectl apply -f istio-custom-config.yaml -
Sekarang Anda dapat menerapkan beban kerja ke mesh di cluster EKS Anda dan menerapkan MTL.
Permintaan penandatanganan sertifikat Istio
image: :istio-csr-requests.png [Permintaan penandatanganan sertifikat Istio]
Alat dan sumber daya
-
Lokakarya Perendaman Keamanan Amazon EKS - Keamanan jaringan
-
Cara mengimplementasikan cert-manager dan plugin CA Pribadi ACM untuk mengaktifkan TLS di EKS.
-
Plugin manajer sertifikat CA Kubernetes pribadi aktif. GitHub
-
Panduan pengguna plugin manajer sertifikat CA Kubernetes pribadi.
-
Cara menggunakan mode sertifikat berumur pendek AWS Private Certificate Authority
-
egress-operator
Sebuah operator dan plugin DNS untuk mengontrol lalu lintas keluar dari cluster Anda tanpa inspeksi protokol -
NeuVector oleh SUSE
open source, platform keamanan wadah zero-trust, menyediakan aturan jaringan kebijakan, pencegahan kehilangan data (DLP), firewall aplikasi web (WAF) dan tanda tangan ancaman jaringan.