สถานการณ์

เรามีเว็บแอปที่โฮสต์บน Amazon EC2 มีวัตถุประสงค์เพื่อใช้โดยผู้ใช้เพียงไม่กี่คนในบริษัท

เรากำลังรับมือกับเรื่องนี้อย่างไร

  • เราแบ่งปันที่อยู่ IP (ยืดหยุ่น) ของอินสแตนซ์กับผู้ใช้
  • เราเพิ่มที่อยู่ IP ของผู้ใช้แต่ละรายในกลุ่มความปลอดภัยของอินสแตนซ์ตามความจำเป็น

เมื่อฉันพูดว่าเมื่อจำเป็นฉันหมายถึงอีเมลจากผู้ใช้ที่บ่นว่าเว็บพอร์ทัลกำลังแสดงหน้าข้อผิดพลาด พวกเขาลืมไปว่าจำเป็นต้องมีขั้นตอนนี้ในการรวม IP ในกลุ่มความปลอดภัย (และฉันไม่โทษพวกเขา พวกเขาเป็นผู้ใช้ปลายทาง)

สำหรับคำถามนี้ สมมติว่าเรามีผู้ใช้ทั้งหมด 5 รายในบริษัทที่ต้องการการเข้าถึงนี้ เพิ่มที่อยู่ IP ของ User-1 และ User-2 ในกลุ่มความปลอดภัยแล้ว

ปัญหา

  1. ผู้ใช้-3 ไปที่ที่อยู่ IP โดยตรง แต่ไม่สามารถเข้าถึงได้เนื่องจากไม่ได้เพิ่มที่อยู่ IP ของผู้ใช้ในกลุ่มความปลอดภัย
  2. หาก User-1 หรือ User-2 รีสตาร์ทอินเทอร์เน็ต ที่อยู่ IP ของพวกเขาอาจมีการเปลี่ยนแปลง (IP แบบไดนามิกที่ ISP ให้มา) และจะต้องเพิ่มที่อยู่ IP ใหม่ในกลุ่มความปลอดภัย (และจะต้องเพิกถอนที่อยู่เก่า หลีกเลี่ยงการเข้าถึงโดยผู้อื่น)

ตัวเลือกอื่น ๆ ที่ฉันกำลังพิจารณา

  1. ให้การเข้าถึงเฉพาะ VPN ในสำนักงานและขอให้ผู้ใช้ทั้งหมดเชื่อมต่อผ่าน
  2. (ยุ่งยากมากสำหรับผู้ใช้) ขอให้ผู้ใช้เข้าสู่ระบบ AWS Management Console ไปที่บริการ EC2 ไปที่ส่วน Security Groups และเพิ่มที่อยู่ IP ด้วยตนเอง (ผู้ใช้มีผู้ใช้ AWS IAM แล้วและมีสิทธิ์ที่เหมาะสมในการดำเนินการนี้) .
  3. สร้างสคริปต์ที่เพิ่ม IP ปัจจุบันของผู้ใช้ในกลุ่มความปลอดภัย (โดยใช้ AWS CLI / SDK) - ฟังดูอันตรายและไม่เหมาะสมอย่างยิ่ง เนื่องจากเราจะต้องใส่ข้อมูลประจำตัว API ของผู้อื่นในสคริปต์
answer

ตัวเลือก 4 - หยุดควบคุมการเข้าถึงผ่านกลุ่มความปลอดภัย และใช้กลไกการตรวจสอบสิทธิ์ที่เหมาะสมแทน

ยกตัวอย่างเช่นใส่แอพลิเคชัน Balancer การโหลดในด้านหน้าของ app เว็บและกำหนดค่า ALB ที่จะต้องใช้การตรวจสอบ Cognito เฉพาะผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์แล้วเท่านั้นที่จะผ่าน ALB ไปยังเว็บแอปของคุณ - แก้ไขปัญหาได้แล้ว Cognito สามารถมีผู้ใช้ในเครื่องหรือใช้ร่วมกับ Azure AD ของคุณ หรือถ้าคุณใช้ Office365 ในองค์กรของคุณ นี่เป็นวิธีที่ค่อนข้างโปร่งใสซึ่งไม่ต้องการการเปลี่ยนแปลงใดๆ ในแอป

หรือหากเว็บแอปของคุณรองรับ คุณควรกำหนดค่าให้ต้องมีการตรวจสอบสิทธิ์ SAML กับไดเรกทอรีผู้ใช้ที่องค์กรของคุณใช้ - Office365, G-Suite เป็นต้น

หวังว่าจะช่วย :)

ตัวเลือก 5 - หยุดการจัดการกลุ่มความปลอดภัย (โดยพื้นฐานแล้วคือไฟร์วอลล์ที่ใช้ IP) และใช้ใบรับรองไคลเอ็นต์ TLS

หากคุณกำลังใช้ระบบการจัดการผู้ใช้ที่ทันสมัย ​​เช่น Azure AD หรือ LDAP แสดงว่าคุณมีเครื่องมือที่เหมาะสมในการออกและแจกจ่ายใบรับรองแล้ว คุณจะต้องตั้งค่า CA ส่วนตัวและกำหนดค่าเซิร์ฟเวอร์ HTTP (Nginx, Apache2 หรือ AWS ALB) เพื่อรับรองความถูกต้องด้วยใบรับรอง ใครก็ตามที่ไม่มีใบรับรอง หรือมีใบรับรองที่ไม่ถูกต้อง (รวมถึงใบรับรองที่หมดอายุ) จะไม่ผ่านเซิร์ฟเวอร์ HTTP นี้ต้องเป็นศูนย์การเปลี่ยนแปลงไปยังแอปเว็บตัวเองและคุณยังสามารถวางการตรวจสอบใด ๆ ในการตรวจสอบใบรับรองสามารถตอบสนองวัตถุประสงค์ที่นอกเหนือไปจากการควบคุมการเข้าถึง

ข้อดีอย่างหนึ่งคือใช้งานได้ทุกที่ไม่ว่าจะเป็น AWS, Azure หรือโครงสร้างพื้นฐานในองค์กรของคุณ คุณสามารถใช้ข้อมูลประจำตัวและการกำหนดค่าชุดเดียวกันซ้ำได้ (ยกเว้น AWS ALB)