Konfigurasikan otentikasi TLS timbal balik untuk aplikasi yang berjalan di Amazon EKS - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Konfigurasikan otentikasi TLS timbal balik untuk aplikasi yang berjalan di Amazon EKS

Mahendra Siddappa, Amazon Web Services

Ringkasan

Mutual Transport Layer Security (TLS) berbasis sertifikat adalah komponen TLS opsional yang menyediakan otentikasi peer dua arah antara server dan klien. Dengan TLS timbal balik, klien harus memberikan sertifikat X.509 selama proses negosiasi sesi. Server menggunakan sertifikat ini untuk mengidentifikasi dan mengotentikasi klien.

Mutual TLS adalah persyaratan umum untuk aplikasi Internet of Things (IoT) dan dapat digunakan business-to-business untuk aplikasi atau standar seperti Open Banking.

Pola ini menjelaskan cara mengonfigurasi TLS timbal balik untuk aplikasi yang berjalan pada cluster Amazon Elastic Kubernetes Service (Amazon EKS) dengan menggunakan pengontrol ingress NGINX. Anda dapat mengaktifkan fitur TLS timbal balik bawaan untuk pengontrol ingress NGINX dengan membuat anotasi sumber daya ingress. Untuk informasi selengkapnya tentang anotasi TLS timbal balik pada pengontrol NGINX, lihat Autentikasi sertifikat klien dalam dokumentasi Kubernetes.

penting

Pola ini menggunakan sertifikat yang ditandatangani sendiri. Kami menyarankan Anda menggunakan pola ini hanya dengan cluster pengujian, dan bukan di lingkungan produksi. Jika Anda ingin menggunakan pola ini di lingkungan produksi, Anda dapat menggunakan AWS Private Certificate Authority (AWS Private CA) atau standar infrastruktur kunci publik (PKI) yang ada untuk menerbitkan sertifikat pribadi.

Prasyarat dan batasan

Prasyarat

  • Akun Amazon Web Services (AWS) yang aktif.

  • Sebuah klaster Amazon EKS yang sudah ada.

  • AWS Command Line Interface (AWS CLI) versi 1.7 atau yang lebih baru, diinstal dan dikonfigurasi di macOS, Linux, atau Windows.

  • Utilitas baris perintah kubectl, diinstal dan dikonfigurasi untuk mengakses kluster Amazon EKS. Untuk informasi selengkapnya tentang ini, lihat Menginstal kubectl di dokumentasi Amazon EKS.

  • Nama Domain Name System (DNS) yang ada untuk menguji aplikasi.

Batasan

  • Pola ini menggunakan sertifikat yang ditandatangani sendiri. Kami menyarankan Anda menggunakan pola ini hanya dengan cluster pengujian, dan bukan di lingkungan produksi.

Arsitektur

Mengkonfigurasi otentikasi TLS timbal balik untuk aplikasi yang berjalan di Amazon EKS

Tumpukan teknologi

  • Amazon EKS

  • Amazon Route 53

  • Kubectl

Alat

  • Amazon Elastic Kubernetes Service (Amazon EKS) membantu Anda menjalankan Kubernetes di AWS tanpa perlu menginstal atau memelihara control plane atau node Kubernetes Anda sendiri.

  • Amazon Route 53 adalah layanan web DNS yang sangat tersedia dan dapat diskalakan.

  • Kubectl adalah utilitas baris perintah yang Anda gunakan untuk berinteraksi dengan cluster Amazon EKS.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Hasilkan kunci CA dan sertifikat.

Hasilkan kunci dan sertifikat otoritas sertifikat (CA) dengan menjalankan perintah berikut.

openssl req -x509 -sha256 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 356 -nodes -subj '/CN=Test Cert Authority'
DevOps insinyur

Buat kunci server dan sertifikat, dan tandatangani dengan sertifikat CA.

Hasilkan kunci server dan sertifikat, dan tandatangani dengan sertifikat CA dengan menjalankan perintah berikut.

openssl req -new -newkey rsa:4096 -keyout server.key -out server.csr -nodes -subj '/CN= <your_domain_name> ' && openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
penting

Pastikan Anda mengganti <your_domain_name> dengan nama domain yang ada.

DevOps insinyur

Buat kunci klien dan sertifikat, dan tandatangani dengan sertifikat CA.

Buat kunci klien dan sertifikat, dan tandatangani dengan sertifikat CA dengan menjalankan perintah berikut.

openssl req -new -newkey rsa:4096 -keyout client.key -out client.csr -nodes -subj '/CN=Test' && openssl x509 -req -sha256 -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Terapkan pengontrol ingress NGINX di kluster Amazon EKS Anda.

Menyebarkan NGINX ingress controller dengan menggunakan perintah berikut.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/aws/deploy.yaml
DevOps insinyur

Verifikasi bahwa layanan pengontrol ingress NGINX sedang berjalan.

Verifikasi bahwa layanan pengontrol ingress NGINX berjalan dengan menggunakan perintah berikut.

kubectl get svc -n ingress-nginx
penting

Pastikan bahwa bidang alamat layanan berisi nama domain Network Load Balancer.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Buat namespace di cluster Amazon EKS.

Buat namespace yang dipanggil mtls di cluster Amazon EKS Anda dengan menjalankan perintah berikut.

kubectl create ns mtls

Ini menyebarkan aplikasi sampel untuk menguji TLS timbal balik.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Buat deployment dan service Kubernetes di namespace mtls.

Buat file bernama mtls.yaml. Tempel kode berikut ke file.

kind: Deployment apiVersion: apps/v1 metadata: name: mtls-app labels: app: mtls spec: replicas: 1 selector: matchLabels: app: mtls template: metadata: labels: app: mtls spec: containers: - name: mtls-app image: hashicorp/http-echo args: - "-text=mTLS is working" --- kind: Service apiVersion: v1 metadata: name: mtls-service spec: selector: app: mtls ports: - port: 5678 # Default port for image

Buat deployment dan service Kubernetes di mtls namespace dengan menjalankan perintah berikut.

kubectl create -f mtls.yaml -n mtls
DevOps insinyur

Verifikasi bahwa penerapan Kubernetes dibuat.

Jalankan perintah berikut untuk memverifikasi bahwa penerapan dibuat dan memiliki satu pod dalam status yang tersedia.

kubectl get deploy -n mtls
DevOps insinyur

Verifikasi bahwa layanan Kubernetes dibuat.

Verifikasi bahwa layanan Kubernetes dibuat dengan menjalankan perintah berikut.

kubectl get service -n mtls
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Buat rahasia untuk sumber daya ingress.

Jalankan perintah berikut untuk membuat rahasia untuk pengontrol ingress NGINX dengan menggunakan sertifikat yang Anda buat sebelumnya.

kubectl create secret generic mtls-certs --from-file=tls.crt=server.crt --from-file=tls.key=server.key --from-file=ca.crt=ca.crt -n mtls

Rahasia Anda memiliki sertifikat server untuk klien untuk mengidentifikasi server dan sertifikat CA untuk server untuk memverifikasi sertifikat klien.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Buat sumber daya ingress di namespace mtls.

Buat file bernama ingress.yaml. Rekatkan kode berikut ke dalam file (ganti <your_domain_name> dengan nama domain yang ada).

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/auth-tls-verify-client: "on" nginx.ingress.kubernetes.io/auth-tls-secret: mtls/mtls-certs name: mtls-ingress spec: ingressClassName: nginx rules: - host: "*.<your_domain_name>" http: paths: - path: / pathType: Prefix backend: service: name: mtls-service port: number: 5678 tls: - hosts: - "*.<your_domain_name>" secretName: mtls-certs

Buat sumber daya ingress di mtls namespace dengan menjalankan perintah berikut.

kubectl create -f ingress.yaml -n mtls

Ini berarti bahwa pengontrol ingress NGINX dapat merutekan lalu lintas ke aplikasi sampel Anda.

DevOps insinyur

Verifikasi bahwa sumber daya ingress dibuat.

Verifikasi bahwa sumber daya ingress dibuat dengan menjalankan perintah berikut.

kubectl get ing -n mtls
penting

Pastikan bahwa alamat sumber daya ingress menunjukkan penyeimbang beban yang dibuat untuk pengontrol ingress NGINX.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Buat catatan CNAME yang menunjuk ke penyeimbang beban untuk pengontrol ingress NGINX.

Masuk ke AWS Management Console, buka konsol Amazon Route 53, dan buat catatan Canonical Name (CNAME) yang mengarah mtls.<your_domain_name> ke penyeimbang beban untuk pengontrol ingress NGINX.

Untuk informasi selengkapnya, lihat Membuat catatan menggunakan konsol Route 53 dalam dokumentasi Route 53.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Uji pengaturan TLS timbal balik tanpa sertifikat.

Jalankan perintah berikut.

curl -k https://mtls.<your_domain_name>

Anda harus menerima respons kesalahan “400 Tidak diperlukan sertifikat SSL dikirim”.

DevOps insinyur

Uji pengaturan TLS timbal balik dengan sertifikat.

Jalankan perintah berikut.

curl -k https://mtls.<your_domain_name> --cert client.crt --key client.key

Anda harus menerima respons “mTLS berfungsi”.

DevOps insinyur

Sumber daya terkait