แสดงรายการเวอร์ชันของออบเจ็กต์ในบัคเก็ต S3 ผ่าน URI ที่ลงชื่อ

ในโปรเจ็กต์ของเรา เรากำลังจัดเก็บออบเจ็กต์ไว้ในบัคเก็ต S3 โดยเปิดใช้งานการกำหนดเวอร์ชัน ไม่มีตรรกะบนเซิร์ฟเวอร์นอกเหนือจากการสร้าง URI ที่ลงนามเพื่อให้ไคลเอ็นต์ใช้ เราอยากจะคงไว้เช่นนี้เนื่องจากเราต้องการให้ลูกค้าดำเนินการประมวลผลทั้งหมด

ถึงปัญหา. เราสามารถสร้าง URI ที่ลงนามสำหรับวัตถุ GET และ PUT สำหรับวัตถุทั้งหมดได้สำเร็จ แต่เราไม่สามารถสร้าง URI สำหรับการแสดงรายการเวอร์ชันที่มีอยู่ทั้งหมดได้

นี่คือตัวอย่างของ GET-url บนออบเจ็กต์ในหนึ่งในบัคเก็ตของเราที่ใช้งานได้ (99/2 คือโฟลเดอร์ในบัคเก็ต): https://bucketname.s3.amazonaws.com/99/2?AWSAccessKeyId=ourkey&Signature=signature&Expires=1410784420

ตามเอกสาร (GET เวอร์ชัน) เราควรจะ ผนวก ?versions และเวอร์ชันต่างๆ เราได้ลองทำสิ่งต่อไปนี้แล้ว: https://bucketname.s3.amazonaws.com/99/2?AWSAccessKeyId=ourkey&Signature=signature&Expires=1410784420&versions

ซึ่งส่งผลให้เบราว์เซอร์บ่นว่าลายเซ็นผิด ไม่มี "?versions" ถ้าฉันอ่าน เอกสาร ฉันจะตีความตามที่ควรจะเป็น จะไม่รวมอยู่ในลายเซ็นเว้นแต่ว่าเราจะผนวกค่าลงไปด้วย ซึ่งเราไม่ได้ใส่ไว้ด้วย ปัญหาคือไม่สำคัญว่าฉันจะเพิ่มมันลงในการสร้างลายเซ็นหรือไม่เนื่องจากยังคงล้มเหลวโดยมีข้อผิดพลาด "ไม่มีทรัพยากรย่อย ?versions สำหรับคีย์"

มีใครบางคนที่สร้าง uri ที่ลงนามแล้วสำหรับวัตถุเพื่อแสดงรายการเวอร์ชันหรือไม่ เราอยากได้คำแนะนำเกี่ยวกับสิ่งที่เราทำผิดจริงๆ ฉันอยากจะชี้ให้เห็นว่าเราไม่ได้ใช้ตัวสร้าง URI ในตัวเนื่องจากเราไม่สามารถทำให้มันตรงตามความต้องการของเราได้


person Johan    schedule 15.09.2014    source แหล่งที่มา


คำตอบ (1)


การแสดงรายการเวอร์ชันของออบเจ็กต์เป็นการดำเนินการที่ดำเนินการ "กับ" ที่เก็บข้อมูล ไม่ใช่กับออบเจ็กต์... ดังนั้นเส้นทางของคุณจะเป็น / เสมอ ไม่ว่าคุณต้องการแสดงรายการคีย์ใดก็ตาม

คุณระบุคำนำหน้าคีย์ในสตริงการสืบค้นเป็น prefix=...

สตริงที่จะเซ็นชื่อจะขึ้นต้นด้วย /bucketname/?versions&prefix=...

คุณเรียงลำดับพารามิเตอร์สตริงการสืบค้นทั้งหมดตามคำศัพท์ ยกเว้น สำหรับทรัพยากรย่อย (versions ในกรณีนี้) ซึ่งจะไปก่อน หากมีทรัพยากรย่อยมากกว่าหนึ่งรายการ คุณจะเรียงลำดับคำศัพท์ระหว่างกันด้วย แต่ทรัพยากรเหล่านั้นยังคงอยู่ก่อน ทุกอย่างคั่นด้วย & ในสตริงที่จะลงนาม

ข้อแม้ที่สำคัญ: รายการ API อาจไม่เหมาะสมที่จะส่งมอบให้กับลูกค้า เนื่องจากคุณสามารถส่งคืนสิ่งที่ผิดได้... "คำนำหน้า" เป็นเพียงคำนำหน้าเท่านั้น หากไม่ตรงกันทุกประการ ก็สามารถจับคู่กับสตริงย่อยได้ ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ คุณอาจจำเป็นต้องใช้ delimiter และ max-keys และเตรียมพร้อมที่จะจัดการกับการแบ่งหน้าผ่านรายการที่ถูกตัดทอนซึ่งจะกลายเป็นสิ่งจำเป็นเมื่อมีการส่งคืนผลลัพธ์จำนวนมาก

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETVersion.html

http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html

person Michael - sqlbot    schedule 15.09.2014