Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Sederhanakan otentikasi aplikasi dengan TLS timbal balik di Amazon ECS dengan menggunakan Application Load Balancer
Olawale Olaleye dan Shamanth Devagari, Amazon Web Services
Ringkasan
Pola ini membantu Anda menyederhanakan otentikasi aplikasi dan menurunkan beban keamanan dengan TLS bersama di Amazon Elastic Container Service (Amazon ECS) Service Elastic Container ECS) dengan menggunakan Application Load Balancer (ALB). Dengan ALB, Anda dapat mengautentikasi sertifikat klien X.509 dari. AWS Private Certificate Authority Kombinasi yang kuat ini membantu mencapai komunikasi yang aman antara layanan Anda, mengurangi kebutuhan akan mekanisme otentikasi yang kompleks dalam aplikasi Anda. Selain itu, pola menggunakan Amazon Elastic Container Registry (Amazon ECR) Registry (Amazon ECR) untuk menyimpan gambar kontainer.
Contoh dalam pola ini menggunakan gambar Docker dari galeri publik untuk membuat beban kerja sampel pada awalnya. Selanjutnya, gambar Docker baru dibuat untuk disimpan di Amazon ECR. Untuk sumbernya, pertimbangkan sistem berbasis Git seperti GitHub,, atau Bitbucket GitLab, atau gunakan Amazon Simple Storage Service Amazon S3 (Amazon S3). Untuk membuat gambar Docker, pertimbangkan AWS CodeBuild untuk menggunakan gambar berikutnya.
Prasyarat dan batasan
Prasyarat
Aktif Akun AWS dengan akses untuk menyebarkan AWS CloudFormation tumpukan. Pastikan Anda memiliki izin pengguna atau peran AWS Identity and Access Management (IAM) untuk digunakan. CloudFormation
AWS Command Line Interface (AWS CLI) diinstal. Konfigurasikan AWS kredensyal Anda di mesin lokal Anda atau di lingkungan Anda dengan menggunakan AWS CLI atau dengan mengatur variabel lingkungan dalam file.
~/.aws/credentials
Docker diinstal
. Keakraban dengan yang Layanan AWS dijelaskan dalam Alat.
Pengetahuan tentang Docker dan NGINX.
Batasan
Mutual TLS untuk Application Load Balancer hanya mendukung sertifikat klien X.509v3. Sertifikat klien X.509v1 tidak didukung.
CloudFormation Template yang disediakan dalam repositori kode pola ini tidak termasuk penyediaan CodeBuild proyek sebagai bagian dari tumpukan.
Beberapa Layanan AWS tidak tersedia di semua Wilayah AWS. Untuk ketersediaan Wilayah, lihat AWS Layanan menurut Wilayah
. Untuk titik akhir tertentu, lihat Titik akhir dan kuota layanan, dan pilih tautan untuk layanan.
Versi produk
Docker versi 27.3.1 atau yang lebih baru
AWS CLI versi 2.14.5 atau yang lebih baru
Arsitektur
Diagram berikut menunjukkan komponen arsitektur untuk pola ini.

Diagram menunjukkan alur kerja berikut:
Buat repositori Git, dan komit kode aplikasi ke repositori.
Buat otoritas sertifikat pribadi (CA) di AWS Private CA.
Buat CodeBuild proyek. CodeBuildproject Ini dipicu oleh perubahan komit dan membuat gambar Docker dan menerbitkan gambar yang dibangun ke Amazon ECR.
Salin rantai sertifikat dan badan sertifikat dari CA, dan unggah bundel sertifikat ke Amazon S3.
Buat toko kepercayaan dengan bundel CA yang Anda unggah ke Amazon S3. Kaitkan toko kepercayaan dengan pendengar TLS bersama di Application Load Balancer (ALB).
Gunakan CA pribadi untuk menerbitkan sertifikat klien untuk beban kerja kontainer. Juga buat sertifikat TLS pribadi menggunakan AWS Private CA.
Impor sertifikat TLS pribadi ke AWS Certificate Manager (ACM), dan gunakan dengan ALB.
Beban kerja kontainer
ServiceTwo
menggunakan sertifikat klien yang dikeluarkan untuk mengautentikasi dengan ALB saat berkomunikasi dengan beban kerja kontainer di.ServiceOne
Beban kerja kontainer
ServiceOne
menggunakan sertifikat klien yang dikeluarkan untuk mengautentikasi dengan ALB saat berkomunikasi dengan beban kerja kontainer di.ServiceTwo
Otomatisasi dan skala
Pola ini dapat sepenuhnya otomatis dengan menggunakan CloudFormation, AWS Cloud Development Kit (AWS CDK) , atau operasi API dari SDK untuk menyediakan AWS sumber daya.
Anda dapat menggunakannya AWS CodePipeline untuk mengimplementasikan pipeline continuous integration dan continuous deployment (CI/CD) menggunakan CodeBuild untuk mengotomatiskan proses pembuatan image container dan menerapkan rilis baru ke layanan cluster Amazon ECS.
Alat
Layanan AWS
AWS Certificate Manager (ACM) membantu Anda membuat, menyimpan, dan memperbarui sertifikat dan kunci SSL/TLS X.509 publik dan pribadi yang melindungi situs web dan aplikasi Anda. AWS
AWS CloudFormationmembantu Anda menyiapkan AWS sumber daya, menyediakannya dengan cepat dan konsisten, dan mengelolanya sepanjang siklus hidupnya di seluruh Akun AWS dan. Wilayah AWS
AWS CodeBuildadalah layanan build terkelola penuh yang membantu Anda mengkompilasi kode sumber, menjalankan pengujian unit, dan menghasilkan artefak yang siap digunakan.
Amazon Elastic Container Registry (Amazon ECR) adalah layanan registri gambar kontainer terkelola yang aman, terukur, dan andal.
Amazon Elastic Container Service (Amazon ECS) adalah layanan manajemen kontainer yang sangat skalabel dan cepat untuk menjalankan, menghentikan, dan mengelola kontainer di cluster. Anda dapat menjalankan tugas dan layanan Anda pada infrastruktur tanpa server yang dikelola oleh. AWS Fargate Atau, untuk kontrol lebih lanjut atas infrastruktur, Anda dapat menjalankan tugas dan layanan Anda di klaster instans Amazon Elastic Compute Cloud (Amazon EC2) yang Anda kelola.
Amazon ECS Exec memungkinkan Anda berinteraksi langsung dengan kontainer tanpa perlu terlebih dahulu berinteraksi dengan sistem operasi wadah host, membuka port masuk, atau mengelola kunci SSH. Anda dapat menggunakan ECS Exec untuk menjalankan perintah di, atau mendapatkan shell ke, wadah yang berjalan pada EC2 instance Amazon atau di. AWS Fargate
Elastic Load Balancing (ELB) mendistribusikan lalu lintas aplikasi atau jaringan yang masuk ke beberapa target. Misalnya, Anda dapat mendistribusikan lalu lintas di seluruh EC2 instans Amazon, kontainer, dan alamat IP, di satu atau beberapa Availability Zone. ELB memantau kesehatan target yang terdaftar, dan mengarahkan lalu lintas hanya ke target yang sehat. ELB menskalakan penyeimbang beban Anda saat lalu lintas masuk Anda berubah seiring waktu. Ini dapat secara otomatis menskalakan ke sebagian besar beban kerja.
AWS Fargatemembantu Anda menjalankan container tanpa perlu mengelola server atau EC2 instans Amazon. Fargate kompatibel dengan Amazon ECS dan Amazon Elastic Kubernetes Service (Amazon EKS). Anda dapat menjalankan tugas dan layanan Amazon ECS Anda dengan jenis peluncuran Fargate atau penyedia kapasitas Fargate. Untuk melakukannya, paketkan aplikasi Anda dalam wadah, tentukan persyaratan CPU dan memori, tentukan kebijakan jaringan dan IAM, dan luncurkan aplikasi. Setiap tugas Fargate memiliki batas isolasi sendiri dan tidak berbagi kernel, sumber daya CPU, sumber daya memori, atau elastic network interface yang mendasarinya dengan tugas lain.
AWS Private Certificate Authoritymemungkinkan pembuatan hierarki otoritas sertifikat swasta (CA), termasuk root dan bawahan CAs, tanpa biaya investasi dan pemeliharaan pengoperasian CA lokal.
Alat-alat lainnya
Docker
adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah. GitHub
, GitLab , dan Bitbucket adalah beberapa sistem kontrol sumber berbasis Git yang umum digunakan untuk melacak perubahan kode sumber. NGINX Open Source
adalah penyeimbang beban sumber terbuka, cache konten, dan server web. Pola ini menggunakannya sebagai server web. OpenSSL
adalah perpustakaan open source yang menyediakan layanan yang digunakan oleh implementasi OpenSSL dari TLS dan CMS.
Repositori kode
Kode untuk pola ini tersedia di repositori GitHub MTLS-with-Application-Load-Balancer-in-Amazon-ECS
Praktik terbaik
Gunakan Amazon ECS Exec untuk menjalankan perintah atau mendapatkan shell ke wadah yang berjalan di Fargate. Anda juga dapat menggunakan ECS Exec untuk membantu mengumpulkan informasi diagnostik untuk debugging.
Gunakan grup keamanan dan daftar kontrol akses jaringan (ACLs) untuk mengontrol lalu lintas masuk dan keluar antar layanan. Tugas Fargate menerima alamat IP dari subnet yang dikonfigurasi di cloud pribadi virtual (VPC) Anda.
Epik
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Unduh kode sumbernya. | Untuk mengunduh kode sumber pola ini, fork atau kloning repositori GitHub MTLS-with-Application-Load-Balancer-in-Amazon-ECS | DevOps insinyur |
Buat repositori Git. | Untuk membuat repositori Git untuk memuat Dockerfile dan
| DevOps insinyur |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Buat CA pribadi di AWS Private CA. | Untuk membuat otoritas sertifikat pribadi (CA), jalankan perintah berikut di terminal Anda. Ganti nilai dalam variabel contoh dengan nilai Anda sendiri.
Untuk detail selengkapnya, lihat Membuat CA pribadi AWS Private CA di dalam AWS dokumentasi. | DevOps insinyur, AWS DevOps |
Buat dan instal sertifikat CA pribadi Anda. | Untuk membuat dan menginstal sertifikat untuk CA root pribadi Anda, jalankan perintah berikut di terminal Anda:
| AWS DevOps, DevOps insinyur |
Minta sertifikat terkelola. | Untuk meminta sertifikat pribadi AWS Certificate Manager untuk digunakan dengan ALB pribadi Anda, gunakan perintah berikut:
| DevOps insinyur, AWS DevOps |
Gunakan CA pribadi untuk mengeluarkan sertifikat klien. |
Perintah ini mengembalikan CSR dan kunci pribadi untuk dua layanan.
Untuk informasi selengkapnya, lihat Menerbitkan sertifikat entitas akhir pribadi dalam dokumentasi. AWS | DevOps insinyur, AWS DevOps |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Ketentuan Layanan AWS dengan CloudFormation template. | Untuk menyediakan virtual private cloud (VPC), Amazon ECS cluster, layanan Amazon ECS, Application Load Balancer, dan Amazon Elastic Container Registry (Amazon ECR), gunakan template. CloudFormation | DevOps insinyur |
Dapatkan variabel. | Verifikasi bahwa Anda memiliki kluster Amazon ECS dengan dua layanan yang berjalan. Untuk mengambil detail sumber daya dan menyimpannya sebagai variabel, gunakan perintah berikut:
| DevOps insinyur |
Buat CodeBuild proyek. | Untuk menggunakan CodeBuild proyek untuk membuat gambar Docker untuk layanan Amazon ECS Anda, lakukan hal berikut:
Untuk detail selengkapnya, lihat Membuat proyek build AWS CodeBuild dalam AWS dokumentasi. | AWS DevOps, DevOps insinyur |
Bangun gambar Docker. | Anda dapat menggunakan CodeBuild untuk melakukan proses pembuatan gambar. CodeBuild memerlukan izin untuk berinteraksi dengan Amazon ECR dan bekerja dengan Amazon S3. Sebagai bagian dari proses, image Docker dibuat dan didorong ke registri Amazon ECR. Untuk detail tentang templat dan kode, lihat Informasi tambahan. (Opsional) Untuk membangun secara lokal untuk tujuan pengujian, gunakan perintah berikut:
| DevOps insinyur |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Unggah sertifikat CA ke Amazon S3. | Untuk mengunggah sertifikat CA ke bucket Amazon S3, gunakan perintah contoh berikut:
| AWS DevOps, DevOps insinyur |
Buat toko kepercayaan. | Untuk membuat toko kepercayaan, gunakan perintah contoh berikut:
| AWS DevOps, DevOps insinyur |
Unggah sertifikat klien. | Untuk mengunggah sertifikat klien ke Amazon S3 untuk gambar Docker, gunakan perintah contoh berikut:
| AWS DevOps, DevOps insinyur |
Ubah pendengar. | Untuk mengaktifkan TLS timbal balik di ALB, modifikasi pendengar HTTPS dengan menggunakan perintah berikut:
Untuk informasi selengkapnya, lihat Mengonfigurasi TLS timbal balik pada Application Load Balancer dalam dokumentasi. AWS | AWS DevOps, DevOps insinyur |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Perbarui definisi tugas Amazon ECS. | Untuk memperbarui definisi tugas Amazon ECS, ubah Untuk mendapatkan nilai untuk masing-masing layanan, perbarui definisi tugas dengan Uri gambar Docker baru yang Anda buat di langkah sebelumnya:
Untuk informasi selengkapnya, lihat Memperbarui definisi tugas Amazon ECS menggunakan konsol dalam AWS dokumentasi. | AWS DevOps, DevOps insinyur |
Perbarui layanan Amazon ECS. | Perbarui layanan dengan definisi tugas terbaru. Definisi tugas ini adalah cetak biru untuk gambar Docker yang baru dibangun, dan berisi sertifikat klien yang diperlukan untuk otentikasi TLS bersama. Untuk memperbarui layanan, gunakan prosedur berikut:
Ulangi langkah-langkah untuk layanan lainnya. | Administrator AWS, AWS DevOps, DevOps insinyur |
Tugas | Deskripsi | Keterampilan yang dibutuhkan |
---|---|---|
Salin URL aplikasi. | Gunakan konsol Amazon ECS untuk melihat tugas. Ketika status tugas telah diperbarui ke Running, pilih tugas. Di bagian Tugas, salin ID tugas. | Administrator AWS, AWS DevOps |
Uji aplikasi Anda. | Untuk menguji aplikasi Anda, gunakan ECS Exec untuk mengakses tugas.
| Administrator AWS, AWS DevOps |
Sumber daya terkait
Dokumentasi Amazon ECS
AWS Sumber daya lainnya
Informasi tambahan
Mengedit Dockerfile
Kode berikut menunjukkan perintah yang Anda edit di Dockerfile untuk layanan 1:
FROM public.ecr.aws/nginx/nginx:latest WORKDIR /usr/share/nginx/html RUN echo "Returning response from Service 1: Ok" > /usr/share/nginx/html/index.html ADD client_cert1.cert client_private-key1.pem /usr/local/share/ca-certificates/ RUN chmod -R 400 /usr/local/share/ca-certificates/
Kode berikut menunjukkan perintah yang Anda edit di Dockerfile untuk layanan 2:
FROM public.ecr.aws/nginx/nginx:latest WORKDIR /usr/share/nginx/html RUN echo "Returning response from Service 2: Ok" > /usr/share/nginx/html/index.html ADD client_cert2.cert client_private-key2.pem /usr/local/share/ca-certificates/ RUN chmod -R 400 /usr/local/share/ca-certificates/
Jika Anda membuat image Docker dengan CodeBuild, buildspec
file menggunakan nomor CodeBuild build untuk mengidentifikasi versi gambar secara unik sebagai nilai tag. Anda dapat mengubah buildspec
file agar sesuai dengan kebutuhan Anda, seperti yang ditunjukkan dalam kode buildspec
kustom berikut:
version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $ECR_REPOSITORY_URI - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) - IMAGE_TAG=${COMMIT_HASH:=latest} build: commands: # change the S3 path depending on the service - aws s3 cp s3://$YOUR_S3_BUCKET_NAME/serviceone/ $CodeBuild_SRC_DIR/ --recursive - echo Build started on `date` - echo Building the Docker image... - docker build -t $ECR_REPOSITORY_URI:latest . - docker tag $ECR_REPOSITORY_URI:latest $ECR_REPOSITORY_URI:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker images... - docker push $ECR_REPOSITORY_URI:latest - docker push $ECR_REPOSITORY_URI:$IMAGE_TAG - echo Writing image definitions file... # for ECS deployment reference - printf '[{"name":"%s","imageUri":"%s"}]' $CONTAINER_NAME $ECR_REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json artifacts: files: - imagedefinitions.json