

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
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt"></a>

*Mahendra Revanasiddappa dan Vasanth Jeyaraj, Amazon Web Services*

## Ringkasan
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-summary"></a>

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](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme) untuk menunjukkan bagaimana layanan mikro berjalan dengan enkripsi end-to-end di Amazon EKS. Pendekatan pola menggunakan [cert-manager](https://cert-manager.io/docs/), sebuah add-on untuk Kubernetes, dengan [Let's Encrypt sebagai certificate](https://letsencrypt.org/) 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
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-prereqs"></a>

**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](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) Amazon EKS.
+ Nama DNS yang ada untuk menguji aplikasi. Untuk informasi selengkapnya tentang hal ini, lihat [Mendaftarkan nama domain menggunakan Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) dalam dokumentasi Amazon Route 53. 
+ Versi [Helm](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) terbaru, diinstal pada mesin lokal Anda. Untuk informasi selengkapnya tentang ini, lihat [Menggunakan Helm dengan Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/helm.html) di dokumentasi Amazon EKS dan repositori GitHub [Helm](https://github.com/helm/helm). 
+  GitHub [End-to-end Enkripsi di repositori Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme), 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](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme):
  + `<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
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-architecture"></a>

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.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/9aa3ee9e-73db-41f5-a467-b5c47fef496e/images/40692ede-6fb3-474e-8c9e-85c51529e8ad.png)


Diagram menunjukkan alur kerja berikut:

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

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

1. 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.

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

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

1. 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
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-tools"></a>

**Layanan AWS**
+ [Amazon Elastic Kubernetes Service (Amazon](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html) 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](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) secara otomatis mendistribusikan lalu lintas masuk Anda ke beberapa target, kontainer, dan alamat IP.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke sumber daya AWS dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) adalah layanan web DNS yang sangat tersedia dan dapat diskalakan.

**Alat-alat lainnya**
+ [cert-manager](https://cert-manager.io/docs/installation/supported-releases/) adalah add-on untuk Kubernetes yang meminta sertifikat, mendistribusikannya ke kontainer Kubernetes, dan mengotomatiskan perpanjangan sertifikat.
+ [NGINX Ingress Controller](https://kubernetes.github.io/ingress-nginx/) adalah solusi manajemen lalu lintas untuk aplikasi cloud-native di Kubernetes dan lingkungan kontainer.

## Epik
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-epics"></a>

### Buat dan konfigurasikan zona yang dihosting publik dengan Route 53
<a name="create-and-configure-a-public-hosted-zone-with-route-53"></a>


| Tugas | Deskripsi | Keterampilan 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](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) di dokumentasi Amazon Route 53.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 | 

### Konfigurasikan peran IAM untuk memungkinkan pengelola sertifikat mengakses zona yang dihosting publik
<a name="configure-an-iam-role-to-allow-cert-manager-to-access-the-public-hosted-zone"></a>


| Tugas | Deskripsi | Keterampilan 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.json`Contoh kebijakan IAM disediakan di `1-IAMRole` direktori dalam GitHub [End-to-end enkripsi kloning di repositori Amazon EKS](https://github.com/aws-samples/end-to-end-encryption-on-amazon-eks#readme).Masukkan perintah berikut di AWS CLI untuk membuat kebijakan IAM.<pre>aws iam create-policy \<br />  --policy-name PolicyForCertManager \<br />  --policy-document file://policy.json</pre> | AWS DevOps | 
| Buat peran IAM untuk cert-manager. | Setelah membuat kebijakan IAM, Anda harus membuat peran IAM. `trustpolicy.json`Contoh peran IAM disediakan di `1-IAMRole` direktori.Masukkan perintah berikut di AWS CLI untuk membuat peran IAM.<pre>aws iam create-role \<br />  --role-name RoleForCertManager \<br />  --assume-role-policy-document file://trustpolicy.json</pre> | 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. <pre>aws iam attach-role-policy \<br />  --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/PolicyForCertManager \<br />  --role-name RoleForCertManager</pre> | AWS DevOps | 

### Siapkan NGINX Ingress Controller di Amazon EKS
<a name="set-up-the-nginx-ingress-controller-in-amazon-eks"></a>


| Tugas | Deskripsi | Keterampilan 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.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

### Siapkan NGINX di VirtualServer Amazon EKS
<a name="set-up-nginx-virtualserver-on-amazon-eks"></a>


| Tugas | Deskripsi | Keterampilan 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`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`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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 
| Validasi aplikasi. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt.html) | AWS DevOps | 

## Sumber daya terkait
<a name="set-up-end-to-end-encryption-for-applications-on-amazon-eks-using-cert-manager-and-let-s-encrypt-resources"></a>

**Sumber daya AWS**
+ [Membuat rekaman dengan menggunakan konsol Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resource-record-sets-creating.html) (dokumentasi Amazon Route 53)
+ [Menggunakan Network Load Balancer dengan pengontrol ingress NGINX di Amazon EKS](https://aws.amazon.com/blogs/opensource/network-load-balancer-nginx-ingress-controller-eks/) (postingan blog AWS)

**Sumber daya lainnya**
+ [Route 53](https://cert-manager.io/docs/configuration/acme/dns01/route53/) (dokumentasi pengelola sertifikat)
+ [Mengkonfigurasi Penyedia Tantangan DNS01](https://cert-manager.io/docs/configuration/acme/dns01/) (dokumentasi manajer sertifikat)
+ [Mari mengenkripsi tantangan DNS](https://letsencrypt.org/docs/challenge-types/#dns-01-challenge) (Let's Encrypt documentation)