การเข้าถึง FTP / SFTP ไปยังถัง Amazon S3 [ปิด]


146

มีวิธีการเชื่อมต่อกับที่ฝากข้อมูล Amazon S3 ด้วย FTP หรือ SFTP แทนที่จะเป็นอินเตอร์เฟสการถ่ายโอนไฟล์ Amazon ในตัวในคอนโซล AWS หรือไม่ ดูเหมือนว่านี่ไม่ใช่ตัวเลือกที่พร้อมใช้งาน


2
AWS เปิดตัวในเดือน พ.ย. 2561บริการ SFTP ที่มีการจัดการอย่างสมบูรณ์ซึ่งทำให้สามารถถ่ายโอนไฟล์เข้าและออกจาก Amazon S3 ได้โดยตรง AWS ถ่ายโอนสำหรับ SFTP
mitaka

คำตอบ:


100

มีสามตัวเลือก

  • คุณสามารถใช้บริการ SFTP ที่มีการจัดการแบบเนทีฟที่เพิ่งเพิ่มโดย Amazon (ซึ่งติดตั้งได้ง่ายกว่า)
  • หรือคุณสามารถติดตั้ง bucket กับระบบไฟล์บนเซิร์ฟเวอร์ Linux และเข้าถึงไฟล์โดยใช้ SFTP เป็นไฟล์อื่น ๆ บนเซิร์ฟเวอร์ (ซึ่งให้การควบคุมที่ดีกว่า)
  • หรือคุณสามารถใช้ (GUI) ไคลเอ็นต์ที่สนับสนุนโปรโตคอล S3 (ฟรี)

บริการ SFTP ที่มีการจัดการ

  • ใน Amazon AWS Console ของคุณไปที่AWS Transfer สำหรับ SFTPและสร้างเซิร์ฟเวอร์ใหม่

  • ในหน้าเซิร์ฟเวอร์ SFTP ให้เพิ่มผู้ใช้ SFTP ใหม่ (หรือผู้ใช้)

    • สิทธิ์ของผู้ใช้จะถูกควบคุมโดยบทบาท AWS ที่เกี่ยวข้องในบริการ IAM (สำหรับการเริ่มต้นอย่างรวดเร็วคุณสามารถใช้นโยบายAmazonS3FullAccess )

    • บทบาทต้องมีความสัมพันธ์ที่เชื่อถือtransfer.amazonaws.comได้

สำหรับรายละเอียดโปรดดูคู่มือของฉันการตั้งค่าการเข้าถึง SFTP เพื่อ Amazon S3


กำลังติดตั้ง Bucket กับ Linux Server

เพียงติดตั้งที่ฝากข้อมูลโดยใช้s3fsระบบไฟล์ (หรือคล้ายกัน) กับเซิร์ฟเวอร์ Linux (เช่น Amazon EC2) และใช้เซิร์ฟเวอร์ SFTP ในตัวของเซิร์ฟเวอร์เพื่อเข้าถึงที่ฝากข้อมูล

  • ติดตั้ง s3fs
  • เพิ่มการรักษาความปลอดภัยข้อมูลประจำตัวของคุณในรูปแบบaccess-key-id:secret-access-keyที่จะ/etc/passwd-s3fs
  • เพิ่มรายการการติดตั้งที่เก็บข้อมูลลงในfstab:

    <bucket> /mnt/<bucket> fuse.s3fs rw,nosuid,nodev,allow_other 0 0
    

สำหรับรายละเอียดโปรดดูคู่มือของฉันการตั้งค่าการเข้าถึง SFTP เพื่อ Amazon S3


ใช้ไคลเอนต์ S3

หรือใช้ฟรี"ไคลเอนต์ FTP / SFTP"ใด ๆนั่นก็เป็น"ไคลเอนต์ S3"และคุณไม่มีการตั้งค่าใด ๆ บนฝั่งเซิร์ฟเวอร์ ตัวอย่างเช่นฉัน WinSCPหรือCyberduck

WinSCP ยังมีการเขียนสคริปต์และอินเตอร์เฟส. NET / PowerShellหากคุณต้องการโอนเงินอัตโนมัติ


2
การติดตั้งที่ฝากข้อมูลไว้rootจะให้permission deniedปัญหาการโอนภายหลังเมื่อเชื่อมต่อec2-userผ่านทาง SFTP /mnt/<bucket>โฟลเดอร์เป็นเจ้าของrootและมีกลุ่มrootด้วย
elvismdev

1
@elvismdev / others - เมานต์เป็นผู้ใช้ ftp (ใช้ตัวเลือก uid / gid) และตรวจสอบให้แน่ใจว่าติดตั้งด้วยallow_other(หรือ-o allow_otherถ้าติดตั้งจากบรรทัดคำสั่ง s3fs) .. ใช้ได้กับฉัน ก็ควรเขียนไฟล์เป็นสิทธิ์แบบอ่านอย่างเดียว (-o default_acl = สาธารณะอ่าน) ในกรณีของฉัน (ในถังส่วนตัว)
bshea

66

ปรับปรุง

S3 ตอนนี้มีบริการSFTP Gateway ที่ได้รับการจัดการอย่างเต็มรูปแบบสำหรับ S3ที่รวมกับ IAM และสามารถจัดการได้โดยใช้ aws-cli


มีเหตุผลทั้งภาคทฤษฎีและภาคปฏิบัติเหตุใดจึงไม่ใช่โซลูชันที่สมบูรณ์แบบ แต่ใช้งานได้ ...

คุณสามารถติดตั้งบริการ FTP / SFTP (เช่น ProFTPD) บนเซิร์ฟเวอร์ลินุกซ์ทั้งใน EC2 หรือในศูนย์ข้อมูลของคุณเอง ... แล้วติดถังเข้าไปในระบบแฟ้มที่ FTP เซิร์ฟเวอร์ที่มีการกำหนดให้ chroot ใช้s3fs

ฉันมีไคลเอนต์ที่ให้บริการเนื้อหาจาก S3 และเนื้อหาถูกจัดเตรียมโดยบุคคลที่สามที่รองรับเฉพาะ ftp pushes ... ดังนั้นด้วยความลังเล (เนื่องจากอิมพิแดนซ์ไม่ตรงกันระหว่าง S3 และระบบแฟ้มจริง) แต่ขาด เวลาที่จะเขียนแพ็คเกจซอฟท์แวร์เซิร์ฟเวอร์เกตเวย์ FTP / S3 ที่เหมาะสม (ซึ่งฉันยังคงตั้งใจจะทำอย่างใดอย่างหนึ่งในทุกวันนี้) ฉันเสนอและปรับใช้โซลูชันนี้สำหรับพวกเขาเมื่อหลายเดือนก่อนและพวกเขาไม่ได้รายงานปัญหาใด ๆ กับระบบ

เป็นโบนัสเนื่องจาก proftpd สามารถ chroot ผู้ใช้แต่ละคนลงในโฮมไดเร็กตอรี่ของตัวเองและ "แกล้ง" (เท่าที่ผู้ใช้สามารถบอกได้) ว่าไฟล์ที่ผู้ใช้ proftpd เป็นเจ้าของนั้นเป็นของจริงโดยผู้ใช้ที่เข้าสู่ระบบ "ไดเรกทอรีย่อย" ของที่เก็บข้อมูลและทำให้ไฟล์ของผู้ใช้อื่นไม่สามารถเข้าถึงได้


มีปัญหากับการกำหนดค่าเริ่มต้นอย่างไรก็ตาม

เมื่อคุณเริ่มรับไฟล์หลายสิบหรือหลายร้อยไฟล์ปัญหาจะปรากฏขึ้นเมื่อคุณดึงรายชื่อไดเรกทอรีเนื่องจาก ProFTPd จะพยายามอ่าน.ftpaccessไฟล์ซ้ำแล้วซ้ำอีกและซ้ำแล้วซ้ำอีกและสำหรับแต่ละไฟล์ในไดเรกทอรี.ftpaccessมีการตรวจสอบเพื่อดูว่าผู้ใช้ควรได้รับอนุญาตให้ดู

คุณสามารถปิดการใช้งานพฤติกรรมนี้ใน ProFTPd แต่ฉันขอแนะนำว่าการกำหนดค่าที่ถูกต้องที่สุดคือการกำหนดค่าตัวเลือกเพิ่มเติม-o enable_noobj_cache -o stat_cache_expire=30ใน s3fs:

-o stat_cache_expire (ค่าเริ่มต้นไม่มีวันหมดอายุ)

ระบุเวลาหมดอายุ (วินาที) สำหรับรายการใน stat cache

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

-o enable_noobj_cache (ค่าเริ่มต้นถูกปิดใช้งาน)

เปิดใช้งานรายการแคชสำหรับวัตถุที่ไม่มีอยู่ s3fs ต้องตรวจสอบเสมอว่าไฟล์ (หรือไดเรกทอรีย่อย) อยู่ภายใต้วัตถุ (เส้นทาง) เมื่อ s3fs ทำคำสั่งบางคำสั่งเนื่องจาก s3fs ได้รับการยอมรับไดเรกทอรีที่ไม่มีอยู่และมีไฟล์หรือไดเรกทอรีย่อยอยู่ภายใต้ตัวเอง เพิ่มคำขอ ListBucket และทำให้ประสิทธิภาพไม่ดี คุณสามารถระบุตัวเลือกนี้เพื่อประสิทธิภาพการทำงาน s3fs จดจำใน stat cache ว่าไม่มีวัตถุ (ไฟล์หรือไดเรกทอรี)

ตัวเลือกนี้ช่วยให้ s3fs จำได้ว่า.ftpaccessไม่มี


ไม่เกี่ยวข้องกับปัญหาประสิทธิภาพที่อาจเกิดขึ้นกับ ProFTPd ซึ่งได้รับการแก้ไขโดยการเปลี่ยนแปลงข้างต้นคุณต้องเปิดใช้งาน-o enable_content_md5ใน s3fs ด้วย

-o enable_content_md5 (ค่าเริ่มต้นถูกปิดใช้งาน)

การตรวจสอบข้อมูลที่อัพโหลดโดยไม่ต้องมีส่วนหลายส่วนหัว content-md5 เปิดใช้งานเพื่อส่งส่วนหัว "เนื้อหา -MD5" เมื่ออัปโหลดวัตถุโดยไม่มีการโพสต์แบบหลายส่วน หากเปิดใช้งานตัวเลือกนี้จะมีผลกับประสิทธิภาพของ s3fs เมื่ออัปโหลดวัตถุขนาดเล็ก เนื่องจาก s3fs จะตรวจสอบ MD5 เสมอเมื่ออัปโหลดวัตถุขนาดใหญ่ตัวเลือกนี้จะไม่ส่งผลกระทบต่อวัตถุขนาดใหญ่

นี่คือตัวเลือกที่ไม่ควรเป็นตัวเลือก - ควรเปิดใช้งานเสมอเพราะไม่ทำเช่นนี้จะข้ามการตรวจสอบความสมบูรณ์ที่สำคัญเพื่อผลประโยชน์ด้านประสิทธิภาพที่เล็กน้อย เมื่อวัตถุถูกอัปโหลดไปยัง S3 ด้วย aContent-MD5:ส่วนหัว S3 จะตรวจสอบการตรวจสอบและปฏิเสธวัตถุหากวัตถุนั้นเสียหายระหว่างการขนส่ง อย่างไรก็ตามไม่น่าเป็นไปได้ที่ดูเหมือนว่าจะมีการสายตาสั้นเพื่อปิดใช้งานการตรวจสอบความปลอดภัยนี้

คำพูดมาจากหน้าคนของ s3fs ข้อผิดพลาดทางไวยากรณ์อยู่ในข้อความต้นฉบับ


4
คุณช่วยอธิบายรายละเอียดเกี่ยวกับสาเหตุที่โซลูชันนี้ไม่เหมาะได้อย่างไร
fernio

2
@MarcoMarsala การแก้ไขสำหรับไดเรกทอรีขนาดใหญ่ได้รับการเพิ่มคำตอบ
Michael - sqlbot

1
@ Michael-sqlbot คุณลองใช้คำสั่ง "AllowOverride off" ในการตั้งค่า ProFTPd แล้วหรือยังเพื่อหยุดการอ่านไฟล์ ".ftpaccess" โดยสมบูรณ์
Greg Dubicki

1
ฉันได้ลองทุกอย่างแล้วและสามารถตั้งค่าผู้ใช้: กลุ่ม / สิทธิ์ที่ระดับโฟลเดอร์ที่ติดตั้งถัง S3 จากนั้นสิทธิ์เหล่านั้นจะแพร่กระจายไปยังทุก ๆ โฟลเดอร์บน S3 ฉันได้ลองหลายสิ่งหลายอย่างรวมถึงความหลากหลายในคำสั่ง S3FS นี้sudo s3fs bucket-name /local-mount-folder-name/ -o iam_role=sftp-server -o allow_other -o umask=022 -o uid=501 -o gid=501- ฉันไม่สามารถเปลี่ยนการอนุญาตใด ๆ ในโฟลเดอร์ในโฟลเดอร์เมานต์ S3 เมื่อมันถูกสร้างขึ้น
T. Brian Jones

1
@Sverre ฉันยังคงใช้โซลูชันนี้ในการผลิต มันไม่ได้ทำให้ฉันมีปัญหาใด ๆ
Michael - sqlbot

24

คำตอบจากปี 2014 สำหรับผู้ที่ลงคะแนนให้ฉัน:

ทีนี้ S3 ไม่ใช่ FTP มีลูกค้ามากมายที่รองรับ S3 อย่างไรก็ตาม

ค่อนข้างมากทุกไคลเอนต์ FTP ที่โดดเด่นบน OS X ได้รับการสนับสนุนรวมถึงการส่งและCyberduck Cyberduck

หากคุณบน Windows, ดูที่CyberduckหรือCloudBerry

อัปเดตคำตอบสำหรับปี 2019:

AWS เพิ่งเปิดตัวAWS Transfer สำหรับบริการSFTPซึ่งอาจทำสิ่งที่คุณต้องการ


2
Cyberduck ใช้งานง่ายอย่างน่าอัศจรรย์หากคุณเป็นเซิร์ฟเวอร์มือใหม่เหมือนตัวเอง เพียงคลิกที่ Open Connection เลือก S3 จากดรอปดาวน์และใส่ข้อมูลรับรองของฉัน ง่ายกว่าตัวเลือกบางตัวที่กล่าวถึงข้างต้น!
Marquizzo

7

หรือหมุนอินสแตนซ์ Linux สำหรับSFTP Gatewayในโครงสร้างพื้นฐาน AWS ของคุณที่บันทึกไฟล์ที่อัปโหลดไปยังที่เก็บ Amazon S3 ของคุณ

สนับสนุนโดยThorntech


2
เราใช้ SFTP Gateway ในการผลิตสำหรับโครงการขนาดใหญ่เป็นเวลาหลายปี เราพบว่ามันน่าเชื่อถือกว่า s3fs
Jeff

3

Filezilla เพิ่งเปิดตัวไคลเอนต์ FTP รุ่น Proของพวกเขา มันเชื่อมต่อกับ S3 S3 ใน FTP ที่คล่องตัวเหมือนประสบการณ์ ฉันใช้มันเอง (ไม่มีส่วนเกี่ยวข้องใด ๆ ) และมันใช้งานได้ดี


3

WinSCp รองรับโปรโตคอล S3 แล้ว

ขั้นแรกตรวจสอบให้แน่ใจว่าผู้ใช้ AWS ของคุณที่มีสิทธิ์การเข้าถึง S3 ได้สร้าง“ รหัสคีย์การเข้าถึง” แล้ว คุณต้องรู้ "รหัสลับการเข้าถึง" คีย์การเข้าถึงถูกสร้างและจัดการในหน้าผู้ใช้ของ IAM Management Console

ตรวจสอบให้แน่ใจว่าได้เลือกโหนดไซต์ใหม่

บนโหนดไซต์ใหม่เลือกโปรโตคอล Amazon S3

ป้อนรหัสการเข้าถึงของผู้ใช้ AWS และรหัสการเข้าถึงลับ

บันทึกการตั้งค่าไซต์ของคุณโดยใช้ปุ่มบันทึก

เข้าสู่ระบบโดยใช้ปุ่มเข้าสู่ระบบ


2

Amazon ได้เปิดตัวบริการ SFTP สำหรับ S3 แต่พวกเขาทำเพียง SFTP (ไม่ใช่ FTP หรือ FTPES) และพวกเขาสามารถเป็นค่าใช้จ่ายต้องห้ามขึ้นอยู่กับสถานการณ์ของคุณ

ฉันเป็นผู้ก่อตั้งDocEvent.ioและเราให้บริการ FTP / S เกตเวย์สำหรับที่เก็บข้อมูล S3 ของคุณโดยไม่ต้องปั่นเซิร์ฟเวอร์หรือกังวลเรื่องโครงสร้างพื้นฐาน

นอกจากนี้ยังมี บริษัท อื่น ๆ ที่ให้บริการเซิร์ฟเวอร์ FTP แบบสแตนด์อโลนที่คุณจ่ายตามเดือนที่สามารถเชื่อมต่อกับที่ฝากข้อมูล S3 ผ่านการกำหนดค่าซอฟต์แวร์ตัวอย่างเช่นbrickftp.com brickftp.com

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


DocEvents ดูดี แต่มีข้อ จำกัด มากเกินไปในแผนฟรี ... ฉันไม่สามารถลองใช้บริการ ...
D.Dimitrioglo

1

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

เราใช้SFTP S3 Proxy Gateway มานานประมาณ 5 ปีแล้วสำหรับลูกค้าของเรา โซลูชันหลักถูกรวบรวมไว้ในคอลเลกชันของบริการ Docker และปรับใช้ในทุกสิ่งที่ต้องการแม้ในสถานที่หรือเซิร์ฟเวอร์การพัฒนาท้องถิ่น กรณีใช้งานของเราแตกต่างกันเล็กน้อยเนื่องจากโซลูชันของเราเน้นการประมวลผลข้อมูลและท่อเทียบกับการแบ่งปันไฟล์ ในตัวอย่าง Salesforce ลูกค้าจะใช้ SFTP เป็นวิธีการขนส่งที่ส่งอีเมลซื้อข้อมูล ... ไปยังจุด SFTP / S3 สิ่งนี้ถูกแมปคีย์วัตถุใน S3 เมื่อมาถึงข้อมูลจะถูกหยิบขึ้นประมวลผลส่งและโหลดไปยังคลังสินค้า นอกจากนี้เรายังมีข้อกำหนดการตรวจสอบที่มีนัยสำคัญพอสมควรสำหรับการถ่ายโอนแต่ละครั้งสิ่งที่บันทึกของ Cloudwatch สำหรับ AWS ไม่ได้จัดเตรียมไว้ให้

ดังที่คนอื่น ๆ ได้กล่าวถึงการกลิ้งตัวคุณเองก็เป็นตัวเลือกเช่นกัน การใช้ AWS Lightsail คุณสามารถตั้งค่าคลัสเตอร์พูดได้ 4, จาก $ 10 2GB อินสแตนซ์โดยใช้ Route 53 หรือ ELB

โดยทั่วไปเป็นเรื่องดีที่ได้เห็น AWS เสนอบริการนี้และฉันคาดหวังว่ามันจะเติบโตขึ้นเมื่อเวลาผ่านไป อย่างไรก็ตามขึ้นอยู่กับกรณีการใช้งานของคุณโซลูชันทางเลือกอาจเหมาะสมกว่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.