AWS Thai Blog

AWS Security Baseline Checklist สำหรับผู้ใช้ AWS

Security Baseline Checklist คือข้อแนะนำขั้นพื้นฐานด้านความปลอดภัยในการใช้งานบน AWS โดยในโพสต์นี้จะรวบรวมเป็น checklist ทั้ง 19 ข้อ เพื่อให้ลูกค้าสามารถนำไปประยุกต์ใช้ และยกระดับด้านความปลอดภัยให้สูงขึ้นได้

ก่อนอื่นเรามาดูรายละเอียดเกี่ยวกับ AWS Shared Responsibility Model หรือ โมเดลความรับผิดชอบร่วมกันระหว่าง AWS กับลูกค้า เพื่อทำให้การรัน workload ต่างๆบน AWS มีความปลอดภัยสูงสุด

ภาพที่ 1: โมเดลความรับผิดชอบร่วมกันระหว่าง AWS กับลูกค้า

ในภาพส่วนที่เป็นสีส้ม คือความรับผิดชอบด้านความปลอดภัยของ AWS ที่จะครอบคลุม hardware ในส่วนที่เป็นโครงสร้างพื้นฐาน การจัดการ data center และ software ที่เป็น building block เช่น compute, storage, database, networking โดย AWS ได้ผ่านการรับรอง compliance ต่างๆมากมาย เช่น SOC, ISO ตามรายละเอียดภาพด้านล่าง สามารถเข้าไปดูเกี่ยวกับ Compliance Program ได้ที่นี่ และสามารถ download security compliance เหล่านี้ได้โดยเข้าไปที่ service AWS Artifact ในหน้า AWS console ได้เลย

ภาพที่ 2: AWS Cloud Compliance

ถัดมาในส่วนที่เป็นสีน้ำเงิน คือความรับผิดชอบด้านความปลอดภัยของผู้ใช้งาน ซึ่งจะครอบคลุมการ config ความปลอดภัยในการเข้าใช้งาน, การทำ encryption, การตั้งค่า Operating Sytem, network, firewall ไปจนถึงการจัดการแอปพลิเคชัน และ customer data ในส่วนนี้ AWS ได้มีเครื่องมือต่างๆให้บริการ แต่ทางผู้ใช้งานต้องนำมาปรับใช้ ตั้งค่าให้เหมาะสมกับการใช้งาน เพื่อให้ได้ความปลอดภัยสูงที่สุด

Security Baseline Checklist (ข้อแนะนำขั้นพื้นฐานด้านความปลอดภัยในการใช้งานบน AWS)

1. ใส่ข้อมูลสำหรับติดต่อให้ถูกต้อง

เมื่อเกิดปัญหาต่างๆ ไม่ว่าจะเป็น technical หรือเกี่ยวกับ billing ทาง AWS จะมีการติดต่อไปที่ผู้ใช้งาน ดังนั้นการใส่ข้อมูลที่ใช้สำหรับติดต่อให้ถูกต้อง จึงเป็นเรื่องพื้นฐานที่สำคัญ เพราะถ้าข้อมูลไม่ถูกต้อง ทาง AWS Support จะไม่สามารถติดต่อผู้ใช้งานได้ ทำให้การแก้ปัญหาจะล่าช้า

สามารถเข้าไปแก้ไขข้อมูลสำหรับติดต่อ ได้ที่ https://console.aws.amazon.com/billing/home?#/account

ในส่วนของ Account Settings จะสามารถแก้ไขข้อมูล ชื่อ Account Name, Email (แนะนำเป็น Email group ของทีมที่รับผิดชอบ AWS Account นั้นๆ), Password และ ในส่วนของ Contact Information จะสามารถแก้ไขข้อมูล ชื่อ, ที่อยู่,​ เบอร์โทรศัพท์

ภาพที่ 3: หน้า Account

สำหรับลูกค้าไทย ในส่วน Phone Number ​ให้ตรวจสอบว่าเรามีใส่ Country code หรือมี +66 หรือไม่หากไม่มีให้แก้ให้มี Country code หากไม่ Country Code มีระบบ Automate จะไม่สามารถติดต่อเราได้

ในกรณีที่ใช้ AWS Organization ในการจัดการ AWS Account สามารถแก้ไข account contact information ได้โดยใช้ command line ตามตัวอย่าง

aws account put-alternate-contact \
  --account-id 111111111111 \
  --alternate-contact-type=SECURITY \
  --email-address=security-contact@example.com \
  --phone-number="+1(555)555-5555" \
  --title="Security Contact" \
  --name="Mary Major"

สามารถใช้เรียนรู้เพิ่มเติมได้ที่นี่

2. ปกป้อง root user

Root user มีความสำคัญอย่างมาก เพราะสามารถทำทุก activity ได้ใน AWS Account ไปจนถึงสามารถปิด AWS Account ดังนั้นควรเพิ่มความปลอดภัยในการเข้าใช้งาน root user และไม่ควรใช้การ root หากไม่จำเป็น โดยปกติ task ที่ต้องใช้ root มีแค่การแก้ข้อมูลของ Account การปิด account และการ Enable AWS support เท่านั้น วิธีการปกต้อง root account ควรทำต่อไปนี้:

  • ใช้ Strong Password หรือ Password ที่มีความซับซ้อน เช่น ประกอบไปด้วยตัวอักษรตัวเล็ก-ตัวใหญ่,​ ตัวเลข, ตัวอักษรพิเศษ เช่น ! @ #
  • เปิดการใช้งาน Multi-factor authentication (MFA) เรียนรู้วิธีได้ที่นี่
  • ไม่ควรใช้ access key ของ root user
  • เก็บรักษา root use access ไว้อย่างปลอดภัย
  • หลีกเลี่ยงการใช้ root user
  • ควรใช้ IAM user และ groups แทน การใช้ root user
  • ตั้ง Password policy ให้มีความปลอดภัย
    • สามารถตั้ง Password Policy ได้ที่ https://console.aws.amazon.com/iam/ > คลิก Account settings > ในส่วนของ Password policy คลิก Edit > เลือก Custom และตั้งค่า Password Policy > คลิกปุ่ม Save changes
  • สามารถเรียนรู้เพิ่มเติมเกี่ยวกับ best practices ในการตั้งค่าความปลอดภัยให้กับบัญชี AWS เพิ่มเติมได้ที่นี่

สำหรับการใช้งานทั่วไปในการใช้งาน AWS ควรใช้เป็น IAM User หรือ IAM Identity Center (successor to AWS Single Sign-On) สำหรับการใช้งาน AWS แบบหลาย AWS Account

3. เปิดการเก็บ Log ที่เกิดขึ้นจาก event ต่างๆ

การทำ logging ที่เกิดจาก event ต่างๆ จะมีประโยชน์อย่างมากในการทำ audit และการวิเคราะห์ว่ามีอะไรผิดปกติเกิดขึ้นใน AWS account ของเราบ้าง โดย service ที่เข้ามาช่วยตรงส่วนนี้คือ AWS CloudTrail ซึ่งจะทำหน้าที่เก็บ log ของ API access ที่ทำโดย user, role และ AWS service ไม่ว่าจะผ่าน AWS CLI, AWS Management Console ที่เกิดขึ้นใน 90 วัน เราสามารถเพิ่ม retention ได้โดยตั้งค่าให้ CloudTrail สามารถส่ง log ไปเก็บไว้ใน Amazon S3 ได้ และนำไปวิเคราะห์เพิ่มเติม สามารถศึกษาวิธีการทำได้ที่นี่ , และดูรายละเอียดค่าใช้จ่ายของ CloudTrail ได้ที่นี่

4. ป้องกัน Public access S3 buckets

Amazon S3 เป็นที่จัดเก็บข้อมูลแบบ Object ให้ในเรื่องของความคงทนของข้อมูลและการ scale สามารถใช้สำหรับเก็บข้อมูลตั้งแต่ backup, archive data ไปจนถึงการทำ data lake ใน modern data architeture

Amazon S3 เป็น service พื้นฐานที่มีการใช้งานอย่างแพร่หลาย ดังนั้นจึงจำเป็นต้องมีการป้องกัน S3 bucket จาก public access สามารถเรียนรู้วิธีการได้ที่นี่

นอกจากนี้ Amazon S3 ยังมีฟีเจอร์ Storage Lens ซึ่งจะให้รายละเอียดเกี่ยวกับการใช้งาน storage, activity trend ใน organization หรือ account level, สามารถ drill-down ไปที่ระดับ Region, storage class, bucket และ prefix ได้ ซึ่งเหล่านี้จะเป็นประโยชน์อย่างมากให้การดูรายละเอียดการใช้งานของ Amazon S3 สามารถเรียนรู้เพิ่มเติมได้ที่นี่

5. ลบ Resource ที่ไม่ได้ใช้งาน

ถ้าไม่ได้ใช้งาน Resource แล้วเราควรจะลบทิ้ง เพื่อความปลอดภัยและประหยัดค่าใช้จ่าย, ควรหลีกเลี่ยงการใช้ default VPC และสามารถดู resource เช่น Amazon EC2, Amazon VPC ได้โดยใช้ EC2-Global View (Amazon EC2 > EC2-Global View)

ภาพที่ 4: Amazon EC2-Global View

6. การตั้งค่า AWS Budget

หลายๆท่านอาจจะสงสัยว่า AWS Budget เกี่ยวข้องกับ Security ยังไง ซึ่งการ monitor ในส่วนของค่าใช้จ่าย จะทำให้เห็นสิ่งผิดปกติที่เกิดขึ้นได้ เช่น ถ้ามี outbound data transfer หรือ EC2 cost ที่สูงขึ้นแบบผิดปกติ อาจเป็นสัญญาณของการโดนโจมตี หรือการเข้ามาใช้งาน AWS Account โดยไม่ได้รับอนุญาต สามารถเข้าไปตั้งค่า AWS Budget ได้ที่ https://console.aws.amazon.com/billing/home#/budgets และศึกษาเพิ่มเติมเกี่ยวกับ AWS Budget ได้ที่นี่

AWS ยังมีอีกฟีเจอร์ AWS Cost Anomaly Detection ซึ่งจะช่วยให้สามารถตรวจพบค่าใช้จ่ายที่สูงขึ้นอย่างผิดปกติ โดยสามารถเข้าไปที่ AWS Cost Explorer > Cost Anomaly Detection (AWS Cost Anomaly ไม่มีค่าใช้จ่าย แต่จะมีค่าใช้จ่ายกับ Amazon SNS ที่เป็นการส่ง notifiication ไป สามารถดูค่าใช้จ่ายของ Amazon SNS ได้ที่นี่)

ภาพที่ 5: AWS Cost Anomaly Detection

7. เปิดการใช้งาน Amazon GuardDuty

Amazon GuardDuty คือ service ที่ใช้ monitor, threat detection ใน AWS account และ workload ที่รันอยู่ โดยจะหา malicious activity ที่เป็นอันตราย และบอกรายละเอียดของ security finding ที่พบ รวมทั้งวิธีการแก้ไขปัญหาโดยจะใช้ข้อมูลจาก AWS CloudTrail event, Amazon Route53 Resolver logs, Amazon VPC Flow Logs, Kubernetes audit logs, RDS login activity monitoring และใช้ ML มาใช้ในการวิเคราะห์ สามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Amazon GuardDuty ได้ที่นี่ และสามารถดูค่าใช้จ่ายของ Amazon GuardDuty ได้ที่นี่

ภาพที่ 6: Amazon GuardDuty

8. Monitor issue โดยใช้ AWS Trusted Advisor

AWS Trusted Advisor คือ service ที่ช่วยให้คำแนะนำ best practices ใน 5 ด้าน คือ Cost optimization, Performance, Security, Fault tolerance และ Service limits ในด้าน Security AWS Trusted Advisor จะสามารถให้คำแนะนำเกี่ยวกับ เช่น Security Groups – Specific Ports Unrestricted, IAM Use, MFA ใน Root Account สามารถดูรายละเอียดเพิ่มเติมได้ที่นี่

ภาพที่ 7: AWS Trusted Advisor

9. ใช้ IAM role สำหรับกำหนด permission เข้าใช้งาน AWS resource

AWS Identity and Access Management (IAM) คือ service ที่ใช้จัดการสิทธิ์, user, group เพื่อใช้งาน resource ต่างๆบน AWS และจะมี IAM role ซึ่งเป็นกลุ่มของ permission เพื่อให้บุคคลหรือ service เข้าถึง resource ตามที่กำหนดไว้ ซึ่งการใช้ IAM role จะช่วยลดการจัดการ long-term credential และยังช่วยเพิ่มความปลอดภัย

ผู้ใช้งานสามารถ assign IAM role ให้กับ Amazon EC2 instance, AWS Fargate task และ service, AWS Lambda function รวมทั้งแอปพลิเคชันก็สามารถใช้ AWS SDK และใช้ IAM role credential สำหรับการ authentication สามารถเรียนรู้เพิ่มเติมเกี่ยวกับ IAM role ได้ที่นี่

10. ใช้ ephemeral secret หรือ secret management service

การจัดการเรื่อง secret ของแอปพลิเคชันมีความสำคัญ เช่น access token, username และ password ซึ่งการที่จะช่วยรักษาความปลอดภัยของ secret เหล่านี้สามารถทำได้โดย ephemeral (generate secret ตาม request หรือ เป็นแบบ short-lived เช่น IAM role) หรือ ใช้ secret management service ซึ่งบน AWS มี service ที่ให้บริการคือ AWS Secrets Manager ข้อดีของการใช้ AWS Secrets Manager คือการจัดการ rotation secret และไม่ต้องเก็บ credential ไว้ในแอปพลิเคชัน นอกจากนี้ ถ้ามี requirement ต้องการเก็บ Parameter ไว้และสามารถเรียกใช้ได้ ก็จะมี AWS Systems Manager: ฟีเจอร์​ Parameter Store ให้บริการ สามารถเรียนรู้เพิ่มเติมได้ที่นี่ , รายละเอียดค่าใช้จ่ายของ AWS Secrets Manager และ Amazon Systems Manager

11. ตรวจหา Exposed secrets ใน Java หรือ Python code ได้ใช้ Amazon CodeGuru Reviewer

Amazon CodeGuru คือ service ที่ช่วยปรับปรุงเรื่องของ code quality และ automate code review โดยการ scanning และ profiling Jaya และ Python แอปพลิเคชัน ซึ่ง Amazon CodeGuru มีฟีเจอร์​: CodeGuru Reviewer ที่ช่วย detect potential defect และ bug ใน code รวมทั้งยังช่วยในด้านความปลอดภัยเช่น security vulnerability, resource leaks, concurrency issue, incorrect input validation ตาม AWS best practices สามารเรียนรู้เพิ่มเติมได้ที่นี่ , รายละเอียดค่าใช้จ่ายของ Amazon CodeGuru

ภาพที่ 8: Amazon CodeGuru

12. Deploy private resource เช่น database, แอปพลิเคชัน ไว้ใน private subnets

Resource ต่างๆบน AWS ไม่ว่าจะเป็น EC2 instance, database, หรือ infrastructure อื่นๆ สามารถเพิ่มความปลอดภัย ด้วยการลด attack surface หรือความเสี่ยงที่จะโดนโจมตีจากภายนอก ไม่อนุญาตให้ traffic จาก internet เข้ามาโดยตรง ซึ่งสามารถ deploy private resource เหล่านี้ไว้ใน private subnet ซึ่ง private subnet จะยกระดับความปลอดภัย และไม่อนุญาตให้ traffic จาก internet เข้ามาติดต่อกับ resource โดยตรง

จากภาพด้านล่าง เป็นตัวอย่างของแอปพลิเคชันที่มีการ deploy EC2 instance, Database ใน private subnet และใน public subnet จะมี NAT gateway สำหรับให้ EC2 instance ใน private subnet สร้าง connection เชื่อมต่อไป internet (ขาออกไป internet) และมี Application Load Balancer เพื่อรับ connection จาก user ที่เข้ามาผ่าน internet

ภาพที่ 9: Deploy private resource ไว้ใน private subnet

13. ใช้ AWS Systems Manager เพื่อ SSH หรือ RDP เข้า servers แทนการใช้ Bastion Host

AWS Systems Manager มีฟีเจอร์​​ Session Manager เพื่อ access เข้า server ผ่าน SSH หรือ RDP ทำให้เพิ่มความปลอดภัยและลดค่าใช้จ่ายของ Bastion Host สามารถเรียนรู้เพิ่มเติมได้ที่นี่

14. Data-at-rest Encryption

บน AWS สามารถ enable encryption data-at-rest ได้อย่างง่ายดาย ซึ่งเป็นการเพิ่มความปลอดภัยให้กับ workload

15. ใช้ VPC endpoint เพื่อ access service

ในกรณีที่ resource ของแอปพลิเคชัน เช่น EC2 instace ต้องมีการใช้งาน service อื่นๆ เช่น Amazon S3, Amazon SQS เราสามารถใช้ VPC endpoint เพื่อให้สามารถติดต่อกับ AWS service เป็นแบบ private ได้

ตามภาพด้านล่าง ทางฝั่งซ้าย ถ้า EC2 instance ใน private subnet ต้องมีการใช้งาน AWS service นอก VPC เช่น Amazon S3, Amazon DynamoDB จะต้องมีการ access ออก internet ผ่านทาง NAT gateway ไปยัง Internet gateway แล้วจึงสามารถใช้งาน AWS service ซึ่งจะทำให้เกิด cost ในการ process data บน NAT gateway และยังต้องออก internet

ถ้ามีการใช้ VPC endpoint และ Gateway endpoint ก็จะสามารถเข้าใช้งาน AWS service ได้แบบ private เลยโดยไม่ต้องออก internet เพื่อเพิ่มความปลอดภัย สามารถเรียนรู้เพิ่มเติมได้ที่นี่

ภาพที่ 10: ใช้ VPC endpoints เพื่อ access service

16. เปิดการใช้งาน AWS Security Hub

AWS Security Hub คือ service ที่ช่วยในการจัดการด้าน security ซึ่งจะ automate best practice check เข้ากับ compliance framework เช่น Payment Card Industry Data Security Standard (PCI DSS), Center for Internet Security (CIS) AWS Foundations Benchmark, และยัง aggregate alert รวมทั้ง support การทำ automated remediation อีกด้วย

AWS Security Hub จะ aggregate ข้อมูลจาก AWS security services เช่น Amazon GuardDuty, Amazon Inspector, AWS Config เพื่อค้นหา finding และบอกระดับความรุนแรงของ issue

สามารถเรียนรู้เพิ่มเติมเกี่ยวกับ AWS Security Hub ได้ที่นี่ และ รายละเอียดค่าใช้จ่ายของ AWS Security Hub

รายละเอียดของ security standards ใน AWS Security Hub https://docs.aws.amazon.com/securityhub/latest/userguide/standards-available.html

ภาพที่ 11: AWS Security Hub

17. สแกนช่องโหว่ โดยใช้ Amazon Inspector

Amazon Inspector คือ service ที่ใช้ในการสแกนหาช่องโหว่ vulnerability สำหรับ Amazon EC2, AWS Lambda functions, และ container images ใน Amazon ECR

สามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Amazon Inspector ได้ที่นี่ ,​ บล็อกโพสต์เกี่ยวกับ Amazon Inspector และ รายละเอียดค่าใช้จ่ายของ Amazon Inspector

ภาพที่ 12: Amazon Inspector

18. สร้าง Incident response runbook สำหรับ แอปพลิเคชัน

เมื่อเกิด incident ด้าน security เกิดขึ้น สิ่งที่จำมากในการรับมือกับปัญหาคือ response plan ตัวอย่างเช่น มีผู้ไม่หวังดีเข้ามาโจมตี server ที่มีการ configure ด้าน security ที่ผิดพลาด ขั้นตอนหรือ process ที่จะต้องทำเพื่อรับมือกับเหตุการณ์เหล่านี้ ปกติจะเรียกว่า runbook

runbook นี้จะเป็น document หรือ procedure ที่บอกว่ามี task อะไรบ้างที่จะต้องทำ และบุคคลที่เกี่ยวข้องจะมีใครบ้าง ซึ่งการทำ automate runbook เพื่อให้รับมือกับเหตุการณ์ไม่คาดฝันได้อย่างรวดเร็ว

สามารถศึกษารายละเอียดเพิ่มเติมได้ที่ https://docs.aws.amazon.com/whitepapers/latest/aws-security-incident-response-guide/runbooks.html

19. รีวิว AWS Security Reference Architecture (AWS SRA)

AWS Security Reference Architecture (AWS SRA) เป็น guidelines ในการ deploy AWS security services ใน multi-account environment ซึ่งช่วยในการ design, implement, และ manage security service เป็นไปตาม AWS best practices สามารถศึกษารายละเอียดเพิ่มเติมได้ที่ https://docs.aws.amazon.com/prescriptive-guidance/latest/security-reference-architecture/welcome.html

ภาพที่ 13: AWS Security Reference Architecture

บทสรุป

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

สามารถศึกษารายละเอียดเพิ่มเติมเกี่ยวกับ Security Baseline ได้ที่นี่ และสามารถเรียนรู้จาก hands-on workshop ได้ที่นี่