Hermes Agent Masterclass: 10. Security
สรุปย่อ
ประเด็นสำคัญจากวิดีโอ
- **ช่อง:** Tonbi's AI Garage · **ความยาว:** ~28 นาที · **ลิงก์:** https://www.youtube.com/watch?v=KtlY6ETPyKo
# สรุป: Hermes Agent Masterclass: 10. Security - **ช่อง:** Tonbi's AI Garage · **ความยาว:** ~28 นาที · **ลิงก์:** https://www.youtube.com/watch?v=KtlY6ETPyKo ## ประเด็นหลัก - วิดีโอนี้เป็นตอนจบของซีรีส์ Hermes Agent Masterclass ทั้ง 10 ตอน โดยเน้นเรื่องความปลอดภัย (Security) ของ agent - ไม่มี agent ที่ปลอดภัยและมีความสามารถสูงสุดพร้อมกันได้ — ต้องเลือก trade-off ระหว่างความสามารถกับความปลอดภัยให้เหมาะกับงาน - 7 ชั้นความปลอดภัยทำงานเป็น "dial" หรือปุ่มปรับระดับ ไม่ใช่ checklist ที่ต้องเปิดให้หมด - Trust Layer: ใครสามารถคุยกับ agent ได้บ้าง — ค่าเริ่มต้นคือปฏิเสธทุกคน (deny by default) - Approvals: มีหลายโหมด — Manual, Smart (LLM ประเมินความเสี่ยง), และ YOLO (ทำทุกอย่างไม่ต้องถาม) - แม้ใน YOLO mode ก็มี hard block สำหรับคำสั่งที่อันตรายระดับหายนะ เช่น `rm -rf /` - Containment: ใช้ Docker เป็น boundary — host file system ไม่ถูกเข้าถึงได้ แต่ต้องระวัง ENV ที่ forward เข้า container - Filtering: MCP เห็น secret น้อยมาก ทุกอย่างถูก strip/redact ก่อนถึง LLM - ไฟล์เองก็โจมตีคุณได้ (prompt injection) — agents.md, soul.md ฯลฯ ถูก scan ก่อน load - SSRF protection และ website block list ทำงานตลอดเวลาที่ network level - Tyrith/Teereth: เครื่องมือ pre-exec scanning จับ homograph URL spoofing และ Unicode look-alike attacks - ทุกชั้นความปลอดภัยปรับได้ตาม profile (agent แยกกัน) เพื่อให้แต่ละ agent มีสิทธิ์น้อยที่สุดเท่าที่งานต้องการ ## ความเห็นสรุป วิดีโอนี้เป็นบทสรุปที่ครอบคลุมและเป็นประโยชน์มาก แสดงให้เห็นว่า Hermes Agent ออกแบบมาด้วย defense in depth 7 ชั้นที่ซ้อนทับกัน ผู้ใช้สามารถปรับแต่งระดับความปลอดภัยได้ตามความเหมาะสม ตั้งแต่ใช้คนเดียวบนแล็ปท็อปไปจนถึงการ deploy สาธารณะ เป็นการปิด Masterclass ได้อย่างสมบูรณ์และทรงพลังครับ
คำแปลเต็ม
แปลตามบทสนทนาต้นฉบับ ปรับเป็นภาษาไทยธรรมชาติ
ยินดีต้อนรับกลับมาสู่ Hermes Agent Masterclass โมดูลที่ 10 เรื่องความปลอดภัย (Security) และนี่จะเป็นตอนจบของเรา ถ้าใครฝ่าฟันมาดูครบทั้ง 10 ตอน ขอแสดงความยินดีด้วยนะครับ คุณทำสำเร็จถึงบทสุดท้ายแล้ว เราได้เรียนรู้กันมาเยอะมากเกี่ยวกับวิธีใช้ Hermes Agent และสิ่งที่มันทำได้ แต่ผมคิดว่าสมควรมีตอนจบที่พูดถึงเรื่องความปลอดภัยโดยเฉพาะ เพราะมันเป็นหัวข้อใหญ่มากเวลาเราใช้ agent ประเภทใดก็ตาม
ก่อนอื่นมาทบทวนกันก่อนว่า 9 โมดูลที่ผ่านมาสร้างอะไรขึ้นมาบ้าง ตอนนี้คุณมี agent ที่สามารถอ่านและเขียนไฟล์ รันคำสั่ง shell ใช้จ่ายเงินด้วยซ้ำ ส่งข้อความหาคุณบนโทรศัพท์ และจากโมดูลล่าสุดยังรันทีมงานทั้งทีมได้ โดยมีหลาย profile ประสานงานกันบน Kanban board ได้ นั่นเป็นอำนาจที่ยิ่งใหญ่มากที่เรามอบให้กับสิ่งหนึ่ง และวันนี้จะเป็นอีกครึ่งหนึ่งของเรื่อง นั่นคือ Hermes จะปกป้องอำนาจนั้นไม่ให้กลายเป็นความรับผิด และที่สำคัญกว่านั้นคือ คุณจะปรับแต่งมันให้เข้ากับระดับความไว้วางใจที่คุณมีจริงได้อย่างไร
ผมทราบว่าในวิดีโอก่อนๆ บางครั้งผมใช้ WSL บางครั้งใช้ Windows แต่ในวิดีโอนี้ผมจะใช้ WSL เพราะฟีเจอร์บางอย่างมีให้ใช้บน Linux เท่านั้น ผมจะชี้ให้เห็นตอนที่มันเจอ แต่ส่วนใหญ่คุณทำบน Windows ได้เหมือนกันนะครับ
งั้นมาดูกันว่าวันนี้เราจะพูดถึงอะไรบ้าง อันดับแรกคือ trade-off ระหว่างความสามารถกับความปลอดภัย จากนั้นพูดถึง trust หรือใครสามารถเข้าถึงและคุยกับ agent ของคุณได้ จะพูดเรื่อง approvals หรือการอนุมัติเยอะมาก พูดถึง containers หรือว่ามันรันอยู่ที่ไหน filters หรือข้อมูลอะไรรั่วไหลได้บ้าง การทำ security hardening แล้วก็จะสร้างระบบ hardening จริงๆ และลองโจมตีมันดู งั้นเริ่มกันเลย
และถ้าใครรัน agent เองและอยากเข้าถึง LLM wikis ที่ผมใช้เองสำหรับทำวิดีโอเหล่านี้เพื่อค้นคว้าและสร้างเนื้อหา ลองแวะชมโปรเจกต์ของผมที่ agentwikis.com ครับ ผมให้ wikis ทั้งหมดนี้ฟรีในหัวข้อต่างๆ มากมาย หรือจะสมัคร pro account ในราคา $9.99 ต่อเดือน ก็จะได้เข้าถึง wikis ขนาดใหญ่พิเศษ ซึ่งจะมีจำนวนหน้าและรายละเอียดมากกว่าในแต่ละหัวข้อ งั้นกลับเข้าสู่วิดีโอกันต่อ
แต่ก่อนที่เราจะเริ่มพูดถึงฟีเจอร์ความปลอดภัย สำคัญมากที่จะต้องชี้ให้เห็นถึง trade-off ตรงนี้ เพราะน่าเสียดายที่ไม่มี agent ที่ปลอดภัยเต็มที่และมีความสามารถเต็มที่พร้อมกันได้ ผมเชื่อว่าหลายคนที่อยู่ตอนที่ Open Claw ออกมาครั้งแรก คงมีความกังวลเรื่องความปลอดภัยเยอะมาก มีเรื่องสยองขวัญเกี่ยวกับปัญหาความปลอดภัยอยู่เยอะ แต่ตอนนี้ส่วนใหญ่ได้รับการแก้ไขไปแล้ว มีองค์ประกอบความปลอดภัยหลายอย่างถูกเพิ่มเข้ามา ทำให้ agent ปลอดภัยขึ้นมาก
แต่ก็ยังมี trade-off ระหว่าง agent ที่มีความสามารถเต็มที่ เข้าถึงไฟล์ทั้งหมดของคุณ ข้อมูลทั้งหมด เชื่อมต่อกับอีเมลและทุกแพลตฟอร์มที่คุณใช้ ทุกส่วนของชีวิตคุณ โดยไม่ต้องขออนุมัติใดๆ รันในโหมด YOLO สมบูรณ์บน PC หรืออุปกรณ์หลักของคุณ กับทุก tool ที่มี นี่คือความเป็นประโยชน์สูงสุด แต่ก็เป็นอันตรายสูงสุดเช่นกันใช่มั้ยครับ เพราะคำสั่งเดียวก็สามารถทำลายไฟล์สำคัญของคุณได้เยอะ หรือทำให้ข้อมูลรั่วไหล
อีกด้านหนึ่งคือ agent ที่ปลอดภัยอย่างสมบูรณ์ แบบ Docker in Docker ที่ทุกอย่างถูก sandbox ไว้ ไม่มีสิทธิ์ทำอะไรเลย ทำอันตรายอะไรไม่ได้ แต่มันก็ทำอะไรที่มีประโยชน์มากไม่ได้เช่นกัน ดังนั้นมันขึ้นอยู่กับคุณว่าจะยืนตรงไหนระหว่างสองขั้วนี้ อะไรที่เหมาะกับงานของคุณ และคุณยอมรับความเสี่ยงแค่ไหน
7 ชั้นความปลอดภัยที่เราจะพูดถึงเป็น "dial" หรือปุ่มปรับระดับนะครับ ไม่ใช่ checklist ที่ต้องเปิดให้หมด คุณต้องคิดว่า สำหรับ agent นี้ใน environment นี้ ผมอยากให้มันทำ X, Y, Z วิธีที่ปลอดภัยที่สุดในการทำสิ่งนั้นคืออะไร นั่นคือสิ่งที่ security hardening เป็นจริงๆ
งั้น dial เหล่านั้นอยู่ตรงไหน? มันขึ้นอยู่กับว่าคุณใช้ agent นี้อย่างไร สำหรับคนส่วนใหญ่ที่รันบนเครื่องของตัวเอง กับแล็ปท็อปเครื่องเดียวหรืออุปกรณ์ส่วนตัว การทำพิธีกรรมน้อยๆ ที่นี่ถือว่าถูกต้องแล้ว การทำ allow list หนักๆ และ sandbox บนแล็ปท็อปของตัวเองเป็นแค่อุปสรรคโดยไม่มีภัยคุกคามที่คุ้มค่า เพราะคุณเป็นคนเดียวที่จะคุยกับมันอยู่แล้วใช่มั้ยครับ คุณไม่ได้แชร์มันกับใคร
แต่มีคนที่ใช้ agent กับทีมเล็กๆ มากขึ้นเรื่อยๆ และอาจมี shared gateway ตรงนี้คือจุดที่คุณควรเริ่มใช้ allow list จริงจัง ใช้ manual smart approval และอาจใช้ sandbox back end สำหรับทุกอย่างที่ trigger ผ่าน gateway และก็มีการ deploy ที่เปิดสาธารณะ รับ input ที่ไม่น่าไว้วางใจ เช่น webhooks, open DMs, cron บนเนื้อหาที่ scrape มา สิ่งที่คุณควบคุมไม่ได้และมาจากแหล่งภายนอก ในกรณีนี้คุณอาจต้องการปฏิเสธการอนุมัติเป็นค่าเริ่มต้น ใช้ sandbox back end ใช้ Tyrites ซึ่งเราจะพูดถึงภายหลัง block list เว็บไซต์ และปิดการเข้าถึง private URLs เราจะกลับมาพูดเรื่องนี้ท้ายวิดีโอ แต่ให้ลองคิดไว้บ้างตามการใช้งานของคุณ
พาร์ต 2 คือ trust layer หรือชั้นความไว้วางใจ ซึ่งเกี่ยวกับว่า agent จะคุยกับใครได้บ้าง ก่อนที่เราจะถามว่ามันทำอะไรได้ เรากำลังพูดถึง gateway ที่นี่ และการพูดถึง Hermes gateway คือการเชื่อมต่อกับ messaging platforms และ cron scheduler เป็นหลัก
เมื่อข้อความมาถึง gateway Hermes จะส่งมันผ่านห่วงโซ่ของการตรวจสอบตามลำดับ และค่าเริ่มต้นสุดท้ายคือปฏิเสธ Hermes จะตรวจสอบ per platform allow all เช่น คุณสามารถตั้ง Discord อนุญาตผู้ใช้ทั้งหมด และตรงนี้เรามี dashboard ถ้าเข้าไปที่ channels แล้วสมมติว่าคุณตั้งค่า Discord ไว้ แม้ใน WSL agent นี้ผมจะไม่มี แต่คุณเลื่อนลงมาดูได้ว่า allow all users เป็น true หรือ false โดยค่าเริ่มต้นจะเป็นการปฏิเสธ แต่นี่เป็น dial หนึ่งที่คุณปรับได้ เป็นอันที่รุนแรงหน่อย แต่ก็ทำได้
ต่อไปคือ DM pairing approved list Hermes จะตรวจสอบว่าคุณอยู่ใน approved list หรือไม่ แล้วก็มี platform allow list เช่น Telegram allowed users คล้ายกับ Discord ที่ผมเพิ่งแสดงให้ดู คุณสามารถตั้งค่า Telegram user IDs ที่นี่ได้ ส่วน user ID ของคุณหาได้จาก get user info bot บน Telegram ยังมี global allow list คือ gateway allowed users และ global allow all คือ gateway allow all users ถ้าไม่มีอันไหนตรงเลย ค่าเริ่มต้นคือปฏิเสธข้อความ ทำให้มันไม่มาถึง agent เลย ดังนั้นไม่ตั้งค่าอะไรเลยหมายความว่าทุกคนถูกปฏิเสธ โดยจะมี startup warning บอกคุณตรงๆ แบบนั้น คุณต้อง opt-in เพื่อเปิดสิ่งนี้ คุณไม่สามารถลืมเข้าไปได้ คุณต้องตั้งค่าให้ชัดเจนว่าใครจะได้รับอนุญาตให้สื่อสารกับ agent ของคุณ
ใน Hermes agent เครื่องนี้ผมไม่ได้ตั้งค่าอะไรไว้เหมือนที่คุณเห็น แต่ผมจะอนุมัติ Telegram กับ allowed users สำหรับ user ID ของผม มีหลายวิธีที่ทำได้ คุณเคยเห็นผมทำมาก่อน แต่เช่นใน configure Telegram ตั้งค่า Telegram bot token และ allowed Telegram user ID นี่คือ ID ของผม และสำหรับส่วนนี้ผมจะปล่อยว่างไว้ เพื่อให้ไม่อนุญาตผู้ใช้ทั้งหมด ตอนนี้เริ่ม gateway ขึ้นมา ก็เห็นได้ว่าผมพิมพ์ hello ไปใน Telegram bot ตอบกลับมาว่า "Hello Tommy, what are you working on?" ผมถามว่าใครอยู่ใน allow list และก็เห็นได้ว่ามีแค่ผม Tommy ใน DM นี้ ซึ่งก็เป็น home channel ด้วย และไม่มีใครใน pairing list เพราะผมใส่เป็น ID ตรงๆ และ Telegram allowed chats ใน config ก็ว่างเปล่า ดังนั้นมีแค่ chat นี้เท่านั้นที่จะเข้าถึง agent ของผมได้ ถ้ามีคนอื่นพยายามคุยกับ Hermes agent ของผม แม้จะรู้ชื่อ bot ก็ตาม agent จะไม่ตอบ จะถูกปฏิเสธโดยอัตโนมัติเลยครับ
พาร์ต 3 คือเรื่อง approvals หรือการอนุมัติ ซึ่งก็มี dial ให้ปรับหลายตัวเช่นกัน
งั้นมาดูวิธีตั้งค่า approvals ต่างๆ กัน ค่าเริ่มต้นคือ Manual ซึ่งคุณสามารถใช้ CLI ได้ การอนุมัติทุกครั้งจะมี timeout 60 วินาทีเป็นค่าเริ่มต้น และถ้าหมดเวลาจะถือว่าปฏิเสธ (fail close) สำหรับ gateway คุณใช้ปุ่ม native หรือตอบ yes เพื่ออนุมัติได้ ตัวเลือกพื้นฐานมี 4 แบบคือ approve once (อนุมัติครั้งเดียว), approve in session (อนุมัติใน session นี้), approve always (อนุมัติตลอดไป) หรือ deny (ปฏิเสธ) ตัวอย่างเช่น ถ้าผมบอกให้ลบ directory หนึ่ง ซึ่งเป็นการทำลายล้างอย่างชัดเจน มันจะขึ้นว่า command approval required เหตุผล: recursive delete ซึ่งมักจะถูก flag เสมอ แล้วคุณเลือกได้ว่าจะ allow once, session หรือ deny ครับ
จากนั้นมี smart approvals ซึ่งใช้ auxiliary LLM มาประเมินความเสี่ยง คำสั่งที่ปลอดภัยอย่างชัดเจนจะถูกอนุมัติอัตโนมัติ คำสั่งที่เป็นอันตรายจริงๆ จะถูกปฏิเสธอัตโนมัติ และกรณีที่ไม่แน่ใจจะส่งไปที่ manual ให้คุณเลือกหนึ่งในสี่ตัวเลือก คุณทำได้ใน CLI เช่นกัน ด้วย `Hermes config set approvals.mode smart` แล้วก็จะเห็นผลเหมือนกัน ผม restart gateway แล้วบอกให้ลบ directory นั้น แล้วมันก็ถูกลบไปเลยโดยไม่ถามอะไร เพราะ smart mode เปิดอยู่ และมันตัดสินใจว่า directory นี้ลบได้ปลอดภัย ซึ่งก็จริงเพราะมันว่างเปล่า คุณเห็นได้ว่าผมถามว่าทำไมมันถึงตัดสินใจว่าลบได้ปลอดภัย ข้อแรกคือเป็นคำสั่งชัดเจน ผมบอกเจาะจงว่าให้ลบ directory นี้ และมี path ชัดเจน ผมให้ path ที่แน่นอน มีการตรวจสอบ scope ก่อนลบ พบว่ามีแค่ไฟล์ readme หนึ่งไฟล์ทิ้งไว้ ไม่ใช่ project path ใหญ่โต เป็นแค่ markdown file ธรรมดา และไม่มีความคลุมเครือ นี่คือสิ่งที่ smart mode มอบให้ agent จะมองเห็นและตัดสินใจแบบนี้ได้ ผมมักใช้ smart mode หรือที่เรียกว่า auto approve ใน Codex และ Claude Code เพราะไม่อยากต้องมาอนุมัติทีละอย่าง และก็ไม่เคยมีปัญหาใหญ่ๆ เลยครับ
คุณยังสามารถปิดการตรวจสอบ approval ทั้งหมดได้ ซึ่งเทียบเท่าการรัน YOLO ตลอดเวลา YOLO mode คือมันจะทำทุกอย่างตามใจชอบโดยไม่ถามคุณในเกือบทุกกรณี ใน dashboard ที่หมวด security ตรง mode คุณจะเห็นตัวเลือก ask, manual ask, และ YOLO พูดง่ายๆ คืออนุมัติคำสั่งอันตรายทั้งหมด หรือปฏิเสธ คุณสลับไปมาได้ที่นี่ และอีกนิดเรื่อง YOLO mode คุณเปิดได้จาก CLI flag เช่น `Hermes chat --yolo` หรือเปิดใน chat โดยพิมพ์ YOLO เพื่อสลับโหมด ข้ามการอนุมัติคำสั่งอันตรายทั้งหมด หรือตั้งเป็น environment variable หรือตามที่ผมแสดงให้ดูก่อนหน้านี้ ถ้าเปิดใน TUI จะมี warning สีแดงสดพร้อมเครื่องหมาย caution เพื่อให้คุณรู้ชัดว่ามันเปิดอยู่ และคุณ toggle ปิดได้ครับ
แต่ YOLO ก็มีขีดจำกัด มีคำสั่งบางอย่างที่จะถูกปฏิเสธไม่ว่าจะเปิด YOLO หรือไม่ก็ตาม เช่น `rm -rf` และ variants ที่ชัดเจน ซึ่งจะลบทั้ง file system root เห็นได้ชัดว่าไม่ต้องการสิ่งนั้น คำสั่งเหล่านี้เสี่ยงเกินไปแม้จะตั้ง YOLO mode ไว้ มันถูกตั้งให้ trip ก่อนที่ approval layer จะเห็นคำสั่งด้วยซ้ำ ไม่มี override flag ใดๆ ถ้าคุณจำเป็นต้องรันจริงๆ ก็รันนอก agent ไปเลย อย่าทำใน agent ทำด้วยตัวเอง manual เถอะครับ
ใน default profile ผมสั่งให้มันหยุด gateway process ที่ Hermes รันอยู่ ซึ่งถูก flag เป็นคำสั่งอันตราย และนี่คือ manual mode คุณตัดสินใจได้ว่าจะทำอย่างไร ผมขอ deny ที่นี่ ลองเปลี่ยนเป็น YOLO mode บ้าง เปิด YOLO สั่งเดิม "Can you kill the Hermes gateway process?" และผลคือก่อนที่มันจะตอบกลับ gateway ก็ถูก kill ไปแล้ว เพราะอยู่ใน YOLO mode แต่ YOLO ไม่ได้ทำทุกอย่างนะครับ ลองสั่งให้ remove root file system โดยไม่มี preserve root ซึ่งไม่เพียงแต่เป็นการทำลายล้างแต่ยังกู้คืนไม่ได้ด้วย นี่จึงถูก hard block ก่อนที่ agent จะได้ทำงานเลย พอผมสั่งให้รัน agent ตอบชัดเจนว่า "I will not run that" เพราะมันจะลบทั้ง file system และทำลายระบบ ดังนั้นแม้ใน YOLO mode ก็มีบางสิ่งที่มันไม่ทำ ซึ่งก็ดี เราคงไม่อยากลบ file system ทั้งหมดผ่าน agent โดยไม่ได้ตั้งใจ ถ้าจำเป็นจริงๆ ก็ทำเอง manual ไปเลยครับ
พาร์ต 4 คือเรื่อง containment หรือการจำกัดขอบเขต container คือขอบเขต ถ้าคุณรันในเครื่องเหมือนที่ผมทำตอนนี้ หรือบางครั้ง SSH เข้า VPS agent ก็ไม่มีขอบเขต container approval layer คือเกราะป้องกันเดียวของคุณ ในกรณีนี้การตรวจสอบ dangerous command จะเปิดอยู่ อย่างไรก็ตาม ถ้าคุณใช้ Docker หรืออะไรที่คล้ายกัน การตรวจสอบ dangerous command จะถูกข้ามไป เพราะสมมติฐานคือ host file system ไม่สามารถเข้าถึงได้ กรณีแย่ที่สุดคือ container พัง ไม่ใช่ host แต่สิ่งที่ต้องทราบคือ นี่เป็นแค่ส่วนของ back end ดังนั้น sandbox ไม่ได้แปลว่าปลอดภัยอย่างไม่มีเงื่อนไข เราเคยพูดถึงเรื่องนี้ในโมดูล 2 ตอนที่ผมแสดง Docker เป็น back end แต่ Docker forward ENV จะว่างเปล่าเป็นค่าเริ่มต้น สิ่งใดที่คุณ forward เข้า container จะถูกอ่านได้ และสามารถถูกขโมยได้โดย code ที่รันอยู่ในนั้น นี่คือสิ่งที่เราเห็นใช่มั้ยครับ และนี่คือเหตุผลที่การเลือก deployment back end เป็นโมดูลยาวทั้งโมดูล
คุณยังสามารถติดตั้ง Hermes agent บน Docker Desktop ได้ ภายใน container และใช้ Docker เป็น back end ได้ด้วย นั่นคือสถานการณ์ Docker in Docker แต่มันค่อนข้างซับซ้อน เลยไม่ขออธิบายในวิดีโอนี้ ผมจะแสดงวิธีรัน Hermes ภายใน Docker ให้ดูแทน และอย่างที่บอก นี่คือวิธีที่ 2 คือ Docker เป็น terminal back end ซึ่งทำในโมดูล 2 ถ้าสนใจทำแบบที่ agent รันบน host แต่ execute คำสั่งทุกอย่างภายใน Docker sandbox container เดียวที่ persistent อยู่ ดูได้ในโมดูล 2 แต่ตอนนี้ผมจะแสดงวิธีรัน Hermes ภายใน Docker เอง ซึ่งเป็นการเพิ่มความปลอดภัย
หน้านี้ใน News Research docs จะให้ข้อมูลส่วนใหญ่ที่คุณต้องการ ผมจะรันคำสั่งเหล่านี้ให้ดู เราจะเห็นว่ากำลัง download agent ผม copy และ paste คำสั่งนี้มา ทำผ่าน WSL ใน PowerShell กำลัง pull image จาก nousresearch/hermes-agent และผมมี Docker รันอยู่ พอติดตั้งเสร็จก็เข้าสู่ setup เลย image ก็ขึ้นมา ไม่ต้องทำอะไรใน Docker เอง มาตั้งค่ากัน เมื่อตั้งค่าเสร็จแล้ว คุณรันใน gateway mode ได้ เมื่อ configure แล้ว คุณรัน container ใน background เป็น persistent gateway ได้ ด้วยคำสั่ง `docker run` ตามนี้ คุณต้องตั้งค่าสิ่งที่ gateway จะทำ เช่น expose OpenAI-compatible API server และ health endpoint ซึ่งเป็น optional ถ้าคุณใช้แค่ chat platforms เช่น Telegram ครับ
แต่จำเป็นถ้าคุณต้องการใช้ dashboard หรือ external tools เข้าถึง gateway ผมรันคำสั่งนี้ ก็ copy และ paste มาอีกเช่นกัน และตอนนี้มันรันอยู่แล้ว มาดูอีกครั้ง มันอยู่บน port localhost นี่คือคำสั่งที่คุณต้องใช้รัน CLI ด้วย ตอนนี้เราอยู่ใน CLI คุณสามารถมี CLI chat ปกติได้ที่นี่ session นี้อยู่ใน Hermes Docker container และมี container ID ครบ Docker container บน WSL ไม่ใช่ bare metal Windows และ Linux การรันใน Docker ซับซ้อนกว่ารันในเครื่องเองนิดหน่อย ดังนั้นคุณควรอ่าน docs เหล่านี้เพื่อหลีกเลี่ยงปัญหาใหญ่ๆ ครับ
พาร์ต 5 คือเรื่อง filters ซึ่งเป็นชั้นที่ 4 และ 5 จาก 7 ชั้น บวกกับ network controls เนื้อหาคืออะไรรั่วไหลได้บ้าง และข้อความใดพยายามจะ hijack ระบบ MCP เห็นแทบไม่มีอะไรเลย นี่เป็นการเรียกกลับไปโมดูล 6 ที่เราพูดถึง MCP เมื่อ MCP server ทำงานเป็น sub process มันจะไม่ inherit environment ของคุณ สิ่งที่ผ่านเข้าไปมีเพียงของพื้นฐาน เช่น PATH, HOME, USER และสิ่งที่คุณตั้งใน ENV อย่างชัดเจน ส่วนที่เหลือถูก strip ออกหมด Provider API keys, gateway tokens, secret ทุกอย่างที่คุณไม่ได้ให้สิทธิ์อย่างชัดเจน error messages ก็ถูก sanitize ด้วย ดังนั้น GitHub PATs หรือ keys และ tokens ทุกชนิดจะถูก redact ก่อนถึง LLM เสมอ และ version 18 ยังเพิ่ม Slack token reduction ด้วยครับ
มีอีกเรื่องที่ควรทราบ เพราะไฟล์ของคุณก็โจมตีคุณได้ agents.md, soul.md, .cursorrules หรืออะไรก็ตามที่กลายเป็นส่วนหนึ่งของ system prompt จะถูก scan ก่อน load มันจะตรวจหาข้อความ "ignore prior instructions" HTML comments ที่ซ่อนคำน่าสงสัย ความพยายามอ่าน ENV หรือ credentials และรูปแบบการ exfiltration ผ่าน curl นี่คือ prompt injection เบื้องต้น และจะถูก block อัตโนมัติ ไม่ใช่ fail แบบเงียบๆ คุณจะได้รับ block message ชัดเจนว่าอะไรถูกหยุดและเพราะเหตุใด
ยังมี network-level guards อีกสองตัวที่ทำงานตลอดเวลา อันแรกคือ SSRF protection ที่เปิดอยู่เสมอ ตรวจสอบทุก URL ที่ tool ใดๆ ใช้ บล็อก private network ranges และ link-local addresses รวมถึง cloud metadata endpoints และจะ fail closed เมื่อ DNS failure ส่วน redirect chains จะถูก revalidate ทุก hop อีกอันคือ website block list ที่คุณกำหนด rules เองได้ ใน security settings ตรง website block list คุณสามารถตั้ง domains ใน shared block list file ได้ชัดเจน ซึ่งจะถูก enforce บน web search, web extract และ browser navigate ครบทุก tool ที่ใช้ URL คุณเห็นได้ใน dashboard ที่หมวด security เลย เปิดใช้ website block list enabled แล้วใส่ domain ที่ต้องการบล็อก
ยังมี opt-out โดยตั้งใจ คือตั้ง `security.allow_private_urls` เป็น true ค่าเริ่มต้นคือ false เพื่อให้ web tools เข้าถึง LAN ของคุณได้ ซึ่ง legit สำหรับเครือข่าย Alama ภายในบ้าน แต่อันตรายมากบน public-facing gateway ดังนั้นปล่อยปิดไว้ ยกเว้นรู้ว่าทำไมต้องเปิดครับ
ต่อมาเราจะมาพูดถึง Tyrith หรือ Teereth (ไม่แน่ใจว่าออกเสียงอย่างไร) แต่นี่เป็น open source tool แยกต่างหากที่ Hermes รองรับอย่างเป็นทางการ ไม่ใช่ core Hermes code แต่ก็ไม่ใช่ bolt-on ที่คุณต้อง configure เอง ถ้าเข้าไปที่ config security คุณจะเห็น Tyrith ตั้งค่าเป็น enabled แล้วใส่ path พร้อม config เพิ่มเติมอีกสองสามตัว
Tyrith คืออะไร? มันจับสิ่งที่ pattern matching ทำไม่ได้ เช่น homograph URL spoofing ที่ domain ดูเหมือนของจริงแต่ไม่ใช่ หรือรูปแบบ pipe to interpreter เช่น curl หรือ bash และ terminal injection attacks มัน auto install ครั้งแรกที่ใช้จาก GitHub releases พร้อม SHA checksum ค่าเริ่มต้นคือเปิดใช้ การโจมตีที่พบบ่อยคือใช้ spoofing แบบนี้ และ Teereth จะทำ pre-exec security scanning ที่ผมพูดถึง มีรูปแบบ spoofing หลายแบบที่มันจับได้ ในตัวอย่างนี้ตัว I จริงๆ แล้วเป็น Cyrillic I ใน hostname ไม่ใช่ Latin I อย่างที่ควรเป็น นี่เป็น Teereth verdict จริงไม่ใช่จำลอง ใน Hermes agent ผมสั่งให้รัน URL ที่ถูก spoof นี้ และมันจับได้ ขึ้นว่าเป็น dangerous command เหตุผล: confusable Unicode characters in the text คือใช้ Cyrillic look-alike แทน I จริง และ "appearing near ASCII text which may indicate a homoglyph attack" นี่คือ Teereth ทำงาน ปฏิเสธคำสั่ง คุณยัง allow ได้อยู่ แต่ถ้าปล่อยให้หมดเวลา 60 วินาที (ค่าเริ่มต้น) มันจะถูกปฏิเสธอัตโนมัติ นี่คือสิ่งที่ Teereth จับได้ เป็นฟีเจอร์ความปลอดภัยที่ดีมาก มันอธิบายชัดเจนว่า ตัว I ดูเหมือนจะเป็น Cyrillic small letter I ไม่ใช่ Latin I ปกติ ซึ่งเป็นเทคนิค phishing ที่พบบ่อยครับ
ที่ดีคือทั้งหมดนี้ปรับได้ตาม profile ซึ่งจำากโมดูลที่แล้วได้ว่า profile เป็น agent แยกกัน สมมติผมอยากให้ Coder profile หรือ Coder agent มีความปลอดภัยสูงขึ้น ผมเปลี่ยน back end จาก local เป็น Docker หรือ SSH หรืออื่นๆ ตามต้องการได้ เช่น ผมต้องการให้ Coder รันใน Docker อย่างเดียว เมื่อ config เป็น backend option แล้ว ก็ตั้งได้ตรงนี้ แล้ว save สมมติ Researcher profile ผมไปที่ security แล้วเปิด website block list เพราะ researcher จะเข้าเว็บเยอะ ผมใส่ domains ที่อยากหลีกเลี่ยงได้ ส่วน Writer profile ผมไปที่ approvals สลับ approval mode ได้ Writer อาจเป็น YOLO ได้ แต่ Builder หรือ Coder คุณอาจอยากให้ ask ตลอดเวลา คุณตั้งแยกกันแล้ว save ทั้งหมด เพื่อให้แต่ละ profile มี security profile เฉพาะตัวตามสิทธิ์น้อยที่สุดที่งานนั้นต้องการ เชื่อมกับโมดูลก่อนหน้า ตรงนี้ก็เชื่อมกับ security คุณปรับแต่งในระดับนี้ได้ครับ
นี่คือทั้ง 7 ชั้น ไม่ใช่ชั้นเดียว ไม่มีชั้นไหนสมบูรณ์ด้วยตัวมันเอง คุณเลือกได้ว่าใครเข้าประตูได้ด้วย allow lists ตั้งค่า approvals ให้ตรงความต้องการ ใช้ containment ด้วย Docker หรือ backends อื่นเพื่อจำกัด blast radius filtering คือตัดสินใจว่า secret ใดออกไปได้ แล้วก็ security hardening ต่างๆ นี่คือ defense in depth คือ 7 ชั้นที่ซ้อนทับกันและเป็นอิสระจากกัน แต่ละชั้นจับสิ่งที่ชั้นอื่นพลาด และตามที่ผมแสดง คุณตั้งค่าเหล่านี้ได้ตาม profile ทำให้คุณขอบเขตได้ตรงตามที่ต้องการเลยครับ
นี่คือจุดจบของวิดีโอ security และจุดจบของ Hermes Agent Masterclass ครบทั้ง 10 โมดูล ขอสรุปสั้นๆ ว่าเราทำอะไรบ้าง โมดูล 1 คือ install และ basic chat โมดูล 2 เรื่อง deploy และใช้ gateway โมดูล 3 memory โมดูล 4 skills โมดูล 5 models และ local models โมดูล 6 tools และ MCP โมดูล 7 cron และ automation โมดูล 8 sub agents โมดูล 9 profiles และ Kanban และโมดูลนี้คือ security เราเริ่มจากแค่ install Hermes Agent จนถึงมีทีม multi-agent ที่ปลอดภัย hardened สามารถใช้ดุลยพินิจได้และสร้างขึ้นมาด้วยกันทั้งหมด
คลาสนี้ผมมีไอเดียตั้งแต่เดือนเมษายน จริงๆ แล้วเริ่มค้นคว้าเพื่อสร้างภาพรวมที่ละเอียดของ Hermes Agent ซึ่งค่อนข้างซับซ้อน docs ก็ละเอียดมาก
มันมี component ต่างๆ มากมาย ไอเดียคือผมอยากทำให้ละเอียดที่สุดเท่าที่จะทำได้ ในหัวข้อที่ค่อนข้าง evergreen คือ Hermes Agent เปลี่ยนตลอดเวลา มี feature ใหม่เพิ่มเข้ามาตลอด แต่บางอย่างเช่น memories, skills, sub agents สิ่งเหล่านี้จะไม่หายไปไหน อาจเปลี่ยนแปลงบ้าง เพิ่มเติมขึ้นมา ได้รับการอัปเดต แต่ core features หลักจะยังเป็นส่วนหนึ่งของ agent อยู่เสมอ นี่คือแนวคิดเบื้องหลัง Masterclass นี้ครับ
ผมได้เรียนรู้ไปเยอะมาก หวังว่าทุกคนจะได้เรียนรู้ไปด้วย ผมเริ่ม Masterclass ทั้งหมดนี้ด้วยความหวังว่าจะได้เรียนรู้จากการสอน และผมคิดว่าทำได้สำเร็จ เพราะผมชำนาญหลายส่วนมากขึ้น โดยเฉพาะในส่วนหลังๆ เช่น cron และ automation jobs, การตั้งค่า profiles และการใช้ Kanban ผมเรียนรู้ไปเยอะแม้จะเป็นคนสอนเองก็ตาม
ผมอยากขอบคุณทุกคนที่รับชม ทั้งหมดนี้น่าจะเกิน 5 ชั่วโมง และ Nous Research ก็ใจดีนำ playlist นี้ไปใส่ใน docs page ของพวกเขาด้วย คุณเห็นได้ว่าพวกเขาใส่ไว้ตรงนี้ มีรูป Tonby เล็กๆ นั่นคือ playlist ทั้งหมด
แต่ยังไม่จบ เราจะสำรวจ Hermes Agent ต่อไปเรื่อยๆ ตามที่มันเปลี่ยนแปลง แม้ผมจะครอบคลุมเยอะใน 10 วิดีโอนี้ แต่ก็ยังมีอีกมากที่ต้องไปต่อ และผมอาจกลับไปอัปเดตบางตอน เพราะตอนแรกๆ ทำไว้ตั้งแต่เดือนเมษายน หลายอย่างเปลี่ยนไปตั้งแต่ตอนนั้น
ขอบคุณทุกคนที่รับชมครับ โปรดแสดงความคิดเห็น บอกได้เลยว่าคุณคิดอย่างไรกับวิดีโอนี้และ Masterclass series ทั้งหมด ติดตาม Tonbi's AI Garage ต่อไปเพื่อดูวิดีโอเพิ่มเติมเกี่ยวกับ Hermes Agent และ AI และ agents โดยทั่วไป แล้วพบกันใหม่ในวิดีโอหน้า ขอบคุณทุกคนที่รับชมนะครับ
หมายเหตุการแปล
ความโปร่งใสเกี่ยวกับความไม่แน่นอนในต้นฉบับ
- 2. **"Tyrith" / "Teereth"** — the speaker themselves expresses uncertainty about pronunciation. This is the name of the security scanning tool (likely **Tyr** or **Teereth**). Translated both variants as heard; noted the speaker's own uncertainty.
- ## `[ฟังไม่ชัด]` Segments
- [x] No unaddressed `[ฟังไม่ชัด]` markers
อภิธานศัพท์เทคนิค
คำศัพท์และชื่อผลิตภัณฑ์ที่คงรูปภาษาอังกฤษ
| ศัพท์ | คำแปล / คำอธิบาย |
|---|---|
| Hermes Agent | ชื่อผลิตภัณฑ์ AI agent ของ Nous Research (ไม่แปล) |
| Masterclass | ชื่อซีรีส์วิดีโอสอนการใช้งาน (ไม่แปล) |
| Security | ความปลอดภัย |
| Trade-off | การแลกเปลี่ยนระหว่างสองสิ่งที่ไม่สามารถมีพร้อมกันได้อย่างสมบูรณ์ |
| Agent | เอเจนต์ AI ที่ทำงานอัตโนมัติ |
| WSL | Windows Subsystem for Linux — สภาพแวดล้อม Linux บน Windows (ไม่แปล) |
| Kanban board | บอร์ดจัดการงานแบบคานบัน (ไม่แปล) |
| Trust layer | ชั้นความไว้วางใจ — ควบคุมว่าใครสามารถสื่อสารกับ agent ได้ |
| Gateway | ประตูเชื่อมต่อระหว่าง agent กับ messaging platforms และ cron |
| Allow list | รายการที่อนุญาต — กำหนดผู้ใช้/โดเมนที่ได้รับอนุญาต |
| Deny by default | ปฏิเสธเป็นค่าเริ่มต้น — ไม่ตั้งค่าหมายความว่าปฏิเสธทั้งหมด |
| Approvals | การอนุมัติ — ระบบขออนุญาตก่อนรันคำสั่งที่เสี่ยง |
| Manual mode | โหมดที่ต้องอนุมัติทุกคำสั่งด้วยตนเอง |
| Smart approvals | ระบบอนุมัติอัจฉริยะ — ใช้ LLM ประเมินความเสี่ยงและอนุมัติอัตโนมัติ |
| YOLO mode | โหมดที่ข้ามการอนุมัติทั้งหมด — "You Only Live Once" |
| Hard block | การบล็อกที่ไม่สามารถ override ได้แม้ใน YOLO mode |
| Container | คอนเทนเนอร์สำหรับจำกัดขอบเขตการทำงาน (เช่น Docker) |
| Containment | การจำกัดขอบเขต — ป้องกันไม่ให้ความเสียหายลุกลาม |
| Sandbox | สภาพแวดล้อมที่แยกออกมา ปลอดภัยจากระบบหลัก |
| Docker in Docker | การรัน Docker ภายใน Docker container |
| Blast radius | ขอบเขตความเสียหายที่อาจเกิดขึ้น |
| Filter | ตัวกรองข้อมูล/คำสั่งเพื่อความปลอดภัย |
| MCP | Model Context Protocol — โปรโตคอลเชื่อมต่อ external tools |
| Prompt injection | การแทรกคำสั่งอันตรายผ่านข้อความหรือไฟล์ |
| Sanitize | ทำความสะอาด/กรองข้อมูลที่อ่อนไหวออก |
| Redact | ลบหรือปกปิดข้อมูลลับ (เช่น API keys) ก่อนส่งไปยัง LLM |
| SSRF protection | Server-Side Request Forgery protection — บล็อกการเข้าถึง private network |
| Website block list | รายการเว็บไซต์ที่ถูกบล็อก |
| Tyrith / Teereth | เครื่องมือ pre-exec security scanning จับ homograph และ injection attacks |
| Homograph attack | การโจมตีโดยใช้ตัวอักษรที่ดูเหมือนกันแต่มาจากชุดอักขระต่างกัน (เช่น Cyrillic vs Latin) |
| Homoglyph | ตัวอักษรที่มีรูปลักษณ์เหมือนกันแต่เป็นคนละตัว |
| Defense in depth | การป้องกันแบบหลายชั้นซ้อนทับกัน |
| Profile | โปรไฟล์ agent แยกกัน แต่ละอันมีการตั้งค่าความปลอดภัยเฉพาะ |
| Security hardening | การเสริมความแข็งแกร่งด้านความปลอดภัย |
| Opt-in / Opt-out | เลือกเข้าร่วม / เลือกไม่เข้าร่วม |
| Fail closed | เมื่อเกิดข้อผิดพลาด ให้ปฏิเสธ/บล็อกเป็นค่าเริ่มต้น |
| Cron | ตัวกำหนดเวลาทำงานอัตโนมัติ (ไม่แปล) |
| Sub agents | agent ย่อยที่ถูกเรียกโดย agent หลัก |
| Evergreen | เนื้อหาที่ยังคงใช้ได้ตลอดเวลา ไม่ล้าสมัยง่าย |
ซับไตเติ้ลภาษาไทย
ดาวน์โหลดหรือดูซับทั้งหมด
1 00:00:00,000 --> 00:00:04,832 ยินดีต้อนรับกลับมาสู่ Hermes Agent Masterclass โมดูลที่ 2 00:00:04,832 --> 00:00:09,663 10 เรื่องความปลอดภัย (Security) และนี่จะเป็นตอนจบของเรา 3 00:00:09,663 --> 00:00:14,583 ถ้าใครฝ่าฟันมาดูครบทั้ง 10 ตอน ขอแสดงความยินดีด้วยนะครับ 4 00:00:14,583 --> 00:00:20,732 คุณทำสำเร็จถึงบทสุดท้ายแล้ว เราได้เรียนรู้กันมาเยอะมากเกี่ยวกับวิธีใช้
เปิดดูซับไตเติ้ลทั้งหมด (345 segments)
1 00:00:00,000 --> 00:00:04,832 ยินดีต้อนรับกลับมาสู่ Hermes Agent Masterclass โมดูลที่ 2 00:00:04,832 --> 00:00:09,663 10 เรื่องความปลอดภัย (Security) และนี่จะเป็นตอนจบของเรา 3 00:00:09,663 --> 00:00:14,583 ถ้าใครฝ่าฟันมาดูครบทั้ง 10 ตอน ขอแสดงความยินดีด้วยนะครับ 4 00:00:14,583 --> 00:00:20,732 คุณทำสำเร็จถึงบทสุดท้ายแล้ว เราได้เรียนรู้กันมาเยอะมากเกี่ยวกับวิธีใช้ 5 00:00:20,732 --> 00:00:28,550 Hermes Agent และสิ่งที่มันทำได้ แต่ผมคิดว่าสมควรมีตอนจบที่พูดถึงเรื่องความปลอดภัยโดยเฉพาะ 6 00:00:28,550 --> 00:00:33,382 เพราะมันเป็นหัวข้อใหญ่มากเวลาเราใช้ agent ประเภทใดก็ตาม 7 00:00:33,382 --> 00:00:38,741 ก่อนอื่นมาทบทวนกันก่อนว่า 9 โมดูลที่ผ่านมาสร้างอะไรขึ้นมาบ้าง 8 00:00:38,741 --> 00:00:43,396 ตอนนี้คุณมี agent ที่สามารถอ่านและเขียนไฟล์ รันคำสั่ง 9 00:00:43,396 --> 00:00:47,789 shell ใช้จ่ายเงินด้วยซ้ำ ส่งข้อความหาคุณบนโทรศัพท์ 10 00:00:47,789 --> 00:00:52,093 และจากโมดูลล่าสุดยังรันทีมงานทั้งทีมได้ โดยมีหลาย 11 00:00:52,093 --> 00:01:00,087 profile ประสานงานกันบน Kanban board ได้ นั่นเป็นอำนาจที่ยิ่งใหญ่มากที่เรามอบให้กับสิ่งหนึ่ง 12 00:01:00,087 --> 00:01:04,655 และวันนี้จะเป็นอีกครึ่งหนึ่งของเรื่อง นั่นคือ Hermes 13 00:01:04,655 --> 00:01:10,278 จะปกป้องอำนาจนั้นไม่ให้กลายเป็นความรับผิด และที่สำคัญกว่านั้นคือ 14 00:01:10,278 --> 00:01:15,988 คุณจะปรับแต่งมันให้เข้ากับระดับความไว้วางใจที่คุณมีจริงได้อย่างไร 15 00:01:15,988 --> 00:01:20,556 ผมทราบว่าในวิดีโอก่อนๆ บางครั้งผมใช้ WSL บางครั้งใช้ 16 00:01:20,556 --> 00:01:26,178 Windows แต่ในวิดีโอนี้ผมจะใช้ WSL เพราะฟีเจอร์บางอย่างมีให้ใช้บน 17 00:01:26,178 --> 00:01:31,449 Linux เท่านั้น ผมจะชี้ให้เห็นตอนที่มันเจอ แต่ส่วนใหญ่คุณทำบน 18 00:01:31,449 --> 00:01:37,247 Windows ได้เหมือนกันนะครับ งั้นมาดูกันว่าวันนี้เราจะพูดถึงอะไรบ้าง 19 00:01:37,247 --> 00:01:41,990 อันดับแรกคือ trade-off ระหว่างความสามารถกับความปลอดภัย 20 00:01:41,990 --> 00:01:46,295 จากนั้นพูดถึง trust หรือใครสามารถเข้าถึงและคุยกับ 21 00:01:46,295 --> 00:01:51,478 agent ของคุณได้ จะพูดเรื่อง approvals หรือการอนุมัติเยอะมาก 22 00:01:51,478 --> 00:01:55,782 พูดถึง containers หรือว่ามันรันอยู่ที่ไหน filters 23 00:01:55,782 --> 00:02:00,438 หรือข้อมูลอะไรรั่วไหลได้บ้าง การทำ security hardening 24 00:02:00,438 --> 00:02:04,831 แล้วก็จะสร้างระบบ hardening จริงๆ และลองโจมตีมันดู 25 00:02:04,831 --> 00:02:09,399 งั้นเริ่มกันเลย และถ้าใครรัน agent เองและอยากเข้าถึง 26 00:02:09,399 --> 00:02:15,548 LLM wikis ที่ผมใช้เองสำหรับทำวิดีโอเหล่านี้เพื่อค้นคว้าและสร้างเนื้อหา 27 00:02:15,548 --> 00:02:19,940 ลองแวะชมโปรเจกต์ของผมที่ agentwikis.com ครับ ผมให้ 28 00:02:19,940 --> 00:02:24,421 wikis ทั้งหมดนี้ฟรีในหัวข้อต่างๆ มากมาย หรือจะสมัคร 29 00:02:24,421 --> 00:02:28,637 pro account ในราคา $9.99 ต่อเดือน ก็จะได้เข้าถึง 30 00:02:28,637 --> 00:02:34,787 wikis ขนาดใหญ่พิเศษ ซึ่งจะมีจำนวนหน้าและรายละเอียดมากกว่าในแต่ละหัวข้อ 31 00:02:34,787 --> 00:02:41,112 งั้นกลับเข้าสู่วิดีโอกันต่อ แต่ก่อนที่เราจะเริ่มพูดถึงฟีเจอร์ความปลอดภัย 32 00:02:41,112 --> 00:02:45,240 สำคัญมากที่จะต้องชี้ให้เห็นถึง trade-off ตรงนี้ 33 00:02:45,240 --> 00:02:52,268 เพราะน่าเสียดายที่ไม่มี agent ที่ปลอดภัยเต็มที่และมีความสามารถเต็มที่พร้อมกันได้ 34 00:02:52,268 --> 00:02:56,924 ผมเชื่อว่าหลายคนที่อยู่ตอนที่ Open Claw ออกมาครั้งแรก 35 00:02:56,924 --> 00:03:04,567 คงมีความกังวลเรื่องความปลอดภัยเยอะมาก มีเรื่องสยองขวัญเกี่ยวกับปัญหาความปลอดภัยอยู่เยอะ 36 00:03:04,567 --> 00:03:11,946 แต่ตอนนี้ส่วนใหญ่ได้รับการแก้ไขไปแล้ว มีองค์ประกอบความปลอดภัยหลายอย่างถูกเพิ่มเข้ามา 37 00:03:11,946 --> 00:03:16,075 ทำให้ agent ปลอดภัยขึ้นมาก แต่ก็ยังมี trade-off 38 00:03:16,075 --> 00:03:21,433 ระหว่าง agent ที่มีความสามารถเต็มที่ เข้าถึงไฟล์ทั้งหมดของคุณ 39 00:03:21,433 --> 00:03:26,265 ข้อมูลทั้งหมด เชื่อมต่อกับอีเมลและทุกแพลตฟอร์มที่คุณใช้ 40 00:03:26,265 --> 00:03:30,745 ทุกส่วนของชีวิตคุณ โดยไม่ต้องขออนุมัติใดๆ รันในโหมด 41 00:03:30,745 --> 00:03:35,225 YOLO สมบูรณ์บน PC หรืออุปกรณ์หลักของคุณ กับทุก tool 42 00:03:35,225 --> 00:03:41,814 ที่มี นี่คือความเป็นประโยชน์สูงสุด แต่ก็เป็นอันตรายสูงสุดเช่นกันใช่มั้ยครับ 43 00:03:41,814 --> 00:03:46,294 เพราะคำสั่งเดียวก็สามารถทำลายไฟล์สำคัญของคุณได้เยอะ 44 00:03:46,294 --> 00:03:52,180 หรือทำให้ข้อมูลรั่วไหล อีกด้านหนึ่งคือ agent ที่ปลอดภัยอย่างสมบูรณ์ 45 00:03:52,180 --> 00:03:56,309 แบบ Docker in Docker ที่ทุกอย่างถูก sandbox ไว้ 46 00:03:56,309 --> 00:04:03,688 ไม่มีสิทธิ์ทำอะไรเลย ทำอันตรายอะไรไม่ได้ แต่มันก็ทำอะไรที่มีประโยชน์มากไม่ได้เช่นกัน 47 00:04:03,688 --> 00:04:08,519 ดังนั้นมันขึ้นอยู่กับคุณว่าจะยืนตรงไหนระหว่างสองขั้วนี้ 48 00:04:08,519 --> 00:04:13,175 อะไรที่เหมาะกับงานของคุณ และคุณยอมรับความเสี่ยงแค่ไหน 49 00:04:13,175 --> 00:04:18,973 7 ชั้นความปลอดภัยที่เราจะพูดถึงเป็น "dial" หรือปุ่มปรับระดับนะครับ 50 00:04:18,973 --> 00:04:23,190 ไม่ใช่ checklist ที่ต้องเปิดให้หมด คุณต้องคิดว่า 51 00:04:23,190 --> 00:04:27,494 สำหรับ agent นี้ใน environment นี้ ผมอยากให้มันทำ 52 00:04:27,494 --> 00:04:31,887 X, Y, Z วิธีที่ปลอดภัยที่สุดในการทำสิ่งนั้นคืออะไร 53 00:04:31,887 --> 00:04:36,103 นั่นคือสิ่งที่ security hardening เป็นจริงๆ งั้น 54 00:04:36,103 --> 00:04:40,408 dial เหล่านั้นอยู่ตรงไหน? มันขึ้นอยู่กับว่าคุณใช้ 55 00:04:40,408 --> 00:04:45,415 agent นี้อย่างไร สำหรับคนส่วนใหญ่ที่รันบนเครื่องของตัวเอง 56 00:04:45,415 --> 00:04:50,686 กับแล็ปท็อปเครื่องเดียวหรืออุปกรณ์ส่วนตัว การทำพิธีกรรมน้อยๆ 57 00:04:50,686 --> 00:04:55,078 ที่นี่ถือว่าถูกต้องแล้ว การทำ allow list หนักๆ และ 58 00:04:55,078 --> 00:05:01,052 sandbox บนแล็ปท็อปของตัวเองเป็นแค่อุปสรรคโดยไม่มีภัยคุกคามที่คุ้มค่า 59 00:05:01,052 --> 00:05:05,620 เพราะคุณเป็นคนเดียวที่จะคุยกับมันอยู่แล้วใช่มั้ยครับ 60 00:05:05,620 --> 00:05:10,364 คุณไม่ได้แชร์มันกับใคร แต่มีคนที่ใช้ agent กับทีมเล็กๆ 61 00:05:10,364 --> 00:05:16,337 มากขึ้นเรื่อยๆ และอาจมี shared gateway ตรงนี้คือจุดที่คุณควรเริ่มใช้ 62 00:05:16,337 --> 00:05:21,081 allow list จริงจัง ใช้ manual smart approval และอาจใช้ 63 00:05:21,081 --> 00:05:25,210 sandbox back end สำหรับทุกอย่างที่ trigger ผ่าน 64 00:05:25,210 --> 00:05:29,602 gateway และก็มีการ deploy ที่เปิดสาธารณะ รับ input 65 00:05:29,602 --> 00:05:33,731 ที่ไม่น่าไว้วางใจ เช่น webhooks, open DMs, cron 66 00:05:33,731 --> 00:05:39,353 บนเนื้อหาที่ scrape มา สิ่งที่คุณควบคุมไม่ได้และมาจากแหล่งภายนอก 67 00:05:39,353 --> 00:05:44,009 ในกรณีนี้คุณอาจต้องการปฏิเสธการอนุมัติเป็นค่าเริ่มต้น 68 00:05:44,009 --> 00:05:48,841 ใช้ sandbox back end ใช้ Tyrites ซึ่งเราจะพูดถึงภายหลัง 69 00:05:48,841 --> 00:05:53,145 block list เว็บไซต์ และปิดการเข้าถึง private URLs 70 00:05:53,145 --> 00:05:59,382 เราจะกลับมาพูดเรื่องนี้ท้ายวิดีโอ แต่ให้ลองคิดไว้บ้างตามการใช้งานของคุณ 71 00:05:59,382 --> 00:06:04,741 พาร์ต 2 คือ trust layer หรือชั้นความไว้วางใจ ซึ่งเกี่ยวกับว่า 72 00:06:04,741 --> 00:06:09,573 agent จะคุยกับใครได้บ้าง ก่อนที่เราจะถามว่ามันทำอะไรได้ 73 00:06:09,573 --> 00:06:13,877 เรากำลังพูดถึง gateway ที่นี่ และการพูดถึง Hermes 74 00:06:13,877 --> 00:06:18,270 gateway คือการเชื่อมต่อกับ messaging platforms และ 75 00:06:18,270 --> 00:06:22,574 cron scheduler เป็นหลัก เมื่อข้อความมาถึง gateway 76 00:06:22,574 --> 00:06:26,703 Hermes จะส่งมันผ่านห่วงโซ่ของการตรวจสอบตามลำดับ 77 00:06:26,703 --> 00:06:30,832 และค่าเริ่มต้นสุดท้ายคือปฏิเสธ Hermes จะตรวจสอบ 78 00:06:30,832 --> 00:06:35,136 per platform allow all เช่น คุณสามารถตั้ง Discord 79 00:06:35,136 --> 00:06:40,143 อนุญาตผู้ใช้ทั้งหมด และตรงนี้เรามี dashboard ถ้าเข้าไปที่ 80 00:06:40,143 --> 00:06:44,448 channels แล้วสมมติว่าคุณตั้งค่า Discord ไว้ แม้ใน 81 00:06:44,448 --> 00:06:48,577 WSL agent นี้ผมจะไม่มี แต่คุณเลื่อนลงมาดูได้ว่า 82 00:06:48,577 --> 00:06:54,375 allow all users เป็น true หรือ false โดยค่าเริ่มต้นจะเป็นการปฏิเสธ 83 00:06:54,375 --> 00:06:59,294 แต่นี่เป็น dial หนึ่งที่คุณปรับได้ เป็นอันที่รุนแรงหน่อย 84 00:06:59,294 --> 00:07:03,774 แต่ก็ทำได้ ต่อไปคือ DM pairing approved list Hermes 85 00:07:03,774 --> 00:07:08,342 จะตรวจสอบว่าคุณอยู่ใน approved list หรือไม่ แล้วก็มี 86 00:07:08,342 --> 00:07:12,471 platform allow list เช่น Telegram allowed users 87 00:07:12,471 --> 00:07:17,127 คล้ายกับ Discord ที่ผมเพิ่งแสดงให้ดู คุณสามารถตั้งค่า 88 00:07:17,127 --> 00:07:21,959 Telegram user IDs ที่นี่ได้ ส่วน user ID ของคุณหาได้จาก 89 00:07:21,959 --> 00:07:26,175 get user info bot บน Telegram ยังมี global allow 90 00:07:26,175 --> 00:07:30,304 list คือ gateway allowed users และ global allow 91 00:07:30,304 --> 00:07:34,872 all คือ gateway allow all users ถ้าไม่มีอันไหนตรงเลย 92 00:07:34,872 --> 00:07:39,265 ค่าเริ่มต้นคือปฏิเสธข้อความ ทำให้มันไม่มาถึง agent 93 00:07:39,265 --> 00:07:43,920 เลย ดังนั้นไม่ตั้งค่าอะไรเลยหมายความว่าทุกคนถูกปฏิเสธ 94 00:07:43,920 --> 00:07:48,313 โดยจะมี startup warning บอกคุณตรงๆ แบบนั้น คุณต้อง 95 00:07:48,313 --> 00:07:52,529 opt-in เพื่อเปิดสิ่งนี้ คุณไม่สามารถลืมเข้าไปได้ 96 00:07:52,529 --> 00:07:57,449 คุณต้องตั้งค่าให้ชัดเจนว่าใครจะได้รับอนุญาตให้สื่อสารกับ 97 00:07:57,449 --> 00:08:04,213 agent ของคุณ ใน Hermes agent เครื่องนี้ผมไม่ได้ตั้งค่าอะไรไว้เหมือนที่คุณเห็น 98 00:08:04,213 --> 00:08:08,430 แต่ผมจะอนุมัติ Telegram กับ allowed users สำหรับ 99 00:08:08,430 --> 00:08:13,086 user ID ของผม มีหลายวิธีที่ทำได้ คุณเคยเห็นผมทำมาก่อน 100 00:08:13,086 --> 00:08:17,390 แต่เช่นใน configure Telegram ตั้งค่า Telegram bot 101 00:08:17,390 --> 00:08:21,783 token และ allowed Telegram user ID นี่คือ ID ของผม 102 00:08:21,783 --> 00:08:27,317 และสำหรับส่วนนี้ผมจะปล่อยว่างไว้ เพื่อให้ไม่อนุญาตผู้ใช้ทั้งหมด 103 00:08:27,317 --> 00:08:31,885 ตอนนี้เริ่ม gateway ขึ้นมา ก็เห็นได้ว่าผมพิมพ์ hello 104 00:08:31,885 --> 00:08:36,189 ไปใน Telegram bot ตอบกลับมาว่า "Hello Tommy, what 105 00:08:36,189 --> 00:08:40,494 are you working on?" ผมถามว่าใครอยู่ใน allow list 106 00:08:40,494 --> 00:08:44,798 และก็เห็นได้ว่ามีแค่ผม Tommy ใน DM นี้ ซึ่งก็เป็น 107 00:08:44,798 --> 00:08:49,981 home channel ด้วย และไม่มีใครใน pairing list เพราะผมใส่เป็น 108 00:08:49,981 --> 00:08:54,901 ID ตรงๆ และ Telegram allowed chats ใน config ก็ว่างเปล่า 109 00:08:54,901 --> 00:08:59,030 ดังนั้นมีแค่ chat นี้เท่านั้นที่จะเข้าถึง agent 110 00:08:59,030 --> 00:09:03,510 ของผมได้ ถ้ามีคนอื่นพยายามคุยกับ Hermes agent ของผม 111 00:09:03,510 --> 00:09:09,484 แม้จะรู้ชื่อ bot ก็ตาม agent จะไม่ตอบ จะถูกปฏิเสธโดยอัตโนมัติเลยครับ 112 00:09:09,484 --> 00:09:13,964 พาร์ต 3 คือเรื่อง approvals หรือการอนุมัติ ซึ่งก็มี 113 00:09:13,964 --> 00:09:18,883 dial ให้ปรับหลายตัวเช่นกัน งั้นมาดูวิธีตั้งค่า approvals 114 00:09:18,883 --> 00:09:23,100 ต่างๆ กัน ค่าเริ่มต้นคือ Manual ซึ่งคุณสามารถใช้ 115 00:09:23,100 --> 00:09:28,634 CLI ได้ การอนุมัติทุกครั้งจะมี timeout 60 วินาทีเป็นค่าเริ่มต้น 116 00:09:28,634 --> 00:09:32,763 และถ้าหมดเวลาจะถือว่าปฏิเสธ (fail close) สำหรับ 117 00:09:32,763 --> 00:09:37,419 gateway คุณใช้ปุ่ม native หรือตอบ yes เพื่ออนุมัติได้ 118 00:09:37,419 --> 00:09:42,690 ตัวเลือกพื้นฐานมี 4 แบบคือ approve once (อนุมัติครั้งเดียว), 119 00:09:42,690 --> 00:09:47,170 approve in session (อนุมัติใน session นี้), approve 120 00:09:47,170 --> 00:09:51,914 always (อนุมัติตลอดไป) หรือ deny (ปฏิเสธ) ตัวอย่างเช่น 121 00:09:51,914 --> 00:09:57,272 ถ้าผมบอกให้ลบ directory หนึ่ง ซึ่งเป็นการทำลายล้างอย่างชัดเจน 122 00:09:57,272 --> 00:10:02,192 มันจะขึ้นว่า command approval required เหตุผล: recursive 123 00:10:02,192 --> 00:10:06,584 delete ซึ่งมักจะถูก flag เสมอ แล้วคุณเลือกได้ว่าจะ 124 00:10:06,584 --> 00:10:10,976 allow once, session หรือ deny ครับ จากนั้นมี smart 125 00:10:10,976 --> 00:10:15,457 approvals ซึ่งใช้ auxiliary LLM มาประเมินความเสี่ยง 126 00:10:15,457 --> 00:10:19,673 คำสั่งที่ปลอดภัยอย่างชัดเจนจะถูกอนุมัติอัตโนมัติ 127 00:10:19,673 --> 00:10:26,262 คำสั่งที่เป็นอันตรายจริงๆ จะถูกปฏิเสธอัตโนมัติ และกรณีที่ไม่แน่ใจจะส่งไปที่ 128 00:10:26,262 --> 00:10:30,391 manual ให้คุณเลือกหนึ่งในสี่ตัวเลือก คุณทำได้ใน 129 00:10:30,391 --> 00:10:34,783 CLI เช่นกัน ด้วย `Hermes config set approvals.mode 130 00:10:34,783 --> 00:10:39,088 smart` แล้วก็จะเห็นผลเหมือนกัน ผม restart gateway 131 00:10:39,088 --> 00:10:44,358 แล้วบอกให้ลบ directory นั้น แล้วมันก็ถูกลบไปเลยโดยไม่ถามอะไร 132 00:10:44,358 --> 00:10:49,014 เพราะ smart mode เปิดอยู่ และมันตัดสินใจว่า directory 133 00:10:49,014 --> 00:10:57,623 นี้ลบได้ปลอดภัย ซึ่งก็จริงเพราะมันว่างเปล่า คุณเห็นได้ว่าผมถามว่าทำไมมันถึงตัดสินใจว่าลบได้ปลอดภัย 134 00:10:57,623 --> 00:11:02,455 ข้อแรกคือเป็นคำสั่งชัดเจน ผมบอกเจาะจงว่าให้ลบ directory 135 00:11:02,455 --> 00:11:07,286 นี้ และมี path ชัดเจน ผมให้ path ที่แน่นอน มีการตรวจสอบ 136 00:11:07,286 --> 00:11:11,767 scope ก่อนลบ พบว่ามีแค่ไฟล์ readme หนึ่งไฟล์ทิ้งไว้ 137 00:11:11,767 --> 00:11:15,983 ไม่ใช่ project path ใหญ่โต เป็นแค่ markdown file 138 00:11:15,983 --> 00:11:20,200 ธรรมดา และไม่มีความคลุมเครือ นี่คือสิ่งที่ smart 139 00:11:20,200 --> 00:11:24,329 mode มอบให้ agent จะมองเห็นและตัดสินใจแบบนี้ได้ 140 00:11:24,329 --> 00:11:28,545 ผมมักใช้ smart mode หรือที่เรียกว่า auto approve 141 00:11:28,545 --> 00:11:33,728 ใน Codex และ Claude Code เพราะไม่อยากต้องมาอนุมัติทีละอย่าง 142 00:11:33,728 --> 00:11:38,736 และก็ไม่เคยมีปัญหาใหญ่ๆ เลยครับ คุณยังสามารถปิดการตรวจสอบ 143 00:11:38,736 --> 00:11:43,392 approval ทั้งหมดได้ ซึ่งเทียบเท่าการรัน YOLO ตลอดเวลา 144 00:11:43,392 --> 00:11:48,838 YOLO mode คือมันจะทำทุกอย่างตามใจชอบโดยไม่ถามคุณในเกือบทุกกรณี 145 00:11:48,838 --> 00:11:53,758 ใน dashboard ที่หมวด security ตรง mode คุณจะเห็นตัวเลือก 146 00:11:53,758 --> 00:11:59,468 ask, manual ask, และ YOLO พูดง่ายๆ คืออนุมัติคำสั่งอันตรายทั้งหมด 147 00:11:59,468 --> 00:12:03,596 หรือปฏิเสธ คุณสลับไปมาได้ที่นี่ และอีกนิดเรื่อง 148 00:12:03,596 --> 00:12:07,989 YOLO mode คุณเปิดได้จาก CLI flag เช่น `Hermes chat 149 00:12:07,989 --> 00:12:12,469 --yolo` หรือเปิดใน chat โดยพิมพ์ YOLO เพื่อสลับโหมด 150 00:12:12,469 --> 00:12:16,598 ข้ามการอนุมัติคำสั่งอันตรายทั้งหมด หรือตั้งเป็น 151 00:12:16,598 --> 00:12:21,254 environment variable หรือตามที่ผมแสดงให้ดูก่อนหน้านี้ 152 00:12:21,254 --> 00:12:25,646 ถ้าเปิดใน TUI จะมี warning สีแดงสดพร้อมเครื่องหมาย 153 00:12:25,646 --> 00:12:30,302 caution เพื่อให้คุณรู้ชัดว่ามันเปิดอยู่ และคุณ toggle 154 00:12:30,302 --> 00:12:36,890 ปิดได้ครับ แต่ YOLO ก็มีขีดจำกัด มีคำสั่งบางอย่างที่จะถูกปฏิเสธไม่ว่าจะเปิด 155 00:12:36,890 --> 00:12:41,634 YOLO หรือไม่ก็ตาม เช่น `rm -rf` และ variants ที่ชัดเจน 156 00:12:41,634 --> 00:12:46,993 ซึ่งจะลบทั้ง file system root เห็นได้ชัดว่าไม่ต้องการสิ่งนั้น 157 00:12:46,993 --> 00:12:51,297 คำสั่งเหล่านี้เสี่ยงเกินไปแม้จะตั้ง YOLO mode ไว้ 158 00:12:51,297 --> 00:12:56,656 มันถูกตั้งให้ trip ก่อนที่ approval layer จะเห็นคำสั่งด้วยซ้ำ 159 00:12:56,656 --> 00:13:00,873 ไม่มี override flag ใดๆ ถ้าคุณจำเป็นต้องรันจริงๆ 160 00:13:00,873 --> 00:13:05,089 ก็รันนอก agent ไปเลย อย่าทำใน agent ทำด้วยตัวเอง 161 00:13:05,089 --> 00:13:09,570 manual เถอะครับ ใน default profile ผมสั่งให้มันหยุด 162 00:13:09,570 --> 00:13:13,698 gateway process ที่ Hermes รันอยู่ ซึ่งถูก flag 163 00:13:13,698 --> 00:13:19,672 เป็นคำสั่งอันตราย และนี่คือ manual mode คุณตัดสินใจได้ว่าจะทำอย่างไร 164 00:13:19,672 --> 00:13:24,152 ผมขอ deny ที่นี่ ลองเปลี่ยนเป็น YOLO mode บ้าง เปิด 165 00:13:24,152 --> 00:13:29,072 YOLO สั่งเดิม "Can you kill the Hermes gateway process?" 166 00:13:29,072 --> 00:13:33,728 และผลคือก่อนที่มันจะตอบกลับ gateway ก็ถูก kill ไปแล้ว 167 00:13:33,728 --> 00:13:38,383 เพราะอยู่ใน YOLO mode แต่ YOLO ไม่ได้ทำทุกอย่างนะครับ 168 00:13:38,383 --> 00:13:42,951 ลองสั่งให้ remove root file system โดยไม่มี preserve 169 00:13:42,951 --> 00:13:48,047 root ซึ่งไม่เพียงแต่เป็นการทำลายล้างแต่ยังกู้คืนไม่ได้ด้วย 170 00:13:48,047 --> 00:13:52,263 นี่จึงถูก hard block ก่อนที่ agent จะได้ทำงานเลย 171 00:13:52,263 --> 00:13:56,568 พอผมสั่งให้รัน agent ตอบชัดเจนว่า "I will not run 172 00:13:56,568 --> 00:14:00,697 that" เพราะมันจะลบทั้ง file system และทำลายระบบ 173 00:14:00,697 --> 00:14:05,440 ดังนั้นแม้ใน YOLO mode ก็มีบางสิ่งที่มันไม่ทำ ซึ่งก็ดี 174 00:14:05,440 --> 00:14:10,711 เราคงไม่อยากลบ file system ทั้งหมดผ่าน agent โดยไม่ได้ตั้งใจ 175 00:14:10,711 --> 00:14:14,840 ถ้าจำเป็นจริงๆ ก็ทำเอง manual ไปเลยครับ พาร์ต 4 176 00:14:14,840 --> 00:14:19,232 คือเรื่อง containment หรือการจำกัดขอบเขต container 177 00:14:19,232 --> 00:14:23,361 คือขอบเขต ถ้าคุณรันในเครื่องเหมือนที่ผมทำตอนนี้ 178 00:14:23,361 --> 00:14:28,193 หรือบางครั้ง SSH เข้า VPS agent ก็ไม่มีขอบเขต container 179 00:14:28,193 --> 00:14:33,551 approval layer คือเกราะป้องกันเดียวของคุณ ในกรณีนี้การตรวจสอบ 180 00:14:33,551 --> 00:14:38,032 dangerous command จะเปิดอยู่ อย่างไรก็ตาม ถ้าคุณใช้ 181 00:14:38,032 --> 00:14:42,160 Docker หรืออะไรที่คล้ายกัน การตรวจสอบ dangerous 182 00:14:42,160 --> 00:14:46,816 command จะถูกข้ามไป เพราะสมมติฐานคือ host file system 183 00:14:46,816 --> 00:14:51,209 ไม่สามารถเข้าถึงได้ กรณีแย่ที่สุดคือ container พัง 184 00:14:51,209 --> 00:14:55,689 ไม่ใช่ host แต่สิ่งที่ต้องทราบคือ นี่เป็นแค่ส่วนของ 185 00:14:55,689 --> 00:15:01,135 back end ดังนั้น sandbox ไม่ได้แปลว่าปลอดภัยอย่างไม่มีเงื่อนไข 186 00:15:01,135 --> 00:15:05,528 เราเคยพูดถึงเรื่องนี้ในโมดูล 2 ตอนที่ผมแสดง Docker 187 00:15:05,528 --> 00:15:11,062 เป็น back end แต่ Docker forward ENV จะว่างเปล่าเป็นค่าเริ่มต้น 188 00:15:11,062 --> 00:15:15,279 สิ่งใดที่คุณ forward เข้า container จะถูกอ่านได้ 189 00:15:15,279 --> 00:15:21,955 และสามารถถูกขโมยได้โดย code ที่รันอยู่ในนั้น นี่คือสิ่งที่เราเห็นใช่มั้ยครับ 190 00:15:21,955 --> 00:15:27,929 และนี่คือเหตุผลที่การเลือก deployment back end เป็นโมดูลยาวทั้งโมดูล 191 00:15:27,929 --> 00:15:32,321 คุณยังสามารถติดตั้ง Hermes agent บน Docker Desktop 192 00:15:32,321 --> 00:15:36,450 ได้ ภายใน container และใช้ Docker เป็น back end 193 00:15:36,450 --> 00:15:41,984 ได้ด้วย นั่นคือสถานการณ์ Docker in Docker แต่มันค่อนข้างซับซ้อน 194 00:15:41,984 --> 00:15:46,201 เลยไม่ขออธิบายในวิดีโอนี้ ผมจะแสดงวิธีรัน Hermes 195 00:15:46,201 --> 00:15:50,593 ภายใน Docker ให้ดูแทน และอย่างที่บอก นี่คือวิธีที่ 196 00:15:50,593 --> 00:15:54,898 2 คือ Docker เป็น terminal back end ซึ่งทำในโมดูล 197 00:15:54,898 --> 00:16:00,696 2 ถ้าสนใจทำแบบที่ agent รันบน host แต่ execute คำสั่งทุกอย่างภายใน 198 00:16:00,696 --> 00:16:05,000 Docker sandbox container เดียวที่ persistent อยู่ 199 00:16:05,000 --> 00:16:09,568 ดูได้ในโมดูล 2 แต่ตอนนี้ผมจะแสดงวิธีรัน Hermes ภายใน 200 00:16:09,568 --> 00:16:13,785 Docker เอง ซึ่งเป็นการเพิ่มความปลอดภัย หน้านี้ใน 201 00:16:13,785 --> 00:16:18,265 News Research docs จะให้ข้อมูลส่วนใหญ่ที่คุณต้องการ 202 00:16:18,265 --> 00:16:22,921 ผมจะรันคำสั่งเหล่านี้ให้ดู เราจะเห็นว่ากำลัง download 203 00:16:22,921 --> 00:16:27,226 agent ผม copy และ paste คำสั่งนี้มา ทำผ่าน WSL ใน 204 00:16:27,226 --> 00:16:32,233 PowerShell กำลัง pull image จาก nousresearch/hermes-agent 205 00:16:32,233 --> 00:16:36,801 และผมมี Docker รันอยู่ พอติดตั้งเสร็จก็เข้าสู่ setup 206 00:16:36,801 --> 00:16:41,896 เลย image ก็ขึ้นมา ไม่ต้องทำอะไรใน Docker เอง มาตั้งค่ากัน 207 00:16:41,896 --> 00:16:46,025 เมื่อตั้งค่าเสร็จแล้ว คุณรันใน gateway mode ได้ 208 00:16:46,025 --> 00:16:50,505 เมื่อ configure แล้ว คุณรัน container ใน background 209 00:16:50,505 --> 00:16:54,985 เป็น persistent gateway ได้ ด้วยคำสั่ง `docker run` 210 00:16:54,985 --> 00:16:59,641 ตามนี้ คุณต้องตั้งค่าสิ่งที่ gateway จะทำ เช่น expose 211 00:16:59,641 --> 00:17:03,858 OpenAI-compatible API server และ health endpoint 212 00:17:03,858 --> 00:17:08,250 ซึ่งเป็น optional ถ้าคุณใช้แค่ chat platforms เช่น 213 00:17:08,250 --> 00:17:12,555 Telegram ครับ แต่จำเป็นถ้าคุณต้องการใช้ dashboard 214 00:17:12,555 --> 00:17:16,947 หรือ external tools เข้าถึง gateway ผมรันคำสั่งนี้ 215 00:17:16,947 --> 00:17:21,691 ก็ copy และ paste มาอีกเช่นกัน และตอนนี้มันรันอยู่แล้ว 216 00:17:21,691 --> 00:17:27,489 มาดูอีกครั้ง มันอยู่บน port localhost นี่คือคำสั่งที่คุณต้องใช้รัน 217 00:17:27,489 --> 00:17:31,793 CLI ด้วย ตอนนี้เราอยู่ใน CLI คุณสามารถมี CLI chat 218 00:17:31,793 --> 00:17:36,625 ปกติได้ที่นี่ session นี้อยู่ใน Hermes Docker container 219 00:17:36,625 --> 00:17:41,281 และมี container ID ครบ Docker container บน WSL ไม่ใช่ 220 00:17:41,281 --> 00:17:48,221 bare metal Windows และ Linux การรันใน Docker ซับซ้อนกว่ารันในเครื่องเองนิดหน่อย 221 00:17:48,221 --> 00:17:53,140 ดังนั้นคุณควรอ่าน docs เหล่านี้เพื่อหลีกเลี่ยงปัญหาใหญ่ๆ 222 00:17:53,140 --> 00:17:57,357 ครับ พาร์ต 5 คือเรื่อง filters ซึ่งเป็นชั้นที่ 4 223 00:17:57,357 --> 00:18:03,418 และ 5 จาก 7 ชั้น บวกกับ network controls เนื้อหาคืออะไรรั่วไหลได้บ้าง 224 00:18:03,418 --> 00:18:08,338 และข้อความใดพยายามจะ hijack ระบบ MCP เห็นแทบไม่มีอะไรเลย 225 00:18:08,338 --> 00:18:12,818 นี่เป็นการเรียกกลับไปโมดูล 6 ที่เราพูดถึง MCP เมื่อ 226 00:18:12,818 --> 00:18:17,122 MCP server ทำงานเป็น sub process มันจะไม่ inherit 227 00:18:17,122 --> 00:18:21,778 environment ของคุณ สิ่งที่ผ่านเข้าไปมีเพียงของพื้นฐาน 228 00:18:21,778 --> 00:18:26,785 เช่น PATH, HOME, USER และสิ่งที่คุณตั้งใน ENV อย่างชัดเจน 229 00:18:26,785 --> 00:18:30,914 ส่วนที่เหลือถูก strip ออกหมด Provider API keys, 230 00:18:30,914 --> 00:18:36,449 gateway tokens, secret ทุกอย่างที่คุณไม่ได้ให้สิทธิ์อย่างชัดเจน 231 00:18:36,449 --> 00:18:40,753 error messages ก็ถูก sanitize ด้วย ดังนั้น GitHub 232 00:18:40,753 --> 00:18:45,409 PATs หรือ keys และ tokens ทุกชนิดจะถูก redact ก่อนถึง 233 00:18:45,409 --> 00:18:50,153 LLM เสมอ และ version 18 ยังเพิ่ม Slack token reduction 234 00:18:50,153 --> 00:18:55,336 ด้วยครับ มีอีกเรื่องที่ควรทราบ เพราะไฟล์ของคุณก็โจมตีคุณได้ 235 00:18:55,336 --> 00:19:01,397 agents.md, soul.md, .cursorrules หรืออะไรก็ตามที่กลายเป็นส่วนหนึ่งของ 236 00:19:01,397 --> 00:19:06,053 system prompt จะถูก scan ก่อน load มันจะตรวจหาข้อความ 237 00:19:06,053 --> 00:19:11,236 "ignore prior instructions" HTML comments ที่ซ่อนคำน่าสงสัย 238 00:19:11,236 --> 00:19:15,453 ความพยายามอ่าน ENV หรือ credentials และรูปแบบการ 239 00:19:15,453 --> 00:19:20,372 exfiltration ผ่าน curl นี่คือ prompt injection เบื้องต้น 240 00:19:20,372 --> 00:19:25,467 และจะถูก block อัตโนมัติ ไม่ใช่ fail แบบเงียบๆ คุณจะได้รับ 241 00:19:25,467 --> 00:19:29,684 block message ชัดเจนว่าอะไรถูกหยุดและเพราะเหตุใด 242 00:19:29,684 --> 00:19:34,252 ยังมี network-level guards อีกสองตัวที่ทำงานตลอดเวลา 243 00:19:34,252 --> 00:19:38,820 อันแรกคือ SSRF protection ที่เปิดอยู่เสมอ ตรวจสอบทุก 244 00:19:38,820 --> 00:19:43,125 URL ที่ tool ใดๆ ใช้ บล็อก private network ranges 245 00:19:43,125 --> 00:19:48,044 และ link-local addresses รวมถึง cloud metadata endpoints 246 00:19:48,044 --> 00:19:52,348 และจะ fail closed เมื่อ DNS failure ส่วน redirect 247 00:19:52,348 --> 00:19:56,653 chains จะถูก revalidate ทุก hop อีกอันคือ website 248 00:19:56,653 --> 00:20:00,782 block list ที่คุณกำหนด rules เองได้ ใน security 249 00:20:00,782 --> 00:20:05,438 settings ตรง website block list คุณสามารถตั้ง domains 250 00:20:05,438 --> 00:20:10,094 ใน shared block list file ได้ชัดเจน ซึ่งจะถูก enforce 251 00:20:10,094 --> 00:20:14,222 บน web search, web extract และ browser navigate 252 00:20:14,222 --> 00:20:18,878 ครบทุก tool ที่ใช้ URL คุณเห็นได้ใน dashboard ที่หมวด 253 00:20:18,878 --> 00:20:23,007 security เลย เปิดใช้ website block list enabled 254 00:20:23,007 --> 00:20:27,751 แล้วใส่ domain ที่ต้องการบล็อก ยังมี opt-out โดยตั้งใจ 255 00:20:27,751 --> 00:20:31,880 คือตั้ง `security.allow_private_urls` เป็น true 256 00:20:31,880 --> 00:20:36,008 ค่าเริ่มต้นคือ false เพื่อให้ web tools เข้าถึง 257 00:20:36,008 --> 00:20:40,928 LAN ของคุณได้ ซึ่ง legit สำหรับเครือข่าย Alama ภายในบ้าน 258 00:20:40,928 --> 00:20:45,847 แต่อันตรายมากบน public-facing gateway ดังนั้นปล่อยปิดไว้ 259 00:20:45,847 --> 00:20:49,976 ยกเว้นรู้ว่าทำไมต้องเปิดครับ ต่อมาเราจะมาพูดถึง 260 00:20:49,976 --> 00:20:54,193 Tyrith หรือ Teereth (ไม่แน่ใจว่าออกเสียงอย่างไร) 261 00:20:54,193 --> 00:20:58,409 แต่นี่เป็น open source tool แยกต่างหากที่ Hermes 262 00:20:58,409 --> 00:21:03,417 รองรับอย่างเป็นทางการ ไม่ใช่ core Hermes code แต่ก็ไม่ใช่ 263 00:21:03,417 --> 00:21:07,985 bolt-on ที่คุณต้อง configure เอง ถ้าเข้าไปที่ config 264 00:21:07,985 --> 00:21:12,641 security คุณจะเห็น Tyrith ตั้งค่าเป็น enabled แล้วใส่ 265 00:21:12,641 --> 00:21:17,472 path พร้อม config เพิ่มเติมอีกสองสามตัว Tyrith คืออะไร? 266 00:21:17,472 --> 00:21:22,216 มันจับสิ่งที่ pattern matching ทำไม่ได้ เช่น homograph 267 00:21:22,216 --> 00:21:26,433 URL spoofing ที่ domain ดูเหมือนของจริงแต่ไม่ใช่ 268 00:21:26,433 --> 00:21:30,825 หรือรูปแบบ pipe to interpreter เช่น curl หรือ bash 269 00:21:30,825 --> 00:21:34,954 และ terminal injection attacks มัน auto install 270 00:21:34,954 --> 00:21:39,522 ครั้งแรกที่ใช้จาก GitHub releases พร้อม SHA checksum 271 00:21:39,522 --> 00:21:44,266 ค่าเริ่มต้นคือเปิดใช้ การโจมตีที่พบบ่อยคือใช้ spoofing 272 00:21:44,266 --> 00:21:48,658 แบบนี้ และ Teereth จะทำ pre-exec security scanning 273 00:21:48,658 --> 00:21:52,962 ที่ผมพูดถึง มีรูปแบบ spoofing หลายแบบที่มันจับได้ 274 00:21:52,962 --> 00:21:57,091 ในตัวอย่างนี้ตัว I จริงๆ แล้วเป็น Cyrillic I ใน 275 00:21:57,091 --> 00:22:01,220 hostname ไม่ใช่ Latin I อย่างที่ควรเป็น นี่เป็น 276 00:22:01,220 --> 00:22:05,349 Teereth verdict จริงไม่ใช่จำลอง ใน Hermes agent 277 00:22:05,349 --> 00:22:10,444 ผมสั่งให้รัน URL ที่ถูก spoof นี้ และมันจับได้ ขึ้นว่าเป็น 278 00:22:10,444 --> 00:22:15,276 dangerous command เหตุผล: confusable Unicode characters 279 00:22:15,276 --> 00:22:19,580 in the text คือใช้ Cyrillic look-alike แทน I จริง 280 00:22:19,580 --> 00:22:23,885 และ "appearing near ASCII text which may indicate 281 00:22:23,885 --> 00:22:28,541 a homoglyph attack" นี่คือ Teereth ทำงาน ปฏิเสธคำสั่ง 282 00:22:28,541 --> 00:22:33,109 คุณยัง allow ได้อยู่ แต่ถ้าปล่อยให้หมดเวลา 60 วินาที 283 00:22:33,109 --> 00:22:37,589 (ค่าเริ่มต้น) มันจะถูกปฏิเสธอัตโนมัติ นี่คือสิ่งที่ 284 00:22:37,589 --> 00:22:43,211 Teereth จับได้ เป็นฟีเจอร์ความปลอดภัยที่ดีมาก มันอธิบายชัดเจนว่า 285 00:22:43,211 --> 00:22:47,691 ตัว I ดูเหมือนจะเป็น Cyrillic small letter I ไม่ใช่ 286 00:22:47,691 --> 00:22:52,084 Latin I ปกติ ซึ่งเป็นเทคนิค phishing ที่พบบ่อยครับ 287 00:22:52,084 --> 00:22:57,618 ที่ดีคือทั้งหมดนี้ปรับได้ตาม profile ซึ่งจำากโมดูลที่แล้วได้ว่า 288 00:22:57,618 --> 00:23:02,362 profile เป็น agent แยกกัน สมมติผมอยากให้ Coder profile 289 00:23:02,362 --> 00:23:06,491 หรือ Coder agent มีความปลอดภัยสูงขึ้น ผมเปลี่ยน 290 00:23:06,491 --> 00:23:10,795 back end จาก local เป็น Docker หรือ SSH หรืออื่นๆ 291 00:23:10,795 --> 00:23:15,187 ตามต้องการได้ เช่น ผมต้องการให้ Coder รันใน Docker 292 00:23:15,187 --> 00:23:19,404 อย่างเดียว เมื่อ config เป็น backend option แล้ว 293 00:23:19,404 --> 00:23:23,796 ก็ตั้งได้ตรงนี้ แล้ว save สมมติ Researcher profile 294 00:23:23,796 --> 00:23:28,189 ผมไปที่ security แล้วเปิด website block list เพราะ 295 00:23:28,189 --> 00:23:33,460 researcher จะเข้าเว็บเยอะ ผมใส่ domains ที่อยากหลีกเลี่ยงได้ 296 00:23:33,460 --> 00:23:37,940 ส่วน Writer profile ผมไปที่ approvals สลับ approval 297 00:23:37,940 --> 00:23:42,244 mode ได้ Writer อาจเป็น YOLO ได้ แต่ Builder หรือ 298 00:23:42,244 --> 00:23:46,637 Coder คุณอาจอยากให้ ask ตลอดเวลา คุณตั้งแยกกันแล้ว 299 00:23:46,637 --> 00:23:51,380 save ทั้งหมด เพื่อให้แต่ละ profile มี security profile 300 00:23:51,380 --> 00:23:57,266 เฉพาะตัวตามสิทธิ์น้อยที่สุดที่งานนั้นต้องการ เชื่อมกับโมดูลก่อนหน้า 301 00:23:57,266 --> 00:24:02,098 ตรงนี้ก็เชื่อมกับ security คุณปรับแต่งในระดับนี้ได้ครับ 302 00:24:02,098 --> 00:24:07,896 นี่คือทั้ง 7 ชั้น ไม่ใช่ชั้นเดียว ไม่มีชั้นไหนสมบูรณ์ด้วยตัวมันเอง 303 00:24:07,896 --> 00:24:12,552 คุณเลือกได้ว่าใครเข้าประตูได้ด้วย allow lists ตั้งค่า 304 00:24:12,552 --> 00:24:16,768 approvals ให้ตรงความต้องการ ใช้ containment ด้วย 305 00:24:16,768 --> 00:24:20,985 Docker หรือ backends อื่นเพื่อจำกัด blast radius 306 00:24:20,985 --> 00:24:25,289 filtering คือตัดสินใจว่า secret ใดออกไปได้ แล้วก็ 307 00:24:25,289 --> 00:24:29,506 security hardening ต่างๆ นี่คือ defense in depth 308 00:24:29,506 --> 00:24:35,919 คือ 7 ชั้นที่ซ้อนทับกันและเป็นอิสระจากกัน แต่ละชั้นจับสิ่งที่ชั้นอื่นพลาด 309 00:24:35,919 --> 00:24:40,135 และตามที่ผมแสดง คุณตั้งค่าเหล่านี้ได้ตาม profile 310 00:24:40,135 --> 00:24:45,494 ทำให้คุณขอบเขตได้ตรงตามที่ต้องการเลยครับ นี่คือจุดจบของวิดีโอ 311 00:24:45,494 --> 00:24:50,150 security และจุดจบของ Hermes Agent Masterclass ครบทั้ง 312 00:24:50,150 --> 00:24:54,455 10 โมดูล ขอสรุปสั้นๆ ว่าเราทำอะไรบ้าง โมดูล 1 คือ 313 00:24:54,455 --> 00:24:58,935 install และ basic chat โมดูล 2 เรื่อง deploy และใช้ 314 00:24:58,935 --> 00:25:03,503 gateway โมดูล 3 memory โมดูล 4 skills โมดูล 5 models 315 00:25:03,503 --> 00:25:07,983 และ local models โมดูล 6 tools และ MCP โมดูล 7 cron 316 00:25:07,983 --> 00:25:12,375 และ automation โมดูล 8 sub agents โมดูล 9 profiles 317 00:25:12,375 --> 00:25:16,680 และ Kanban และโมดูลนี้คือ security เราเริ่มจากแค่ 318 00:25:16,680 --> 00:25:21,424 install Hermes Agent จนถึงมีทีม multi-agent ที่ปลอดภัย 319 00:25:21,424 --> 00:25:26,519 hardened สามารถใช้ดุลยพินิจได้และสร้างขึ้นมาด้วยกันทั้งหมด 320 00:25:26,519 --> 00:25:34,161 คลาสนี้ผมมีไอเดียตั้งแต่เดือนเมษายน จริงๆ แล้วเริ่มค้นคว้าเพื่อสร้างภาพรวมที่ละเอียดของ 321 00:25:34,161 --> 00:25:38,554 Hermes Agent ซึ่งค่อนข้างซับซ้อน docs ก็ละเอียดมาก 322 00:25:38,554 --> 00:25:45,230 มันมี component ต่างๆ มากมาย ไอเดียคือผมอยากทำให้ละเอียดที่สุดเท่าที่จะทำได้ 323 00:25:45,230 --> 00:25:50,677 ในหัวข้อที่ค่อนข้าง evergreen คือ Hermes Agent เปลี่ยนตลอดเวลา 324 00:25:50,677 --> 00:25:55,596 มี feature ใหม่เพิ่มเข้ามาตลอด แต่บางอย่างเช่น memories, 325 00:25:55,596 --> 00:26:01,131 skills, sub agents สิ่งเหล่านี้จะไม่หายไปไหน อาจเปลี่ยนแปลงบ้าง 326 00:26:01,131 --> 00:26:05,435 เพิ่มเติมขึ้นมา ได้รับการอัปเดต แต่ core features 327 00:26:05,435 --> 00:26:10,969 หลักจะยังเป็นส่วนหนึ่งของ agent อยู่เสมอ นี่คือแนวคิดเบื้องหลัง 328 00:26:10,969 --> 00:26:17,470 Masterclass นี้ครับ ผมได้เรียนรู้ไปเยอะมาก หวังว่าทุกคนจะได้เรียนรู้ไปด้วย 329 00:26:17,470 --> 00:26:23,356 ผมเริ่ม Masterclass ทั้งหมดนี้ด้วยความหวังว่าจะได้เรียนรู้จากการสอน 330 00:26:23,356 --> 00:26:27,748 และผมคิดว่าทำได้สำเร็จ เพราะผมชำนาญหลายส่วนมากขึ้น 331 00:26:27,748 --> 00:26:32,141 โดยเฉพาะในส่วนหลังๆ เช่น cron และ automation jobs, 332 00:26:32,141 --> 00:26:38,729 การตั้งค่า profiles และการใช้ Kanban ผมเรียนรู้ไปเยอะแม้จะเป็นคนสอนเองก็ตาม 333 00:26:38,729 --> 00:26:42,858 ผมอยากขอบคุณทุกคนที่รับชม ทั้งหมดนี้น่าจะเกิน 5 334 00:26:42,858 --> 00:26:47,602 ชั่วโมง และ Nous Research ก็ใจดีนำ playlist นี้ไปใส่ใน 335 00:26:47,602 --> 00:26:52,433 docs page ของพวกเขาด้วย คุณเห็นได้ว่าพวกเขาใส่ไว้ตรงนี้ 336 00:26:52,433 --> 00:26:57,177 มีรูป Tonby เล็กๆ นั่นคือ playlist ทั้งหมด แต่ยังไม่จบ 337 00:26:57,177 --> 00:27:02,184 เราจะสำรวจ Hermes Agent ต่อไปเรื่อยๆ ตามที่มันเปลี่ยนแปลง 338 00:27:02,184 --> 00:27:07,719 แม้ผมจะครอบคลุมเยอะใน 10 วิดีโอนี้ แต่ก็ยังมีอีกมากที่ต้องไปต่อ 339 00:27:07,719 --> 00:27:13,253 และผมอาจกลับไปอัปเดตบางตอน เพราะตอนแรกๆ ทำไว้ตั้งแต่เดือนเมษายน 340 00:27:13,253 --> 00:27:18,172 หลายอย่างเปลี่ยนไปตั้งแต่ตอนนั้น ขอบคุณทุกคนที่รับชมครับ 341 00:27:18,172 --> 00:27:23,443 โปรดแสดงความคิดเห็น บอกได้เลยว่าคุณคิดอย่างไรกับวิดีโอนี้และ 342 00:27:23,443 --> 00:27:27,923 Masterclass series ทั้งหมด ติดตาม Tonbi's AI Garage 343 00:27:27,923 --> 00:27:32,228 ต่อไปเพื่อดูวิดีโอเพิ่มเติมเกี่ยวกับ Hermes Agent 344 00:27:32,228 --> 00:27:36,884 และ AI และ agents โดยทั่วไป แล้วพบกันใหม่ในวิดีโอหน้า 345 00:27:36,884 --> 00:27:39,080 ขอบคุณทุกคนที่รับชมนะครับ