[Update] การตั้งค่า Free SSL กับ DNS ใน CloudFront โดยใช้ ACM กับ Route 53
การเปลี่ยนชื่อ Domain name (DNS) เว็บไซต์ด้วย Route 53 จำเป็นต้องทำการ Request SSL Certificate และกำหนดค่า DNS ให้ถูกต้อง ซึ่ง AWS มีเครื่องมืออย่าง AWS Certificate Manager (ACM) และ Amazon Route 53 ที่ช่วยให้การตั้งค่าเหล่านี้เป็นเรื่องง่ายและรวดเร็ว โดยครั้งนี้จะพาไปรู้จักขั้นตอนการขอและติดตั้ง SSL ผ่าน ACM และการตั้งค่า DNS ด้วย Route 53 พร้อมคำแนะนำแบบละเอียด เพื่อให้สามารถนำไปปรับใช้และทำงานได้จริง
Amazon Route 53 คืออะไร
Amazon Route 53 คือ บริการ DNS (Domain Name System) ที่สามารถกระจายไปทั่วโลกเนื่องจากสามารถทำงานร่วมกับบริการอื่นๆ ของ AWS ได้ อีกทั้งในกรณีที่ทำการสร้าง Domain Server จากที่อื่น คุณก็ยังสามารถใช้งาน Amazon Route 53 ในการเปลี่ยนชื่อ Domain Name ได้เช่นเดียวกัน

สิ่งที่ต้องมี
Amazon CloudFront
・สร้าง Distribution ใน CloudFront สำหรับแสดงผลเว็บไซต์ที่สร้างจาก EC2 แล้ว
ดูตัวอย่างได้ที่ลิงก์บทความด้านล่างนี้
เป้าหมายการสร้าง Route 53 และ SSL Certificate
แผนผังนี้แสดงการทำงานร่วมกันของ Amazon Route 53, CloudFront และ AWS Certificate Manager เพื่อให้เว็บไซต์สามารถเชื่อมต่อผ่าน HTTPS ได้อย่างปลอดภัย โดย Route 53 ทำหน้าที่จัดการการชี้โดเมน ขณะที่ SSL Certificate จาก ACM ใช้เข้ารหัสข้อมูลระหว่างผู้ใช้และ CloudFront ก่อนส่งต่อไปยังเซิร์ฟเวอร์ EC2

การเปลี่ยน Domain name ด้วย Route 53
ก่อนอื่นให้คัดลอก Distribution domain name จากหน้า Distribution ใน CloudFront เพื่อนำไปเปลี่ยนเป็นชื่อที่ต้องการ
ในตัวอย่างนี้จะใช้เป็นชื่อ tinnakorn-al2023.train.cmthai.click

ไปที่ช่อง Search แล้วค้นหาและเลือก Route 53

เลือก Hosted zones จากเมนูด้านซ้าย แล้วคลิก Hosted zone name ของเรา ครั้งนี้คือ train.cmthai.click

แล้วคลิก Create record

ตั้งค่า Quick create record ตามนี้
・Record name: tinnakorn-al2023 (ป้อนชื่อที่ต้องการ)
・คลิกปุ่ม Alias ให้เลื่อนมาด้านขวาและจะเปลี่ยนเป็นสีฟ้าเพื่อเปิดการใช้งาน
・เลือก Route traffic to: Alias to CloudFront distribution
・วาง Distribution domain name ที่คัดลอกมาลงในช่อง "Route traffic to" เช่น xxxxxxxxxxxxxx.cloudfront.net
・คลิก Create records

ตอนนี้เราได้เปลี่ยนชื่อ Distribution domain name ด้วย Route 53 เสร็จเรียบร้อยแล้ว
มาทดสอบ URL นี้กันโดยคัดลอก Record name เตรียมไว้ ครั้งนี้คือ tinnakorn-al2023.train.cmthai.click

แล้วเปิด URL ตามด้านล่างนี้
https://[Record name]
จะเห็นว่าแสดงเป็นหน้าจอ "403 ERROR" เนื่องจากเราต้อง Request SSL Certificate ในบริการ AWS Certificate Manager ในขั้นตอนถัดไปก่อน

AWS Certificate Manager คืออะไร

AWS Certificate Manager คือ บริการที่ช่วยให้คุณสามารถเตรียมใช้งาน จัดการ และปรับใช้ใบรับรอง Secure Sockets Layer/Transport Layer Security (SSL/TLS) แบบสาธารณะหรือแบบส่วนตัวเพื่อใช้กับบริการของ AWS อีกทั้งค่าธรรมเนียมในการใช้งานฟรี และมีการอัปเดตอัตโนมัติ ทำให้การจัดการง่ายขึ้น
การ Request SSL Certificate ด้วย AWS Certificate Manager
ก่อนอื่นให้คัดลอก Record name จากหน้าจอ Hosted zone บน Route 53 เพื่อนำไปใช้ในการ Request SSL Certificate
โดยตัวอย่างนี้จะเป็นชื่อ tinnakorn-al2023.train.cmthai.click

ไปที่ช่อง Search แล้วค้นหาและเลือก Certificate Manager

เลือกรีเจี้ยน N. Virginia

เลือก List certificates แล้วคลิก Request ด้านขวา

คลิก Next

ป้อน Fully qualified domain name ที่คัดลอกเตรียมไว้ เช่น tinnakorn-al2023.train.cmthai.click

หรือจะ Request SSL Certificate ที่รองรับ Record Name ทั้งหมดที่สร้างไว้ใน Hosted Zone ที่ได้ลงทะเบียนไว้ก็ได้
Fully qualified domain name
・*.train.cmthai.click
・train.cmthai.click
การทำแบบนี้จะทำให้สามารถสร้าง Record Name ใน Hosted Zone บน Route 53 ได้โดยไม่ต้อง Request SSL Certificate ใน AWS Certificate Manager ทุกครั้ง ดังนั้นในครั้งนี้เราจะทำตามขั้นตอนนี้
จากนั้นเลื่อนลงไปด้านล่างสุด แล้วคลิก Request

คลิก Create records in Route 53

คลิก Create records

แล้วจะเข้ามาที่หน้าจอ Request SSL Certificate โดยจะมี Status แสดงเป็น Pending validation

จากนั้นคลิก List certificates แล้วตรวจสอบ Status ของ Certificate ที่สร้างขึ้น
แล้วรอให้ Status เป็น Issued เพียงเท่านี้การ Request SSL Certificate ก็เสร็จสิ้น

มาที่หน้าจอ Hosted zone ใน Route 53 จะเห็นว่า CNAME ถูกสร้างขึ้นที่นี่

การเชื่อมต่อ SSL certificate ใน CloudFront
ก่อนอื่น ให้ไปที่หน้าจอ Hosted Zone ที่ได้ลงทะเบียนไว้ใน Route 53 แล้วคัดลอก Record Name ที่กำหนดไว้สำหรับ CloudFront อีกครั้ง
※ครั้งนี้จะใช้ Record Name ชื่อ tinnakorn-al2023.train.cmthai.click เพื่อเชื่อมต่อ SSL Certificate กับ CloudFront

ไปที่หน้าจอ CloudFront แล้วคลิก Distributions จากเมนูด้านซ้าย และคลิก ID

คลิก Edit ในหัวข้อ Settings

แล้วตั้งค่าตามนี้
・Alternate domain name (CNAME) - optional: คลิก Add item แล้ววาง Record name ที่ คัดลอกมาจากหน้าจอ Hosted zone ใน Route 53 (ครั้งนี้คือ tinnakorn-al2023.train.cmthai.click)
・Custom SSL certificate - optional: เลือก SSL certificate ที่สร้างเตรียมไว้ (ครั้งนี้คือ *.train.cmthai.click)
・เลื่อนลงมาด้านล่างสุด แล้วคลิก Save changes

แล้วจะเห็นว่า "Alternate domain names" และ "Custom SSL certificate" ถูกเพิ่มเข้ามาแล้ว
ในส่วนของ "Alternate domain names" จะใช้เป็น URL สำหรับแสดงหน้าเว็บ ดังนั้นให้คัดลอกเก็บไว้ (ครั้งนี้คือ tinnakorn-al2023.train.cmthai.click)
จากนั้นตรวจสอบ Last modified จะเห็นสถานะว่าเป็น Deploying
ให้รอสักครู่จนกว่า Last modified จะเปลี่ยนเป็นวันที่ปัจจุบัน

กลับมาที่หน้าจอเว็บไซต์ แล้ว Reload อีกครั้ง จะเห็นว่าสามารถแสดงหน้าเว็บไซต์ได้แล้ว

หรือถ้าได้ทำวิธีติดตั้ง PHP 8.2 และ Apache ใน Amazon Linux 2023 บน EC2 นี้ไว้แล้ว สามารถเปิด URL ตามนี้ได้เช่นกัน
https://[Record name]/test.php

สรุป
การตั้งค่า SSL บน CloudFront ด้วย ACM และการกำหนด DNS ผ่าน Route 53 เป็นขั้นตอนสำคัญที่ช่วยเพิ่มความปลอดภัย เสถียรภาพ และภาพลักษณ์ความเป็นมืออาชีพให้กับเว็บไซต์ ทั้งกระบวนการสามารถทำได้ผ่าน AWS Management Console โดยไม่ซับซ้อน
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
POP (Tinnakorn Maneewong) จากบริษัท Classmethod (Thailand) ครับ !






