DEV Community

Cover image for การมอบอำนาจการจัดการ SubDomain ไปยัง Hostzone ใหม่ข้าม Account ผ่าน Route53

การมอบอำนาจการจัดการ SubDomain ไปยัง Hostzone ใหม่ข้าม Account ผ่าน Route53

Public Domain Name ถือเป็นส่วนหนึ่งของ Brand Identify ที่สำคัญมาก ในการทำ Website หรือ Application ต่าง ๆ ซึ่งมีผลต่อการที่จะทำให้ผู้ใช้งานรับทราบได้ว่า Website นั้น ๆ เป็นของทีมของเราหรือไม่ รวมถึงเป็นหนึ่งในจุดตรวจสอบว่า Link ที่กดเป็น Phishing หรือไม่

สำหรับทีมที่มีขนาดใหญ่ขึ้น มีระบบต่าง ๆ เพิ่มขึ้นมา จำเป็นต้องใช้ public domain name แยกย่อยออกไปจำนวนมาก ไม่ว่าจะเป็นของผลิตภัณฑ์หรือของทีมต่าง ๆ ภายในการจะจัดการ DNS ที่จุดเดียว อาจจะต้องมีขั้นตอนการขออนุญาตหรือรอเพื่อให้ฝ่ายที่ดูแลเป็นคนจัดการให้ เพื่อความปลอดภัยหรือความเหมาะสมของการใช้งานชื่อที่เป็น identity ขององค์กร ซึ่งส่งผลให้การคิดหรือทำสิ่งใหม่ ๆ ทำได้ยากขึ้นไปด้วย ดังนั้นบทความนี้จะเสนอทางเลือกง่าย ๆ ของการจัดการ Domain Name ภายในองค์กร

หมายเหตุ การจัดการ Domain ที่กล่าวถึงในทบความนี้จะยกเว้นเรื่องของ Policy ของแต่ละองค์กร โดยคำนึงถึงเรื่องความสะดวกในการพัฒนาเป็นหลัก

เมื่อองค์กรมีขนาดใหญ่ขึ้น มีการแยกทีมย่อยออกไป สำหรับองค์กรที่ใช้ AWS มักจะมีการสร้าง Organization และสร้าง Account แยกจากกันออกไปตามทีมต่าง ๆ ซึ่งในสถานการณ์ที่มีองค์กรมี public domain เดียว การที่จะจัดการโดยส่วนมากจะมีวิธีดังต่อไปนี้

  1. Domain อยู่ภายใต้การควบคุมของ Account หลักที่เดียว ซึ่งการจัดการจะมีรูปแบบที่นิยมกันดังนี้
    • มีคนหรือทีมที่จัดการดูแล DNS แยกออกมาเพื่อให้ทีมอื่นขอให้จัดการให้
    • สร้าง Assume Role เพื่อให้แต่ละทีมเข้ามาจัดการ DNS โดยตรง
  2. Subdomain delegation เป็นการมอบอำนาจการควบคุม subdomain ตั้งแต่ level 3 เป็นต้นไปให้กับ DNS อื่น เพื่อให้สามารถควบคุม subdomain ย่อยลงไปได้อีก Domain Level

ซึ่งวิธีที่บทความนี้กล่าวถึงคือ Subdomain delegation ด้วย Route53 ระหว่าง 2 AWS Accounts ซึ่งวิธีการดังกล่าวเป็นมาตรฐานของ DNS สามารถทำได้กับ DNS อื่นด้วยเช่นกัน

การเตรียมพร้อม

  1. 2 AWS Accounts คือ Domain Account และ Subdomain Account
  2. Domain name ที่ใช้บริการ DNS บน hosted zone ของ Route53 บน Domain Account ซึ่งตัวอย่างนี้จะใช้ lawlity.com
  3. หน้า HTML เพื่อใช้ทดสอบบน Subdomain Account โดยสร้าง S3 static website ชื่อ bucket dns.sub.lawlity.com ไว้เพื่อทดสอบ ใช้อันนี้ก็ได้ ในการสร้าง S3 Static Website เพื่อเชื่อมกับ DNS record ด้วย Alias จะต้องสร้าง bucket name ให้ตรงกับ dns record ที่ต้องการ เช่น กรณีตัวอย่างจะสร้าง S3 bucket ชื่อ dns.sub.lawlity.com S3 Bucket Sample Static Site

ค่าใช้จ่ายเพิ่มเติม

  1. ค่า Hosted zone บน Subdomain Account 0.50 USD ต่อเดือน
  2. ค่า Query 0.40 USD ต่อ 1 ล้าน Queries ต่อเดือน

ขั้นตอนการสร้าง Subdomain Delegation

ในตัวอย่างจะเป็นการสร้างมอบการควบคุม sub.lawlity.com จาก Domain Account ไปให้ Subdomain Account และสร้าง A record alias เพื่อแสดง Static Website ที่สร้างไว้

  1. สร้าง Public hosted zone บน Route53 ใน Subdomain Account Create public hosted zone
  2. เมื่อสร้างเสร็จแล้วจะมี NS และ SOA record โดยค่า NS Record คือค่าที่เราจะนำไปใช้ต่อ บน Domain Account ในขั้นตอนที่ 3 Default record for hosted zone
  3. เปลี่ยนไป Route53 ของ Domain Account และสร้าง Record ใหม่ประเภท NS โดยใส่ค่าเป็น NS ของ public hosted zone ที่สร้างไว้ในขั้นตอนที่ 2 Add NS Record to domain account
  4. เปลี่ยนกลับมา Route53 ของ Subdomain Account เพื่อทำการสร้าง Alias Record เพื่อชี้ไปยัง S3 Static Website เตรียมไว้ Create Alias record
  5. ทำการทดสอบเข้า lv4 domain dns.sub.lawlity.com ที่สร้างไว้ในขั้นตอนที่ 4 (ในกรณีที่ยังเข้าไม่ได้ต้องรอซักพักเพื่อให้ DNS ทำการอัพเดทก่อน) Visit new subdomain

สรุปประโยชน์ของการทำ Subdomain Delegation

ด้วยวิธีการง่าย ๆ ข้างต้นโดยใช้ความสามารถพื้นฐานของ DNS ที่หลาย ๆ คนยังไม่เคยใช้งานอย่างการทำ Subdomain Delegation จะช่วยให้สามารถกระจายการจัดการ Subdomain ให้กับทีม หรือ App ต่าง ๆ ในองค์กร ทำให้การติดตั้งระบบ การปรับเปลียนแก้ไขหรือการพัฒนาระบบใหม่ ๆ สามารถทำได้รวดเร็วขึ้น โดยที่การควบคุม Domain หลักที่เป็น identity ขององค์กร ยังอยู่ภายใต้ Account หลักตามเดิมได้

Discussion (1)

Collapse
chatchaikomrangded profile image
Chatchai Komrangded (Bas)

Great one!