AWS Solutions Architect · บทเรียน

ความปลอดภัยของ RDS: การเข้ารหัสและกลุ่มพารามิเตอร์

เข้ารหัส RDS ขณะจัดเก็บด้วย KMS ควบคุมการเข้ารหัสระดับการเชื่อมต่อด้วยกลุ่มพารามิเตอร์ และรักษาความปลอดภัยด้วยการยืนยันตัวตน IAM

บทเรียน 4 จาก 413 ขั้นตอน

ความปลอดภัยของ RDS: การเข้ารหัสและกลุ่มพารามิเตอร์ เป็นบทเรียน AWS Solutions Architect ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AWS Solutions Architect และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน

การเข้ารหัส RDS ขณะจัดเก็บ

RDS รองรับ การเข้ารหัสขณะจัดเก็บโดยใช้ AWS Key Management Service (KMS) เมื่อเปิดใช้การเข้ารหัสขณะสร้างอินสแตนซ์ DB ข้อมูลทั้งหมดในโวลุ่ม EBS พื้นฐาน การสำรองข้อมูลอัตโนมัติ สแนปช็อต และ Read Replicas จะถูกเข้ารหัสโดยใช้คีย์ KMS ที่ระบุ

ต้องเปิดใช้การเข้ารหัส ขณะสร้าง—คุณไม่สามารถเข้ารหัสอินสแตนซ์ที่ไม่มีการเข้ารหัสอยู่เดิมในตำแหน่งเดิมได้ วิธีแก้คือสร้างสแนปช็อตที่ไม่ได้เข้ารหัส คัดลอกโดยเปิดใช้การเข้ารหัส แล้วกู้คืนจากสแนปช็อตที่เข้ารหัส คีย์ KMS อาจเป็นคีย์ที่ AWS จัดการ หรือ Customer-Managed Key (CMK) เพื่อการควบคุมและการตรวจสอบเพิ่มเติม

# Create an encrypted RDS instance
aws rds create-db-instance \
  --db-instance-identifier mydb-encrypted \
  --engine mysql \
  --db-instance-class db.t3.micro \
  --master-username admin \
  --master-user-password MyPass123! \
  --allocated-storage 20 \
  --storage-encrypted \
  --kms-key-id arn:aws:kms:us-east-1:123456789:key/my-key-id

การเข้ารหัสอินสแตนซ์ RDS ที่มีอยู่ซึ่งยังไม่ได้เข้ารหัส

เนื่องจากไม่สามารถเปิดใช้การเข้ารหัสกับอินสแตนซ์ที่มีอยู่ได้ ให้ดำเนินการย้ายข้อมูลตามขั้นตอนต่อไปนี้:

  1. สร้างสแนปช็อตด้วยตนเองจากอินสแตนซ์ที่ยังไม่ได้เข้ารหัส
  2. คัดลอกสแนปช็อตและเปิดใช้การเข้ารหัสระหว่างการคัดลอก โดยระบุคีย์ KMS
  3. กู้คืนอินสแตนซ์ฐานข้อมูลใหม่จากสแนปช็อตที่เข้ารหัสแล้ว
  4. อัปเดตปลายทางแอปพลิเคชันให้ชี้ไปยังอินสแตนซ์ใหม่
  5. ลบอินสแตนซ์เดิมที่ยังไม่ได้เข้ารหัส

แนวทางนี้ทำให้ระบบหยุดให้บริการชั่วคราว เว้นแต่คุณจะใช้ DMS เพื่อรักษาการซิงโครไนซ์อินสแตนซ์ใหม่ที่เข้ารหัสแล้วก่อนสลับไปใช้งานจริง

# Copy snapshot with encryption enabled
aws rds copy-db-snapshot \
  --source-db-snapshot-identifier mydb-unencrypted-snap \
  --target-db-snapshot-identifier mydb-encrypted-snap \
  --kms-key-id alias/aws/rds

การเข้ารหัสข้อมูลระหว่างส่งด้วย SSL/TLS

RDS เข้ารหัสข้อมูลระหว่างส่งโดยใช้ SSL/TLS กลไกฐานข้อมูลแต่ละชนิดมีใบรับรอง CA ให้ดาวน์โหลด ซึ่งไดรเวอร์ไคลเอ็นต์ของคุณใช้ตรวจสอบตัวตนของเซิร์ฟเวอร์ หากต้องการบังคับใช้การเชื่อมต่อ SSL ให้กำหนดค่ากลไกฐานข้อมูลให้ปฏิเสธการเชื่อมต่อที่ไม่ได้เข้ารหัส

สำหรับ MySQL ให้ตั้งค่าพารามิเตอร์ require_secure_transport = ON ในกลุ่มพารามิเตอร์ สำหรับ PostgreSQL ให้ตั้งค่า ssl = 1 และอาจตั้งค่า rds.force_ssl = 1 เพื่อปฏิเสธการเชื่อมต่อที่ไม่ใช่ SSL ทั้งหมด ไดรเวอร์ฐานข้อมูล Java และ Python จำนวนมากยังรองรับพารามิเตอร์สตริงการเชื่อมต่อ sslmode=require ด้วย

# Connect to RDS MySQL over SSL
mysql -h mydb.abcd1234.us-east-1.rds.amazonaws.com \
  -u admin -p \
  --ssl-ca=rds-ca-2019-root.pem \
  --ssl-verify-server-cert

กลุ่มพารามิเตอร์คืออะไร

กลุ่มพารามิเตอร์ คือชุดการตั้งค่าการกำหนดค่ากลไกฐานข้อมูลที่ตั้งชื่อไว้และนำไปผูกกับอินสแตนซ์ RDS โดยเป็นสิ่งเทียบเท่ากับการแก้ไข my.cnf บน MySQL หรือ postgresql.conf บน PostgreSQL แต่ AWS เป็นผู้จัดการและจัดรุ่นแยกตามตระกูลกลไกฐานข้อมูล

AWS มีกลุ่มพารามิเตอร์เริ่มต้นสำหรับฐานข้อมูลแต่ละรุ่น แต่ไม่สามารถแก้ไขการตั้งค่าในกลุ่มดังกล่าวได้ หากต้องการปรับแต่งพารามิเตอร์ ให้สร้าง กลุ่มพารามิเตอร์แบบกำหนดเอง แก้ไขพารามิเตอร์ที่ต้องการ แล้วเชื่อมโยงกลุ่มนั้นกับอินสแตนซ์ฐานข้อมูล การเปลี่ยนแปลงพารามิเตอร์แบบคงที่ต้องรีบูต ส่วนพารามิเตอร์แบบไดนามิกมีผลทันที

# Create a custom parameter group
aws rds create-db-parameter-group \
  --db-parameter-group-name my-mysql8-params \
  --db-parameter-group-family mysql8.0 \
  --description 'Custom MySQL 8.0 parameters'

การแก้ไขการตั้งค่ากลุ่มพารามิเตอร์

หลังจากสร้างกลุ่มพารามิเตอร์แบบกำหนดเองแล้ว คุณสามารถแก้ไขพารามิเตอร์แต่ละรายการได้โดยใช้คำสั่ง CLI modify-db-parameter-group หรือคอนโซล พารามิเตอร์มีวิธีนำไปใช้: ทันที (มีผลโดยไม่ต้องรีบูต) หรือ รอรีบูต (มีผลหลังจากอินสแตนซ์เริ่มทำงานใหม่ครั้งถัดไปเท่านั้น)

พารามิเตอร์สำคัญที่ควรรู้สำหรับการสอบ ได้แก่ max_connections (จำกัดจำนวนการเชื่อมต่อพร้อมกัน), innodb_buffer_pool_size (ขนาดแคชในหน่วยความจำของ MySQL), log_bin_trust_function_creators (อนุญาตฟังก์ชันที่จัดเก็บไว้ซึ่งเขียนลงบันทึกไบนารี) และ rds.force_ssl (บังคับใช้ SSL สำหรับ PostgreSQL)

# Force SSL in a PostgreSQL parameter group
aws rds modify-db-parameter-group \
  --db-parameter-group-name my-postgres-params \
  --parameters 'ParameterName=rds.force_ssl,ParameterValue=1,ApplyMethod=immediate'

กลุ่มตัวเลือกสำหรับคุณสมบัติเพิ่มเติม

กลุ่มตัวเลือก คล้ายกับกลุ่มพารามิเตอร์ แต่ใช้ควบคุมคุณสมบัติเสริมของกลไกฐานข้อมูลแทนการปรับแต่งการกำหนดค่า โดยส่วนใหญ่ใช้กับ Oracle และ SQL Server เพื่อเปิดใช้คุณสมบัติต่าง ๆ เช่น Oracle Application Express (APEX), SQL Server Transparent Data Encryption (TDE) หรือการตรวจสอบสิทธิ์ Active Directory ของ SQL Server

ตัวเลือกแต่ละรายการในกลุ่มตัวเลือกอาจมีการตั้งค่าเป็นของตนเอง กลุ่มตัวเลือกจัดรุ่นแยกตามตระกูลกลไกฐานข้อมูล และต้องเชื่อมโยงกับอินสแตนซ์ฐานข้อมูล กลไกฐานข้อมูลแบบโอเพนซอร์สส่วนใหญ่ (MySQL, PostgreSQL, MariaDB) แทบไม่จำเป็นต้องใช้กลุ่มตัวเลือกแบบกำหนดเอง

การตรวจสอบสิทธิ์ฐานข้อมูลด้วย IAM

RDS รองรับการตรวจสอบสิทธิ์ฐานข้อมูลด้วย IAM สำหรับกลไก MySQL และ PostgreSQL แทนที่จะใช้ชื่อผู้ใช้และรหัสผ่านแบบคงที่ แอปพลิเคชันของคุณจะรับบทบาท IAM แล้วสร้างโทเค็นตรวจสอบสิทธิ์ชั่วคราว (ใช้งานได้ 15 นาที) โดยใช้คำสั่ง AWS CLI generate-db-auth-token หรือการเรียกใช้ SDK

ประโยชน์ ได้แก่ ไม่ต้องใช้รหัสผ่านฐานข้อมูลที่มีอายุยาวนาน การหมุนเวียนข้อมูลรับรองโดยอัตโนมัติผ่านนโยบาย IAM และการควบคุมการเข้าถึงจากส่วนกลาง คุณสมบัตินี้ต้องเปิดใช้ --enable-iam-database-authentication บนอินสแตนซ์ และสร้างผู้ใช้ฐานข้อมูลที่แมปกับบทบาท IAM

# Generate an RDS IAM auth token
aws rds generate-db-auth-token \
  --hostname mydb.abcd1234.us-east-1.rds.amazonaws.com \
  --port 3306 \
  --username mydbuser \
  --region us-east-1

การผสานรวม Secrets Manager กับ RDS

AWS Secrets Manager สามารถจัดเก็บและหมุนเวียนรหัสผ่านหลักของ RDS รวมถึงข้อมูลรับรองของแอปพลิเคชันโดยอัตโนมัติ เมื่อเปิดใช้การหมุนเวียน Secrets Manager จะเรียกใช้ฟังก์ชัน Lambda เพื่ออัปเดตรหัสผ่านฐานข้อมูลและจัดเก็บค่าใหม่ไว้ในข้อมูลลับ แอปพลิเคชันของคุณจะดึงค่าข้อมูลลับล่าสุดผ่าน API ของ Secrets Manager จึงมีข้อมูลรับรองที่ใช้งานได้เสมอ

เมื่อสร้างอินสแตนซ์ RDS ในคอนโซล คุณสามารถเลือกให้ Secrets Manager จัดการข้อมูลรับรองหลักได้ วิธีนี้ช่วยขจัดรหัสผ่านที่เขียนตายตัวไว้ในโค้ดหรือตัวแปรสภาพแวดล้อม

# Retrieve RDS credentials from Secrets Manager
aws secretsmanager get-secret-value \
  --secret-id rds!db-1234abcd-5678-efgh-ijkl-mnopqrstuvwx \
  --query SecretString \
  --output text | python3 -m json.tool

การควบคุม VPC และกลุ่มความปลอดภัย

อินสแตนซ์ RDS ทำงานภายใน VPC และใช้กลุ่มซับเน็ต DB เพื่อกำหนดว่าจะแต่งตั้งอินสแตนซ์ไว้ในซับเน็ตใดได้บ้าง (ครอบคลุมหลาย AZ) แนวทางปฏิบัติที่ดีที่สุดคือวาง RDS ไว้ในซับเน็ตส่วนตัวที่ไม่มีการเข้าถึงอินเทอร์เน็ตโดยตรง

กลุ่มความปลอดภัยควบคุมว่าที่อยู่ IP และกลุ่มความปลอดภัยอื่นใดจะเข้าถึงพอร์ต DB ได้บ้าง (เช่น TCP 3306 สำหรับ MySQL) กลุ่มความปลอดภัยของชั้นแอปพลิเคชันควรเป็นแหล่งที่อนุญาตเพียงแหล่งเดียวในกลุ่มความปลอดภัยของ RDS เพื่อบังคับใช้สิทธิ์เท่าที่จำเป็นในระดับเครือข่าย อย่ากำหนด 0.0.0.0/0 (การรับส่งข้อมูลทั้งหมด) เป็นกฎขาเข้าของกลุ่มความปลอดภัย RDS เด็ดขาด

การตรวจสอบที่มีประสิทธิภาพสูงและบันทึกการตรวจสอบ

Enhanced Monitoring เผยแพร่เมตริกระดับระบบปฏิบัติการ (CPU, หน่วยความจำ, ระบบไฟล์, I/O ดิสก์) ไปยัง CloudWatch Logs ทุก 1–60 วินาที ทำให้มีความละเอียดมากกว่าเมตริก CloudWatch เริ่มต้นที่รายงานทุก 60 วินาที โดยใช้เอเจนต์ที่ทำงานบนโฮสต์ DB และพร้อมใช้งานกับกลไกทั้งหมด ยกเว้นโหมดมิเรอร์ของ SQL Server

บันทึกการตรวจสอบฐานข้อมูล (บันทึกคำสั่งค้นหาทั่วไปและบันทึกคำสั่งค้นหาที่ทำงานช้าสำหรับ MySQL; pgaudit สำหรับ PostgreSQL) สามารถเผยแพร่ไปยัง CloudWatch Logs เพื่อวิเคราะห์การปฏิบัติตามข้อกำหนดได้ ให้เปิดใช้บันทึกเหล่านี้ผ่านกลุ่มพารามิเตอร์ จากนั้นกำหนดค่าการส่งออกบันทึกในคอนโซล RDS ภายใต้ การส่งออกบันทึก

# Enable PostgreSQL logs export to CloudWatch
aws rds modify-db-instance \
  --db-instance-identifier mydb \
  --cloudwatch-logs-export-configuration 'EnableLogTypes=[postgresql,upgrade]' \
  --apply-immediately

สรุปแนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัย

แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยของ RDS ที่สำคัญสำหรับการสอบ SAA-C03:

  • เปิดใช้การเข้ารหัสข้อมูลขณะจัดเก็บด้วยคีย์ KMS CMK เมื่อสร้างอินสแตนซ์
  • บังคับใช้SSL/TLS ระหว่างส่งข้อมูลผ่านการตั้งค่ากลุ่มพารามิเตอร์
  • วางอินสแตนซ์ไว้ในซับเน็ตส่วนตัวที่มีกลุ่มความปลอดภัยแบบจำกัด
  • ใช้การตรวจสอบสิทธิ์ฐานข้อมูลด้วย IAM หรือ Secrets Manager เพื่อหลีกเลี่ยงรหัสผ่านแบบคงที่
  • เปิดใช้CloudTrail เพื่อบันทึกการเรียกใช้ API ของ RDS และCloudWatch Logs สำหรับบันทึกการตรวจสอบฐานข้อมูล
  • ใช้กฎ AWS Config (เช่น rds-instance-public-access-check) เพื่อตรวจหาการกำหนดค่าที่ไม่ถูกต้อง

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจแนวคิด AWS Solutions Architect (SAA-C03) จากบทเรียนนี้

ทบทวนบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า การเข้ารหัสข้อมูลขณะจัดเก็บของ RDS ใช้ KMS และต้องเปิดใช้ตั้งแต่ตอนสร้าง กลุ่มพารามิเตอร์ควบคุมการกำหนดค่ากลไกฐานข้อมูล รวมถึงการบังคับใช้ SSL/TLS ระหว่างส่งข้อมูล และการตรวจสอบสิทธิ์ฐานข้อมูลด้วย IAM กับ Secrets Manager ช่วยขจัดรหัสผ่านฐานข้อมูลแบบคงที่ บทถัดไปเราจะสำรวจตาราง รายการ และการออกแบบคีย์หลักของ DynamoDB

เริ่มต้นได้ฟรี

เรียนรู้ AWS Solutions Architect ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “ความปลอดภัยของ RDS: การเข้ารหัสและกลุ่มพารามิเตอร์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ความปลอดภัยของ RDS: การเข้ารหัสและกลุ่มพารามิเตอร์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AWS Solutions Architect ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AWS Solutions Architect มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ความปลอดภัยของ RDS: การเข้ารหัสและกลุ่มพารามิเตอร์”

เข้ารหัส RDS ขณะจัดเก็บด้วย KMS ควบคุมการเข้ารหัสระดับการเชื่อมต่อด้วยกลุ่มพารามิเตอร์ และรักษาความปลอดภัยด้วยการยืนยันตัวตน IAM คุณปฏิบัติ AWS Solutions Architect ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AWS Solutions Architect หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AWS Solutions Architect บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ความปลอดภัยของ RDS: การเข้ารหัสและกลุ่มพารามิเตอร์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AWS Solutions Architect นี้ได้ไหม

ได้ บทเรียน AWS Solutions Architect ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เอนจิน RDS และคลาสอินสแตนซ์
  2. Multi-AZ และการสำรองข้อมูลอัตโนมัติ
  3. รีดเรพลิกาสำหรับการขยายการอ่าน
  4. ความปลอดภัยของ RDS: การเข้ารหัสและกลุ่มพารามิเตอร์
← กลับไปที่ AWS Solutions Architect