Sederhanakan otentikasi aplikasi dengan TLS timbal balik di Amazon ECS dengan menggunakan Application Load Balancer - AWS Prescriptive Guidance

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

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.

Alur kerja untuk mengautentikasi dengan TLS timbal balik menggunakan Application Load Balancer.

Diagram menunjukkan alur kerja berikut:

  1. Buat repositori Git, dan komit kode aplikasi ke repositori.

  2. Buat otoritas sertifikat pribadi (CA) di AWS Private CA.

  3. Buat CodeBuild proyek. CodeBuildproject Ini dipicu oleh perubahan komit dan membuat gambar Docker dan menerbitkan gambar yang dibangun ke Amazon ECR.

  4. Salin rantai sertifikat dan badan sertifikat dari CA, dan unggah bundel sertifikat ke Amazon S3.

  5. Buat toko kepercayaan dengan bundel CA yang Anda unggah ke Amazon S3. Kaitkan toko kepercayaan dengan pendengar TLS bersama di Application Load Balancer (ALB).

  6. Gunakan CA pribadi untuk menerbitkan sertifikat klien untuk beban kerja kontainer. Juga buat sertifikat TLS pribadi menggunakan AWS Private CA.

  7. Impor sertifikat TLS pribadi ke AWS Certificate Manager (ACM), dan gunakan dengan ALB.

  8. Beban kerja kontainer ServiceTwo menggunakan sertifikat klien yang dikeluarkan untuk mengautentikasi dengan ALB saat berkomunikasi dengan beban kerja kontainer di. ServiceOne

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

TugasDeskripsiKeterampilan 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 buildspec.yaml file, gunakan langkah-langkah berikut:

  1. Buat folder di lingkungan virtual Anda. Beri nama dengan nama proyek Anda.

  2. Buka terminal di mesin lokal Anda, dan arahkan ke folder ini.

  3. Untuk mengkloning repositori MTLS-with-Application-Load-Balancer-in-Amazon-ECS ke direktori proyek Anda, masukkan perintah berikut:

git clone https://github.com/aws-samples/mTLS-with-Application-Load-Balancer-in-Amazon-ECS.git

DevOps insinyur
TugasDeskripsiKeterampilan 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.

export AWS_DEFAULT_REGION="us-west-2" export SERVICES_DOMAIN="www.example.com" export ROOT_CA_ARN=`aws acm-pca create-certificate-authority \ --certificate-authority-type ROOT \ --certificate-authority-configuration \ "KeyAlgorithm=RSA_2048, SigningAlgorithm=SHA256WITHRSA, Subject={ Country=US, State=WA, Locality=Seattle, Organization=Build on AWS, OrganizationalUnit=mTLS Amazon ECS and ALB Example, CommonName=${SERVICES_DOMAIN}}" \ --query CertificateAuthorityArn --output text`

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:

  1. Buat permintaan penandatanganan sertifikat (CSR).

    ROOT_CA_CSR=`aws acm-pca get-certificate-authority-csr \ --certificate-authority-arn ${ROOT_CA_ARN} \ --query Csr --output text`
  2. Terbitkan sertifikat root.

    AWS_CLI_VERSION=$(aws --version 2>&1 | cut -d/ -f2 | cut -d. -f1) [[ ${AWS_CLI_VERSION} -gt 1 ]] && ROOT_CA_CSR="$(echo ${ROOT_CA_CSR} | base64)" ROOT_CA_CERT_ARN=`aws acm-pca issue-certificate \ --certificate-authority-arn ${ROOT_CA_ARN} \ --template-arn arn:aws:acm-pca:::template/RootCACertificate/V1 \ --signing-algorithm SHA256WITHRSA \ --validity Value=10,Type=YEARS \ --csr "${ROOT_CA_CSR}" \ --query CertificateArn --output text`
  3. Ambil sertifikat akar.

    ROOT_CA_CERT=`aws acm-pca get-certificate \ --certificate-arn ${ROOT_CA_CERT_ARN} \ --certificate-authority-arn ${ROOT_CA_ARN} \ --query Certificate --output text` # store for later use aws acm-pca get-certificate \ --certificate-arn ${ROOT_CA_CERT_ARN} \ --certificate-authority-arn ${ROOT_CA_ARN} \ --query Certificate --output text > ca-cert.pem
  4. Impor sertifikat CA root untuk menginstalnya di CA.

    [[ ${AWS_CLI_VERSION} -gt 1 ]] && ROOT_CA_CERT="$(echo ${ROOT_CA_CERT} | base64)" aws acm-pca import-certificate-authority-certificate \ --certificate-authority-arn $ROOT_CA_ARN \ --certificate "${ROOT_CA_CERT}"

    Untuk detail selengkapnya, lihat Menginstal sertifikat CA di AWS dokumentasi.

AWS DevOps, DevOps insinyur

Minta sertifikat terkelola.

Untuk meminta sertifikat pribadi AWS Certificate Manager untuk digunakan dengan ALB pribadi Anda, gunakan perintah berikut:

export TLS_CERTIFICATE_ARN=`aws acm request-certificate \ --domain-name "*.${DOMAIN_DOMAIN}" \ --certificate-authority-arn ${ROOT_CA_ARN} \ --query CertificateArn --output text`
DevOps insinyur, AWS DevOps

Gunakan CA pribadi untuk mengeluarkan sertifikat klien.

  • Untuk membuat permintaan penandatanganan sertifikat (CSR) untuk dua layanan, gunakan AWS CLI perintah berikut:

openssl req -out client_csr1.pem -new -newkey rsa:2048 -nodes -keyout client_private-key1.pem

openssl req -out client_csr2.pem -new -newkey rsa:2048 -nodes -keyout client_private-key2.pem

Perintah ini mengembalikan CSR dan kunci pribadi untuk dua layanan.

  • Untuk mengeluarkan sertifikat untuk layanan, jalankan perintah berikut untuk menggunakan CA pribadi yang Anda buat:

SERVICE_ONE_CERT_ARN=`aws acm-pca issue-certificate \ --certificate-authority-arn ${ROOT_CA_ARN} \ --csr fileb://client_csr1.pem \ --signing-algorithm "SHA256WITHRSA" \ --validity Value=5,Type="YEARS" --query CertificateArn --output text` echo "SERVICE_ONE_CERT_ARN: ${SERVICE_ONE_CERT_ARN}" aws acm-pca get-certificate \ --certificate-authority-arn ${ROOT_CA_ARN} \ --certificate-arn ${SERVICE_ONE_CERT_ARN} \ | jq -r '.Certificate' > client_cert1.cert SERVICE_TWO_CERT_ARN=`aws acm-pca issue-certificate \ --certificate-authority-arn ${ROOT_CA_ARN} \ --csr fileb://client_csr2.pem \ --signing-algorithm "SHA256WITHRSA" \ --validity Value=5,Type="YEARS" --query CertificateArn --output text` echo "SERVICE_TWO_CERT_ARN: ${SERVICE_TWO_CERT_ARN}" aws acm-pca get-certificate \ --certificate-authority-arn ${ROOT_CA_ARN} \ --certificate-arn ${SERVICE_TWO_CERT_ARN} \ | jq -r '.Certificate' > client_cert2.cert

Untuk informasi selengkapnya, lihat Menerbitkan sertifikat entitas akhir pribadi dalam dokumentasi. AWS

DevOps insinyur, AWS DevOps
TugasDeskripsiKeterampilan 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:

export LoadBalancerDNS=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`LoadBalancerDNS`].OutputValue') export ECRRepositoryUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryUri`].OutputValue') export ECRRepositoryServiceOneUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceOneUri`].OutputValue') export ECRRepositoryServiceTwoUri=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`ECRRepositoryServiceTwoUri`].OutputValue') export ClusterName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`ClusterName`].OutputValue') export BucketName=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`BucketName`].OutputValue') export Service1ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`Service1ListenerArn`].OutputValue') export Service2ListenerArn=$(aws cloudformation describe-stacks --stack-name ecs-mtls \ --output text \ --query 'Stacks[0].Outputs[?OutputKey==`Service2ListenerArn`].OutputValue')
DevOps insinyur

Buat CodeBuild proyek.

Untuk menggunakan CodeBuild proyek untuk membuat gambar Docker untuk layanan Amazon ECS Anda, lakukan hal berikut:

  1. Masuk ke AWS Management Console, dan buka CodeBuild konsol di https://console.aws.amazon.com/codesuite/codebuild/.

  2. Buat proyek baru. Untuk Sumber, pilih repositori Git yang Anda buat. Untuk informasi tentang berbagai jenis integrasi repositori Git, lihat Bekerja dengan koneksi dalam dokumentasi. AWS

  3. Konfirmasikan bahwa mode Privileged diaktifkan. Untuk membangun gambar Docker, mode ini diperlukan. Jika tidak, gambar tidak akan berhasil dibangun.

  4. Gunakan buildspec.yaml file kustom yang dibagikan untuk setiap layanan.

  5. Berikan nilai untuk nama dan deskripsi proyek.

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:

# login to ECR aws ecr get-login-password | docker login --username AWS --password-stdin $ECRRepositoryUri # build image for service one cd /service1 aws s3 cp s3://$BucketName/serviceone/ service1/ --recursive docker build -t $ECRRepositoryServiceOneUri . docker push $ECRRepositoryServiceOneUri # build image for service two cd ../service2 aws s3 cp s3://$BucketName/servicetwo/ service2/ --recursive docker build -t $ECRRepositoryServiceTwoUri . docker push $ECRRepositoryServiceTwoUri
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Unggah sertifikat CA ke Amazon S3.

Untuk mengunggah sertifikat CA ke bucket Amazon S3, gunakan perintah contoh berikut:

aws s3 cp ca-cert.pem s3://$BucketName/acm-trust-store/

AWS DevOps, DevOps insinyur

Buat toko kepercayaan.

Untuk membuat toko kepercayaan, gunakan perintah contoh berikut:

TrustStoreArn=`aws elbv2 create-trust-store --name acm-pca-trust-certs \ --ca-certificates-bundle-s3-bucket $BucketName \ --ca-certificates-bundle-s3-key acm-trust-store/ca-cert.pem --query 'TrustStores[].TrustStoreArn' --output text`
AWS DevOps, DevOps insinyur

Unggah sertifikat klien.

Untuk mengunggah sertifikat klien ke Amazon S3 untuk gambar Docker, gunakan perintah contoh berikut:

# for service one aws s3 cp client_cert1.cert s3://$BucketName/serviceone/ aws s3 cp client_private-key1.pem s3://$BucketName/serviceone/ # for service two aws s3 cp client_cert2.cert s3://$BucketName/servicetwo/ aws s3 cp client_private-key2.pem s3://$BucketName/servicetwo/
AWS DevOps, DevOps insinyur

Ubah pendengar.

Untuk mengaktifkan TLS timbal balik di ALB, modifikasi pendengar HTTPS dengan menggunakan perintah berikut:

aws elbv2 modify-listener \ --listener-arn $Service1ListenerArn \ --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \ --ssl-policy ELBSecurityPolicy-2016-08 \ --protocol HTTPS \ --port 8080 \ --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false aws elbv2 modify-listener \ --listener-arn $Service2ListenerArn \ --certificates CertificateArn=$TLS_CERTIFICATE_ARN_TWO \ --ssl-policy ELBSecurityPolicy-2016-08 \ --protocol HTTPS \ --port 8090 \ --mutual-authentication Mode=verify,TrustStoreArn=$TrustStoreArn,IgnoreClientCertificateExpiry=false

Untuk informasi selengkapnya, lihat Mengonfigurasi TLS timbal balik pada Application Load Balancer dalam dokumentasi. AWS

AWS DevOps, DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Perbarui definisi tugas Amazon ECS.

Untuk memperbarui definisi tugas Amazon ECS, ubah image parameter dalam revisi baru.

Untuk mendapatkan nilai untuk masing-masing layanan, perbarui definisi tugas dengan Uri gambar Docker baru yang Anda buat di langkah sebelumnya: echo $ECRRepositoryServiceOneUri atau echo $ECRRepositoryServiceTwoUri

"containerDefinitions": [ { "name": "nginx", "image": "public.ecr.aws/nginx/nginx:latest", # <----- change to new Uri "cpu": 0,

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:

  1. Buka konsol Amazon ECS di https://console.aws.amazon.com/ecs/v2.

  2. Pada halaman Clusters, pilih cluster.

  3. Pada halaman detail cluster, di bagian Layanan, pilih kotak centang di sebelah layanan, lalu pilih Perbarui.

  4. Agar layanan Anda memulai penerapan baru, pilih Paksa penerapan baru.

  5. Untuk definisi Tugas, pilih keluarga definisi tugas dan revisi terbaru.

  6. Pilih Perbarui.

Ulangi langkah-langkah untuk layanan lainnya.

Administrator AWS, AWS DevOps, DevOps insinyur
TugasDeskripsiKeterampilan 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.

  1. Untuk layanan satu, gunakan perintah berikut:

    container="nginx" ECS_EXEC_TASK_ARN="<TASK ARN>" aws ecs execute-command --cluster $ClusterName \ --task $ECS_EXEC_TASK_ARN \ --container $container \ --interactive \ --command "/bin/bash"
  2. Dalam wadah tugas satu layanan, gunakan perintah berikut untuk memasukkan penyeimbang beban internal url dan port pendengar yang menunjuk ke layanan dua. Kemudian tentukan jalur ke sertifikat klien untuk menguji aplikasi:

    curl -kvs https://<internal-alb-url>:8090 --key /usr/local/share/ca-certificates/client.key --cert /usr/local/share/ca-certificates/client.crt
  3. Dalam wadah tugas dua layanan, gunakan perintah berikut untuk memasukkan penyeimbang beban internal url dan port pendengar yang menunjuk ke service one. Kemudian tentukan jalur ke sertifikat klien untuk menguji aplikasi:

    curl -kvs https://<internal-alb-url>:8080 --key /usr/local/share/ca-certificates/client.key --cert /usr/local/share/ca-certificates/client.crt
    catatan

    -kBendera dalam perintah curl (sebagai bagian dari-kvs) menonaktifkan validasi sertifikat SSL. Anda dapat menghapus tanda ini saat menggunakan sertifikat SSL yang cocok dengan nama domain Anda, memungkinkan validasi sertifikat yang tepat.

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