ข้อมูลลับแบบไดนามิกและการเช่า
ข้อมูลรับรองอายุสั้นที่หมดอายุโดยอัตโนมัติ
ข้อมูลลับแบบไดนามิกและการเช่า เป็นบทเรียน Cyber Security Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cyber Security Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
ข้อมูลลับแบบคงที่เทียบกับแบบไดนามิก
ข้อมูลลับแบบคงที่คือข้อมูลที่สร้างขึ้นครั้งเดียวและนำกลับมาใช้ซ้ำอย่างไม่มีกำหนด เช่น รหัสผ่านฐานข้อมูลเดียวที่บริการสิบรายการใช้ร่วมกันเป็นเวลาหลายปี ข้อมูลลับแบบคงที่เป็นทั้งค่าเริ่มต้นและปัญหา เพราะมีอายุยาวนาน ถูกแบ่งปันอย่างกว้างขวาง และหมุนเวียนได้ยาก
ข้อมูลลับแบบไดนามิกถูกสร้างขึ้นตามคำขอ มีค่าเฉพาะสำหรับผู้ใช้บริการรายเดียว และหมดอายุโดยอัตโนมัติ แทนที่จะจัดเก็บรหัสผ่าน ห้องนิรภัยจะสร้างข้อมูลรับรองใหม่เอี่ยมทุกครั้งที่มีการร้องขอ
การเปลี่ยนแปลงเพียงข้อเดียวนี้ช่วยแก้ส่วนที่ยากที่สุดของการจัดการข้อมูลลับ นั่นคือการหมุนเวียนกลายเป็นเรื่องอัตโนมัติ และขอบเขตความเสียหายจากการรั่วไหลใด ๆ ลดลงจนเกือบเป็นศูนย์
วิธีทำงานของข้อมูลลับแบบไดนามิก
ข้อมูลลับแบบไดนามิกกำหนดให้ห้องนิรภัยมีสิทธิ์การเข้าถึงระดับสูงในระบบส่วนหลัง กระบวนการสำหรับฐานข้อมูลมีดังนี้:
- ผู้ดูแลระบบกำหนดค่าห้องนิรภัยด้วยข้อมูลรับรองฐานข้อมูลระดับรากและแม่แบบการสร้าง
- แอปพลิเคชันยืนยันตัวตนและร้องขอข้อมูลรับรอง
- ห้องนิรภัยเรียกใช้
CREATE USERบนฐานข้อมูล แล้วส่งคืนชื่อผู้ใช้และรหัสผ่านชุดใหม่ - เมื่อสัญญาเช่าหมดอายุ ห้องนิรภัยจะเรียกใช้
DROP USERโดยอัตโนมัติ
แอปพลิเคชันจะไม่เห็นรหัสผ่านที่มีอายุยาวนาน แต่จะได้รับข้อมูลรับรองชั่วคราวที่ผูกกับข้อมูลระบุตัวตนและสัญญาเช่าของตน
# Configure Vault's database engine with a creation statement
vault write database/roles/billing-readonly \
db_name=appdb \
creation_statements="CREATE ROLE \"{{name}}\" LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON billing TO \"{{name}}\";" \
default_ttl="1h" max_ttl="24h"การขอข้อมูลรับรองแบบไดนามิก
เมื่อแอปพลิเคชันต้องการเข้าถึงฐานข้อมูล ก็จะขอข้อมูลรับรองจากห้องนิรภัย การตอบกลับประกอบด้วยชื่อผู้ใช้และรหัสผ่านที่สร้างขึ้นใหม่และไม่ซ้ำกัน พร้อมสัญญาเช่าที่ระบุว่าข้อมูลรับรองนี้ใช้งานได้นานเท่าใด
ผู้ใช้บริการแต่ละรายจะได้รับข้อมูลรับรองของตนเอง หากพ็อดสองรายการของบริการเดียวกันเริ่มทำงาน พวกมันจะได้รับชื่อผู้ใช้ที่แตกต่างกันสองชื่อ ทำให้สามารถตรวจสอบแยกตามผู้ใช้บริการได้ในระดับฐานข้อมูล
vault read database/creds/billing-readonly
# Example response:
# lease_id database/creds/billing-readonly/abc123
# lease_duration 1h
# password A1b-2Cd3-temp-xyz
# username v-approle-billing-9f3a2สัญญาเช่า: ข้อตกลงเรื่องอายุการใช้งาน
สัญญาเช่าคือข้อตกลงที่ระบุว่าข้อมูลลับนี้ใช้ได้เป็นเวลานานเท่าใด ข้อมูลลับแบบไดนามิกทุกรายการมีTTL (อายุการใช้งาน) และอาจมีTTL สูงสุด
- ระยะเวลาเริ่มต้น ระยะเวลาที่ข้อมูลรับรองใช้งานได้ก่อนหมดอายุ
- ระยะเวลาสูงสุด ขีดจำกัดสูงสุดโดยสมบูรณ์ แม้จะมีการต่ออายุก็ตาม
เมื่อสัญญาเช่าหมดอายุ ห้องนิรภัยจะเพิกถอนข้อมูลรับรอง โดยลบผู้ใช้ฐานข้อมูลนั้นออกจริง ๆ การหมดอายุไม่ใช่เพียงเครื่องหมาย แต่จะเรียกใช้การล้างข้อมูลจริง นี่คือสิ่งที่ทำให้ข้อมูลลับแบบไดนามิกที่รั่วไหลสามารถฟื้นฟูตัวเองได้ ข้อมูลรับรองที่ถูกขโมยจะใช้การไม่ได้ภายในช่วง TTL
การต่ออายุและการเพิกถอนสัญญาเช่า
แอปพลิเคชันที่ทำงานต่อเนื่องเป็นเวลานานกว่าสัญญาเช่าต้องต่ออายุสัญญาเช่าก่อนหมดอายุ การต่ออายุจะขยาย TTL ได้จนถึง TTL สูงสุด หลังจากนั้นแอปพลิเคชันต้องร้องขอข้อมูลรับรองชุดใหม่
ผู้ปฏิบัติงานยังสามารถเพิกถอนสัญญาเช่าได้ทันที ซึ่งทำหน้าที่เป็นสวิตช์หยุดฉุกเฉินเมื่อเกิดเหตุการณ์ผิดปกติ การเพิกถอนสัญญาเช่าจะลบข้อมูลรับรองพื้นฐานทันที โดยไม่คำนึงถึง TTL ที่เหลืออยู่
คุณยังสามารถเพิกถอนสัญญาเช่าทั้งหมดภายใต้คำนำหน้าเดียวกัน เพื่อหยุดการเข้าถึงของบริการหรือสภาพแวดล้อมทั้งหมดได้ทันที
# Renew a lease before it expires
vault lease renew database/creds/billing-readonly/abc123
# Revoke a single lease immediately (incident kill switch)
vault lease revoke database/creds/billing-readonly/abc123
# Revoke every lease under a path prefix
vault lease revoke -prefix database/creds/billing-readonlyนอกเหนือจากฐานข้อมูล
ข้อมูลลับแบบไดนามิกไม่ได้จำกัดอยู่แค่ฐานข้อมูล ห้องนิรภัยและเครื่องมือที่คล้ายกันสามารถสร้างข้อมูลรับรองอายุสั้นสำหรับระบบต่าง ๆ ได้มากมาย:
- IAM บนคลาวด์ คีย์การเข้าถึงชั่วคราวของ AWS/GCP/อาซัวร์ผ่านการสวมบทบาทในรูปแบบ STS
- SSH ใบรับรอง SSH อายุสั้นที่ลงนามแล้ว แทนคีย์แบบคงที่
- PKI/TLS ใบรับรองที่ออกให้ตามคำขอและมีอายุการใช้งานสั้น
- RabbitMQ, MongoDB, คอนซูล ข้อมูลรับรองบริการแบบชั่วคราว
รูปแบบนี้เหมือนกันทุกระบบ: ร้องขอ ใช้งานช่วงสั้น ๆ และหมดอายุโดยอัตโนมัติ คีย์คลาวด์แบบคงที่ที่มีอายุยาวนานเป็นแหล่งที่มาของการรั่วไหลอยู่บ่อยครั้ง ข้อมูลรับรอง IAM แบบไดนามิกช่วยกำจัดคีย์เหล่านั้น
# Generate temporary AWS credentials scoped to a role
vault read aws/creds/deploy-role
# returns short-lived access_key, secret_key, security_token
# Sign an SSH key for short-lived access (valid minutes, not forever)
vault write ssh/sign/admin public_key=@id_ed25519.pub ttl=15mเหตุใดข้อมูลลับแบบไดนามิกจึงลดขอบเขตความเสียหาย
ลองพิจารณาข้อมูลรับรองที่รั่วไหลภายใต้แต่ละรูปแบบ:
- แบบคงที่ รหัสผ่านจะใช้ได้จนกว่ามนุษย์จะสังเกตเห็น หมุนเวียนรหัสผ่าน และอัปเดตให้ผู้ใช้บริการทุกราย ช่วงเวลาที่เปิดเผยข้อมูลจึงอาจนานหลายวันหรือหลายเดือน
- แบบไดนามิก ข้อมูลรับรองจะหมดอายุภายใน TTL (มักอยู่ระหว่างไม่กี่นาทีถึงหนึ่งชั่วโมง) และถูกจำกัดขอบเขตไว้สำหรับผู้ใช้บริการรายเดียวด้วยสิทธิ์ขั้นต่ำ ช่วงเวลาที่เปิดเผยข้อมูลจึงสั้นมากและความเสียหายถูกจำกัดไว้
ข้อมูลลับแบบไดนามิกเปลี่ยนการหมุนเวียนจากโครงการที่ต้องทำด้วยตนเองและยุ่งยากให้กลายเป็นคุณสมบัติอัตโนมัติที่ทำงานอย่างต่อเนื่องของระบบ
ข้อแลกเปลี่ยนของข้อมูลรับรองระดับราก
ข้อมูลลับแบบไดนามิกมีประสิทธิภาพมาก แต่กำหนดให้ห้องนิรภัยต้องถือข้อมูลรับรองระดับรากที่มีสิทธิ์สูงมากสำหรับระบบส่วนหลังแต่ละระบบที่สามารถใช้สร้างผู้ใช้ที่ห้องนิรภัยออกให้ได้ นี่ทำให้ความเสี่ยงกระจุกตัวอยู่ที่ห้องนิรภัย
มาตรการลดความเสี่ยง:
- หมุนเวียนข้อมูลรับรองระดับรากเองด้วย เพื่อให้แม้แต่ห้องนิรภัยก็ไม่เก็บรหัสผ่านผู้ดูแลระบบเดิมไว้
- จำกัดขอบเขตบัญชีระดับรากให้มีเฉพาะสิทธิ์ที่จำเป็นต่อการสร้างและลบผู้ใช้เท่านั้น
- แยกและตรวจสอบเครื่องแม่ข่ายของห้องนิรภัยอย่างเข้มงวด เนื่องจากตอนนี้เครื่องดังกล่าวเป็นเป้าหมายที่มีมูลค่าสูง
ห้องนิรภัยสามารถหมุนเวียนข้อมูลรับรองระดับรากของตนเองได้ ดังนั้นหลังจากตั้งค่าแล้วจึงไม่มีมนุษย์คนใดรู้ข้อมูลดังกล่าว
# After configuring the engine, rotate the root credential
# so even operators no longer know the original password
vault write -force database/rotate-root/appdbการจัดการการหมดอายุในโค้ดแอปพลิเคชัน
แอปพลิเคชันต้องเขียนให้รองรับการเปลี่ยนแปลงข้อมูลรับรอง เมื่อใช้ข้อมูลลับแบบคงที่ โค้ดจะอ่านรหัสผ่านเพียงครั้งเดียวตอนเริ่มต้น แต่เมื่อใช้ข้อมูลลับแบบไดนามิก โค้ดต้อง:
- ดึงข้อมูลรับรองและจดจำ TTL ของสัญญาเช่า
- ต่ออายุสัญญาเช่า หรือดึงข้อมูลรับรองชุดใหม่ก่อนหมดอายุ
- เชื่อมต่อใหม่อย่างเหมาะสมเมื่อข้อมูลรับรองเดิมถูกเพิกถอน
รูปแบบที่ใช้กันทั่วไปคือเอเจนต์ไซด์คาร์ที่จัดการวงจรชีวิตของสัญญาเช่าและเขียนไฟล์ข้อมูลลับภายในเครื่องใหม่ เพื่อให้แอปพลิเคชันเพียงโหลดการตั้งค่าใหม่ กลุ่มการเชื่อมต่อก็ต้องได้รับการปรับปรุงใหม่เช่นกัน เพื่อไม่ให้ยึดติดกับข้อมูลรับรองที่หมดอายุ
# Vault Agent auto-renews and re-templates on rotation
auto_auth { method "approle" { ... } }
template {
contents = "{{ with secret \"database/creds/billing-readonly\" }}{{ .Data.username }}:{{ .Data.password }}{{ end }}"
destination = "/run/secrets/db"
command = "systemctl reload billing-app"
}เมื่อหลีกเลี่ยงข้อมูลลับแบบคงที่ไม่ได้
ข้อมูลลับทุกชนิดไม่สามารถทำให้เป็นไดนามิกได้ ส่วนติดต่อโปรแกรมประยุกต์ของบุคคลที่สามบางรายออกคีย์อายุยาวนานเพียงหนึ่งคีย์ ซึ่งไม่สามารถสร้างตามคำขอได้ สำหรับข้อมูลลับแบบคงที่เหล่านี้ ให้ใช้มาตรการควบคุมชดเชย:
- จัดเก็บไว้ในห้องนิรภัย อย่าเก็บไว้ในโค้ด
- จำกัดขอบเขตให้มีสิทธิ์เท่าที่จำเป็น
- หมุนเวียนตามกำหนดเวลา (จะกล่าวถึงในบทเรียนถัดไป)
- ตรวจสอบการใช้งานเพื่อหาความผิดปกติ
หลักทั่วไปคือ เลือกใช้แบบไดนามิกก่อน หากจำเป็นต้องใช้แบบคงที่ ให้หมุนเวียนและตรวจสอบอย่างเคร่งครัดสม่ำเสมอ
ข้อมูลลับแบบไดนามิกในกระบวนการผสานรวมและส่งมอบอย่างต่อเนื่อง
กระบวนการผสานรวมและส่งมอบอย่างต่อเนื่องเป็นกรณีใช้งานสำคัญ โดยปกติกระบวนการดังกล่าวจะเก็บคีย์สำหรับนำไปใช้งานที่มีอายุยาวนาน จึงเป็นเป้าหมายที่น่าดึงดูด เมื่อใช้ข้อมูลลับแบบไดนามิก กระบวนการจะ:
- ยืนยันตัวตนกับห้องนิรภัยโดยใช้ข้อมูลระบุตัวตน OIDC ของตน (เช่น โทเค็น OIDC จากการดำเนินการของ GitHub)
- ร้องขอข้อมูลรับรองคลาวด์อายุสั้นที่ใช้ได้เฉพาะตลอดระยะเวลาของงาน
- ปล่อยให้ข้อมูลรับรองหมดอายุโดยอัตโนมัติเมื่องานสิ้นสุด
จะไม่มีคีย์สำหรับนำไปใช้งานที่มีอายุยาวนานอยู่เลย หากบันทึกของกระบวนการถูกเจาะระบบ ก็จะเปิดเผยข้อมูลรับรองที่หมดอายุไปแล้วเมื่อมีผู้อ่าน
# GitHub Actions job exchanges its OIDC token for a short-lived AWS role
# No static AWS keys stored as repo secrets
permissions:
id-token: write
steps:
- uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123:role/deploy
aws-region: eu-central-1ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับสัญญาเช่าและข้อมูลลับแบบไดนามิก
สรุป: ข้อมูลลับแบบไดนามิกและสัญญาเช่า
คุณได้เรียนรู้ว่าข้อมูลรับรองอายุสั้นที่หมดอายุโดยอัตโนมัติเปลี่ยนแปลงการจัดการข้อมูลลับอย่างไร
- ข้อมูลลับแบบไดนามิกถูกสร้างขึ้นตามคำขอ มีค่าเฉพาะสำหรับผู้ใช้บริการแต่ละราย และหมดอายุโดยอัตโนมัติ แตกต่างจากข้อมูลลับแบบคงที่ที่นำกลับมาใช้ซ้ำ
- สัญญาเช่ากำหนด TTL และ TTL สูงสุด เมื่อหมดอายุ ห้องนิรภัยจะเพิกถอนข้อมูลรับรองพร้อมล้างข้อมูลจริง
- แอปพลิเคชันที่ทำงานต่อเนื่องเป็นเวลานานสามารถต่ออายุสัญญาเช่าได้ หรือสามารถเพิกถอนได้ทันทีเพื่อใช้เป็นสวิตช์หยุดฉุกเฉินเมื่อเกิดเหตุการณ์ผิดปกติ
- ข้อมูลลับแบบไดนามิกใช้ได้กับฐานข้อมูล IAM บนคลาวด์ SSH PKI และระบบอื่น ๆ ช่วยลดขอบเขตความเสียหายและทำให้การหมุนเวียนเป็นอัตโนมัติ
- ข้อแลกเปลี่ยนคือการมีข้อมูลรับรองระดับรากอยู่ในห้องนิรภัย จึงต้องหมุนเวียนและจำกัดขอบเขตอย่างรัดกุม
- แอปพลิเคชันและกระบวนการผสานรวมและส่งมอบอย่างต่อเนื่องต้องเขียนให้รองรับการหมดอายุ เลือกใช้ข้อมูลลับแบบไดนามิกก่อน และหมุนเวียนข้อมูลลับแบบคงที่เมื่อหลีกเลี่ยงไม่ได้
ถัดไป เราจะกล่าวถึงการหมุนเวียนคีย์และการตรวจจับการรั่วไหลเมื่อข้อมูลลับหลุดรอดการป้องกัน
คำถามที่พบบ่อย
บทเรียน “ข้อมูลลับแบบไดนามิกและการเช่า” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ข้อมูลลับแบบไดนามิกและการเช่า” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cyber Security Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ข้อมูลลับแบบไดนามิกและการเช่า”
ข้อมูลรับรองอายุสั้นที่หมดอายุโดยอัตโนมัติ คุณปฏิบัติ Cyber Security Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cyber Security Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cyber Security Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ข้อมูลลับแบบไดนามิกและการเช่า” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cyber Security Academy นี้ได้ไหม
ได้ บทเรียน Cyber Security Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ปัญหาข้อมูลลับกระจัดกระจาย
- ห้องนิรภัยและที่จัดเก็บข้อมูลลับ
- ข้อมูลลับแบบไดนามิกและการเช่า
- การหมุนเวียนคีย์และการตรวจจับ