ความปลอดภัยของ RDS: การเข้ารหัสและกลุ่มพารามิเตอร์
เข้ารหัส RDS ขณะจัดเก็บด้วย KMS ควบคุมการเข้ารหัสระดับการเชื่อมต่อด้วยกลุ่มพารามิเตอร์ และรักษาความปลอดภัยด้วยการยืนยันตัวตน IAM
ความปลอดภัยของ 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 ที่มีอยู่ซึ่งยังไม่ได้เข้ารหัส
เนื่องจากไม่สามารถเปิดใช้การเข้ารหัสกับอินสแตนซ์ที่มีอยู่ได้ ให้ดำเนินการย้ายข้อมูลตามขั้นตอนต่อไปนี้:
- สร้างสแนปช็อตด้วยตนเองจากอินสแตนซ์ที่ยังไม่ได้เข้ารหัส
- คัดลอกสแนปช็อตและเปิดใช้การเข้ารหัสระหว่างการคัดลอก โดยระบุคีย์ KMS
- กู้คืนอินสแตนซ์ฐานข้อมูลใหม่จากสแนปช็อตที่เข้ารหัสแล้ว
- อัปเดตปลายทางแอปพลิเคชันให้ชี้ไปยังอินสแตนซ์ใหม่
- ลบอินสแตนซ์เดิมที่ยังไม่ได้เข้ารหัส
แนวทางนี้ทำให้ระบบหยุดให้บริการชั่วคราว เว้นแต่คุณจะใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เอนจิน RDS และคลาสอินสแตนซ์
- Multi-AZ และการสำรองข้อมูลอัตโนมัติ
- รีดเรพลิกาสำหรับการขยายการอ่าน
- ความปลอดภัยของ RDS: การเข้ารหัสและกลุ่มพารามิเตอร์