Tags:

จากกรณี ทรูหลุดกระจุย อันนี้
https://pantip.com/topc/37561690

ผมละเสียวๆเลย เก็บทุกอย่างไว้ แต่ไม่รู้ที่ตั้งค่ามันโอเคไหม ใครมี best practice ที่ควรจะเป็นแนะนำหน่อยนะครับ
ยิ่งกรณีนี้ที่ต้องเปิด public ข้อมูลรูปผ่านเว็บด้วย นอนไม่หลับเลย
ขอบคุณครับ

Get latest news from Blognone
By: bluezip
AndroidUbuntuWindows
on 15 April 2018 - 01:14 #1044087

ลองคิดดูอยู่ที่ true หรือ aws ที่ผิด
เพราะลูกค้า aws s3 ไม่ได้มีแค่ true เจ้าเดียว

By: Ford AntiTrust
ContributorAndroidBlackberryUbuntu
on 15 April 2018 - 01:54 #1044090
Ford AntiTrust's picture

AWS มีเอกสารแนะนำการใช้ S3 ที่เป็น Best practices ให้ตรวจสอบอยู่นะครับ แล้วมีเว็บอื่นๆ เยอะแยะมากมายที่ให้คำแนะนำเพิ่มเติมครับ

How can I help ensure the files in my Amazon S3 bucket are secure?

By: kamthorn
ContributorAndroidUbuntu
on 20 April 2018 - 18:40 #1045576

กรณีไม่ได้ใช้ IAM ของ AWS (ซึ่งจะทำให้จัดการเรื่องสิทธิต่างๆ ได้ละเอียดกว่า) ทำให้จำเป็นต้องเปิดข้อมูลรูปแบบ public เพื่อให้โค้ดของเราจัดการเอง อาจจะทำแบบนี้เพื่อลดปัญหาการเข้าถึงไฟล์โดยตรงครับ

  • bucket ให้ "ปิด" สิทธิทุกอย่างของ Everyone (ปกติต้องปิด น้อยมากที่จะเปิด ซึ่งยังไม่เข้าใจว่า True เปิด Object list ในนี้ทำไม)
  • object (รูปภาพ) ให้ตั้งชื่อแบบเดาไม่ได้ เช่นใช้ uuid, ใช้ชื่อภาพ + วันที่เวลาปัจจุบัน + salt แล้วทำ hash
  • object (รูปภาพ) ให้เปิดสิทธิ read ให้กับ Everyone

กรณีข้อมูลทั้งเว็บเป็น public เมื่อ scan จากหน้าเว็บ จะเข้าถึงได้เฉพาะภาพที่ใช้บนเว็บ ไม่สามารถ scan ที่ bucket ตรงๆ ได้

กรณีมี user และแยกสิทธิกันเข้าถึงรูปภาพ user จะเห็นและเข้าถึงได้เฉพาะรูปที่เว็บยอมให้เห็น แต่ถ้านำ URI ของรูปนั้นๆ ตรงๆ ส่งให้คนอื่น คนอื่นจะเข้าถึงภาพนั้นได้เช่นกัน

ถ้าซีเรียสมากๆ อาจจะใช้วิธีทำ pre-signed url โดยกำหนดให้ object permission ไม่เปิดสิทธิอะไรเลยให้ Everyone แต่ตอนส่ง request url ให้ส่ง pre-signed request ไปด้วย ซึ่งกำหนดเวลาหมดอายุได้

รายละเอียดลองดูในนี้ https://docs.aws.amazon.com/aws-sdk-php/v3/guide/service/s3-presigned-url.html อันนี้เป็นของ PHP ซึ่งวิธีการประมาณนี้ facebook ก็ใช้อยู่ (ลองเปิด facebook ไปดูภาพที่อัพโหลดไว้ แต่ตั้งสิทธิที่ไม่ใช่ public แล้วคลิกขวา แล้ว copy image address ไปดู จะมี query string ยาวๆ ต่อท้ายชื่อภาพ)


--