View a markdown version of this page

Siapkan end-to-end enkripsi untuk aplikasi di Amazon EKS menggunakan cert-manager dan Let's Encrypt - AWS Prescriptive Guidance

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

Siapkan end-to-end enkripsi untuk aplikasi di Amazon EKS menggunakan cert-manager dan Let's Encrypt

Mahendra Revanasiddappa dan Vasanth Jeyaraj, Amazon Web Services

Ringkasan

Menerapkan end-to-end enkripsi dapat menjadi rumit dan Anda perlu mengelola sertifikat untuk setiap aset dalam arsitektur layanan mikro Anda. Meskipun Anda dapat menghentikan koneksi Transport Layer Security (TLS) di tepi jaringan Amazon Web Services (AWS) dengan Network Load Balancer atau Amazon API Gateway, beberapa organisasi memerlukan enkripsi. end-to-end

Pola ini menggunakan NGINX Ingress Controller untuk masuk. Ini karena ketika Anda membuat ingress Kubernetes, resource ingress menggunakan Network Load Balancer. Network Load Balancer tidak mengizinkan pengunggahan sertifikat klien. Oleh karena itu, Anda tidak dapat mencapai TLS timbal balik dengan masuknya Kubernetes.

Pola ini ditujukan untuk organisasi yang membutuhkan otentikasi timbal balik antara semua layanan mikro dalam aplikasi mereka. Mutual TLS mengurangi beban mempertahankan nama pengguna atau kata sandi dan juga dapat menggunakan kerangka keamanan turnkey. Pendekatan pola ini kompatibel jika organisasi Anda memiliki sejumlah besar perangkat yang terhubung atau harus mematuhi pedoman keamanan yang ketat.

Pola ini membantu meningkatkan postur keamanan organisasi Anda dengan menerapkan end-to-end enkripsi untuk aplikasi yang berjalan di Amazon Elastic Kubernetes Service (Amazon EKS). Pola ini menyediakan contoh aplikasi dan kode dalam GitHub End-to-end enkripsi di repositori Amazon EKS untuk menunjukkan bagaimana layanan mikro berjalan dengan enkripsi end-to-end di Amazon EKS. Pendekatan pola menggunakan cert-manager, sebuah add-on untuk Kubernetes, dengan Let's Encrypt sebagai certificate authority (CA). Let's Encrypt adalah solusi hemat biaya untuk mengelola sertifikat dan menyediakan sertifikat gratis yang berlaku selama 90 hari. Cert-manager mengotomatiskan penyediaan sesuai permintaan dan pemutaran sertifikat saat layanan mikro baru diterapkan di Amazon EKS. 

Audiens yang dituju

Pola ini direkomendasikan untuk pengguna yang memiliki pengalaman dengan Kubernetes, TLS, Amazon Route 53, dan Domain Name System (DNS).

Prasyarat dan batasan

Prasyarat

  • Akun 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 kubectl perintah, diinstal dan dikonfigurasi untuk mengakses cluster Amazon EKS. Untuk informasi selengkapnya tentang ini, lihat Menginstal kubectl di dokumentasi Amazon EKS.

  • Nama DNS yang ada untuk menguji aplikasi. Untuk informasi selengkapnya tentang hal ini, lihat Mendaftarkan nama domain menggunakan Amazon Route 53 dalam dokumentasi Amazon Route 53. 

  • Versi Helm terbaru, diinstal pada mesin lokal Anda. Untuk informasi selengkapnya tentang ini, lihat Menggunakan Helm dengan Amazon EKS di dokumentasi Amazon EKS dan repositori GitHub Helm

  • GitHub End-to-end Enkripsi di repositori Amazon EKS, dikloning ke mesin lokal Anda. 

  • Ganti nilai berikut di trustpolicy.json file policy.json dan dari GitHub End-to-end enkripsi kloning di repositori Amazon EKS:

    • <account number>— Ganti dengan ID akun AWS untuk akun tempat Anda ingin menerapkan solusinya. 

    • <zone id>— Ganti dengan ID zona Route 53 nama domain. 

    • <node_group_role>— Ganti dengan nama peran AWS Identity and Access Management (IAM) yang terkait dengan node Amazon EKS.

    • <namespace>— Ganti dengan namespace Kubernetes di mana Anda menggunakan NGINX Ingress Controller dan aplikasi sampel.

    • <application-domain-name>— Ganti dengan nama domain DNS dari Route 53.

Batasan

  • Pola ini tidak menjelaskan cara memutar sertifikat dan hanya menunjukkan cara menggunakan sertifikat dengan layanan mikro di Amazon EKS. 

Arsitektur

Diagram berikut menunjukkan alur kerja dan komponen arsitektur untuk pola ini.

Alur kerja untuk mengatur enkripsi untuk aplikasi di Amazon EKS menggunakan cert-manager dan Let's Encrypt.

Diagram menunjukkan alur kerja berikut:

  1. Klien mengirimkan permintaan untuk mengakses aplikasi ke nama DNS.

  2. Catatan Route 53 adalah CNAME ke Network Load Balancer.

  3. Network Load Balancer meneruskan permintaan ke NGINX Ingress Controller yang dikonfigurasi dengan pendengar TLS. Komunikasi antara NGINX Ingress Controller dan Network Load Balancer mengikuti protokol HTTPS.

  4. NGINX Ingress Controller melakukan routing berbasis jalur berdasarkan permintaan klien ke layanan aplikasi.

  5. Layanan aplikasi meneruskan permintaan ke pod aplikasi. Aplikasi ini dirancang untuk menggunakan sertifikat yang sama dengan memanggil rahasia.

  6. Pod menjalankan aplikasi sampel menggunakan sertifikat cert-manager. Komunikasi antara NGINX Ingress Controller dan pod menggunakan HTTPS.

Catatan: Cert-manager berjalan di namespace sendiri. Ini menggunakan peran klaster Kubernetes untuk menyediakan sertifikat sebagai rahasia di ruang nama tertentu. Anda dapat melampirkan namespace tersebut ke pod aplikasi dan NGINX Ingress Controller.

Alat

Layanan AWS

  • Amazon Elastic Kubernetes Service (Amazon EKS) adalah layanan terkelola yang dapat Anda gunakan untuk menjalankan Kubernetes di AWS tanpa perlu menginstal, mengoperasikan, dan memelihara control plane atau node Kubernetes Anda sendiri.

  • Elastic Load Balancing secara otomatis mendistribusikan lalu lintas masuk Anda ke beberapa target, kontainer, dan alamat IP.

  • AWS Identity and Access Management (IAM) membantu Anda mengelola akses ke sumber daya AWS dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.

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

Alat-alat lainnya

  • cert-manager adalah add-on untuk Kubernetes yang meminta sertifikat, mendistribusikannya ke kontainer Kubernetes, dan mengotomatiskan perpanjangan sertifikat.

  • NGINX Ingress Controller adalah solusi manajemen lalu lintas untuk aplikasi cloud-native di Kubernetes dan lingkungan kontainer.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat zona yang dihosting publik di Route 53.

Masuk ke AWS Management Console, buka konsol Amazon Route 53, pilih Zona yang dihosting, lalu pilih Buat zona yang dihosting. Buat zona yang dihosting publik dan catat ID zona. Untuk informasi selengkapnya tentang hal ini, lihat Membuat zona yang dihosting publik di dokumentasi Amazon Route 53.

catatan

ACME DNS01 menggunakan penyedia DNS untuk memposting tantangan bagi manajer sertifikat untuk mengeluarkan sertifikat. Tantangan ini meminta Anda untuk membuktikan bahwa Anda mengontrol DNS untuk nama domain Anda dengan menempatkan nilai tertentu dalam catatan TXT di bawah nama domain tersebut. Setelah Let's Encrypt memberikan token kepada klien ACME Anda, klien Anda membuat catatan TXT yang berasal dari token itu dan kunci akun Anda, dan itu menempatkan catatan itu di. _acme-challenge.<YOURDOMAIN> Kemudian Let's Encrypt menanyakan DNS untuk catatan itu. Jika menemukan kecocokan, Anda dapat melanjutkan untuk mengeluarkan sertifikat.

AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Buat kebijakan IAM untuk cert-manager.

Kebijakan IAM diperlukan untuk memberikan izin kepada manajer sertifikat untuk memvalidasi bahwa Anda memiliki domain Route 53. policy.jsonContoh kebijakan IAM disediakan di 1-IAMRole direktori dalam GitHub End-to-end enkripsi kloning di repositori Amazon EKS.

Masukkan perintah berikut di AWS CLI untuk membuat kebijakan IAM.

aws iam create-policy \ --policy-name PolicyForCertManager \ --policy-document file://policy.json
AWS DevOps

Buat peran IAM untuk cert-manager.

Setelah membuat kebijakan IAM, Anda harus membuat peran IAM. trustpolicy.jsonContoh peran IAM disediakan di 1-IAMRole direktori.

Masukkan perintah berikut di AWS CLI untuk membuat peran IAM.

aws iam create-role \ --role-name RoleForCertManager \ --assume-role-policy-document file://trustpolicy.json
AWS DevOps

Lampirkan kebijakan pada peran tersebut.

Masukkan perintah berikut di AWS CLI untuk melampirkan kebijakan IAM ke peran IAM. Ganti AWS_ACCOUNT_ID dengan ID akun AWS Anda.

aws iam attach-role-policy \ --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/PolicyForCertManager \ --role-name RoleForCertManager
AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Menyebarkan NGINX Ingress Controller.

Instal versi terbaru nginx-ingress menggunakan Helm. Anda dapat memodifikasi nginx-ingress konfigurasi sesuai dengan kebutuhan Anda sebelum menerapkannya. Pola ini menggunakan Network Load Balancer beranotasi dan menghadap internal dan yang tersedia di direktori. 5-Nginx-Ingress-Controller 

Instal NGINX Ingress Controller dengan menjalankan perintah Helm berikut dari direktori. 5-Nginx-Ingress-Controller

helm install test-nginx nginx-stable/nginx-ingress  -f  5-Nginx-Ingress-Controller/values_internal_nlb.yaml

AWS DevOps

Verifikasi bahwa NGINX Ingress Controller diinstal.

Masukkan helm list perintah. Output harus menunjukkan bahwa NGINX Ingress Controller diinstal.

AWS DevOps

Buat catatan Route 53 A.

Catatan A menunjuk ke Network Load Balancer yang dibuat oleh NGINX Ingress Controller.

  1. Dapatkan nama DNS dari Network Load Balancer. Untuk petunjuk, lihat Mendapatkan nama DNS untuk penyeimbang beban ELB.

  2. Di konsol Amazon Route 53, pilih Zona yang Dihosting.

  3. Pilih zona yang dihosting publik tempat Anda ingin membuat rekaman, lalu pilih Buat catatan.

  4. Masukkan nama untuk catatan. 

  5. Dalam tipe Rekam, pilih A - Rute lalu lintas ke IPv4 dan beberapa sumber daya AWS.  

  6. Aktifkan Alias.

  7. Dalam Rute lalu lintas ke, lakukan hal berikut:

    1. Pilih Alias ke Network Load Balancer.

    2. Pilih Wilayah AWS tempat Network Load Balancer digunakan.

    3. Masukkan nama DNS Network Load Balancer.

  8. Pilih Create records (Buat catatan).

AWS DevOps
TugasDeskripsiKeterampilan yang dibutuhkan

Menyebarkan NGINX VirtualServer.

VirtualServer Sumber daya NGINX adalah konfigurasi load balancing yang merupakan alternatif dari sumber daya ingress. Konfigurasi untuk membuat VirtualServer sumber daya NGINX tersedia dalam nginx_virtualserver.yaml file di direktori. 6-Nginx-Virtual-Server Masukkan perintah berikut kubectl untuk membuat sumber daya NGINX VirtualServer .

kubectl apply -f  nginx_virtualserver.yaml

penting

Pastikan Anda memperbarui nama domain aplikasi, rahasia sertifikat, dan nama layanan aplikasi dalam nginx_virtualserver.yaml file.

AWS DevOps

Verifikasi bahwa NGINX VirtualServer dibuat.

Masukkan perintah berikut kubectl untuk memverifikasi bahwa VirtualServer sumber daya NGINX berhasil dibuat.

kubectl get virtualserver

catatan

Verifikasi bahwa Host kolom tersebut cocok dengan nama domain aplikasi Anda.

AWS DevOps

Menyebarkan server web NGINX dengan TLS diaktifkan.

Pola ini menggunakan server web NGINX dengan TLS diaktifkan sebagai aplikasi untuk menguji enkripsi. end-to-end File konfigurasi yang diperlukan untuk menyebarkan aplikasi pengujian tersedia di demo-webserver direktori. 

Masukkan perintah berikut kubectl untuk menyebarkan aplikasi uji.

kubectl apply -f nginx-tls-ap.yaml

AWS DevOps

Verifikasi bahwa sumber daya aplikasi pengujian dibuat.

Masukkan perintah berikut kubectl untuk memverifikasi bahwa sumber daya yang diperlukan dibuat untuk aplikasi pengujian:

  • kubectl get deployments

    catatan

    Validasi Ready kolom dan Available kolom.

  • kubectl get pods | grep -i example-deploy

    catatan

    Pod harus dalam running keadaan.

  • kubectl get configmap 

  • kubectl get svc 

AWS DevOps

Validasi aplikasi.

  1. Masukkan perintah berikut dengan mengganti <application-domain-name> dengan nama DNS Route53 yang Anda buat sebelumnya.

    curl --verbose https://<application-domain-name>

  2. Verifikasi bahwa Anda dapat mengakses aplikasi.

AWS DevOps

Sumber daya terkait

Sumber daya AWS

Sumber daya lainnya