เชื่อมต่อ Amazon S3 ด้วย WinSCP

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ครั้งนี้จะมาทำการเชื่อมต่อ S3 จาก WinSCP โดยใช้IAM access key รวมไปถึงเปิดการเข้าถึง S3 server access logs และตั้งค่าจัดเก็บ access logs กันครับ

ขั้นตอนการตั้งค่า

การตั้งค่าหลักๆจะแยกเป็น2ส่วน ส่วนแรกจะเป็นการตั้งค่าฝั่งAWS และ อีกส่วนจะเป็นการตั้งค่าในฝั่งของClient

  • การตั้งค่าฝั่งAWS
    1-1. การสร้าง S3 BUCKET
    1-2. การตั้งค่า S3 Server access logs
    1-3. การออก Access key และสร้าง IAM User
  • การตั้งค่าฝั่งClient
    2-1. การติดตั้ง WinSCP
    2-2. ตรวจสอบการเชื่อมต่อ
  • 1.การตั้งค่าฝั่งAWS

    1-1.การสร้าง S3 BUCKET

    สร้างS3 Bucket ที่จะเชื่อมต่อกับWinSCP จากหน้า management console

    ตั้งชื่อS3 bucket, AWS Regionได้ตามสะดวก และเลือกปิดACL เพราะACLเป็นวิธีการจัดการการเข้าถึงS3แบบเก่าจึงไม่แนะนำให้เปิดใช้งาน และในบทความนี้ไม่มีความจำเป็นต้องตั้งค่าpublic access ให้เลือกblock public accessได้เลยจากนั้นและไปที่ขั้นตอนต่อไป

    ตั้งค่าตามด้านล่างนี้ โดยในหัวข้อ Default encryption ให้เลือก Amazon S3-managed keys (SSE-S3)

    เลื่อนลงไปทางด้านล่าง และเลือก Create bucket

    ในขั้นตอนเดียวกันนี้ เราจะสร้างs3 bucketสำหรับการจัดเก็บ server access logs หากเราไม่ต้องการตั้งค่าในส่วนนี้ก็สามารถข้ามไปได้ ในการตั้งค่าการสร้างs3 bucketสำหรับการจัดการserver access logs มีข้อควรระวังดังนี้

    ข้อควรระวัง

  • ในs3 bucketสำหรับจัดเก็บ server access logsจะไม่รองรับการทำ object lock ได้
  • ในs3 bucketสำหรับจัดเก็บ server access logsค่าเริ่มต้นสำหรับ Default encryption จะเป็น "ไม่ใช้งาน" หรือ "SSE-S3"
  • Why aren't my Amazon S3 server access logs getting delivered?

    1-2. การตั้งค่า S3 Server access logs

    การตั้งค่าS3 Server access logsทำตามขั้นตอนดังนี้
    จากหน้าconsoleของS3ไปที่ ”bucket” แล้วเลือกs3 bucketที่จะเชื่อมต่อ → propertiesServer access logs และเลือก edit

    เลือก Enable Server access logging จากนั้นเลือกTarget bucketสำหรับเก็บlogs จริงๆแล้วสามารถเก็บlogs ลงในbucketของตนเองก็ได้แต่แนะนำให้เก็บในbucketอื่นจะดีกว่าครับ

    เสร็จสิ้นการตั้งค่าaccess logs

    สาเหตุที่แนะนำให้เก็บในbucketอื่น

    เพื่อการควบคุมlogsที่ง่ายขึ้น จึงแนะนำให้เก็บ access logs ในbucketแยก ในกรณีที่มี sort bucket และ target bucket เดียวกัน ก็จะมีสร้างlogsเพิ่มสำหรับเขียนข้อมูลลง bucket ซึ่งค่าใช้จ่ายของ storage ก็มีโอกาสที่จะสูงขึ้นตาม ยิ่งไปกว่านั้นเนื่องจากมีlogsเพิ่มขึ้นจะทำให้การค้นหา logs ที่จำเป็นยากขึ้นไปอีก

    Logging requests using server access logging

    1-3.การออก Access key และสร้าง IAM User

    จากนั้น เราจะมาออก Access key และสร้าง IAM User โดยเข้าไปที่หน้าบริการ IAM เลือก userจากนั้นเลือก add user

    ตั้งชื่อตามสะดวก และเลือก credential type เป็นAccess key - Programmatic accessเนื่องจากเป็นผู้ใช้งานที่ไม่ใช้ผ่าน console จึงไม่เลือกตรงหัวข้อmanagement console

    การตั้งค่าสิทธ์ต่างๆจะทำในภายหลังจึงยังไม่ต้องตั้งค่าในส่วนนี้

    ไม่ต้องตั้งค่าtagไปการตั้งค่าต่อไปได้เลย

    หลังจากตรวจสอบเนื้อหาแล้ว ให้เลือกที่ Create user

    หลังจากสร้างuserสำเร็จแล้ว ระบบจะออก secret access keyออกมาจะบันทึกโดยการจดโน้ตหรือจะโหลดเป็น CSV ไฟล์ก็ได้แล้วแต่ความสะดวก หากลืมsecret keyจะต้องออก access key ใหม่เท่านั้น และหากข้อมูลนี้อยู่ในมือบุคคลที่3จะสามารถตั้งค่าการเข้าถึงสิทธ์ต่างๆของเราได้ เพราะฉะนั้นการเก็บข้อมูลเป็นโน้ต หรือ โหลด CSV ไฟล์จึงเป็นสิ่งสำคัญมาก

    หลังจากนั้นเลือก "User" ที่สร้างจาก IAM แล้วเลือก PermissionและAdd inline policy

    ที่จริงแล้วมีวิธีที่จะสร้างpolicyแยกทีล่ะรายการแต่ในครั้งนี้จะเลือกเป็น inline policy โดยข้อแตกต่างระหว่าง inline policy และ control policy สามารถตรวจสอบได้ทางด้านล่างนี้ครับ

    เปรียบเทียบ inline policy และ control policy

    จากหน้าการตั้งค่า inline policy ให้นำข้อมูล policy ทางด้านล่างที่ระบุเป็น json ไปลง โดย 「bucket-name」 ให้เปลี่ยนเป็นชื่อs3bucketที่จะเชื่อมต่อ หรือจะเพิ่มสิทธิ์เช่น PutObject หรือ DeleteObject เข้าไปก็ได้ตามการใช้งาน

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "ListObjectsInBucket",
                "Effect": "Allow",
                "Action": ["s3:ListBucket"],
                "Resource": ["arn:aws:s3:::bucket-name"]
            },
            {
                "Sid": "GetObjectAction",
                "Effect": "Allow",
                "Action": "s3:GetObject",
                "Resource": ["arn:aws:s3:::bucket-name/*"]
            }
        ]
    }

    ข้อมูลอ้างอิงสำหรับสิทธิ์ในการตั้งค่า

  • Amazon S3 actions
  • Actions, resources, and condition keys for Amazon S3
  • ตั้งชื่อpolicyตามสะดวก

    ก็จะเป็นเสร็จสิ้นการตั้งค่าฝั่งAWS

    2.การตั้งค่าฝั่ง client

    ติดตั้งWinscpเพื่อเชื่อมต่อกับs3 รายละเอียดตามด้านล่างนี้ครับ

  • Access key (ขั้นตอนที่ 1-3)
  • Secret key (ขั้นตอนที่ 1-3)
  • S3 buncketที่จะเชื่อมต่อ
  • 2-1.ติดตั้งWinSCP

    interface styleแล้วแต่ความชอบ แต่ในครั้งนี้จะเลือกเป็น commander

    ถ้าเลือกเป็น Open Getting started page จะเป็นการเปิดหน้าเว็บไซต์ ไม่ต้องเลือกก็ได้

    เสร็จสิ้นการติดตั้ง WinSCP

    2-2.ทดสอบการเชื่อมต่อ

    เมื่อเปิดการใช้งาน winscpจะแสดงหน้าตั้งค่าใส่ข้อมูลการเชื่อมต่อขึ้นมาให้เลือกprotocolเป็นS3

    ใส่access key และ secret key ที่ออกมาจากขั้นตอนที่1-3เข้าไปแล้วเลือกหัวข้อAdvancedที่อยู่ทางด้านล่าง

    ในหัวข้อ Enviroment ให้ใส่bucket nameที่จะเชื่อมต่อไปที่ Remote directoryตามตัวอย่างด้านล่างจะใส่คำว่า 「/target-backet-name」เข้าไป

    จากนั้นก็เลือกที่OKแล้วกลับไปที่หน้าก่อนหน้า แล้วเลือกที่loginก็จะสามารถเชื่อมต่อได้ครับ

    ตอนนี้สามารถเชื่อมต่อได้แล้ว

    ข้อมูลเพิ่มเติม

    ในส่วนของการตั้งค่านั้นจบแล้วแต่จะแนะนำข้อมูลเพิ่มเติมตามด้านล่างนี้ครับ

    สิทธ์ในการเข้าถึง

    หากไม่ทำการRemote directoryจะเชื่อมต่อไม่ได้แล้วขึ้นแจ้งเตือนตามด้านล่าง

    ในกรณีที่ตั้งค่าสิทธิ์จาก IAM User เช่น S3FullAccess แล้วเชื่อมต่อโดยไม่ Remote directory ก็สามารถเชื่อมต่อได้แต่จะแสดงข้อมูล S3 bucket อื่นๆที่ไม่จำเป็นขึ้นมาด้วยซึ่งในครั้งนี้เราต้องการระบุbucketที่จะแสดงจึงต้องตั้งค่านี้

    access logs

    เมื่อเปิด bucket สำหรับเก็บ access logs จะพบ logs file จัดเก็บไว้ตามภาพนี้ครับ

    ตรวจสอบ user guide ที่เกี่ยวกับ log format ได้ทางด้านล่างนี้ครับ
    Amazon S3 server access log format

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

    How do I analyze my Amazon S3 server access logs using Athena?

    สรุป

    การเชื่อมต่อ S3 ผ่าน WinSCP นั้นสะดวกมาก ทั้งๆที่เป็นโปรแกรมเก่าแก่มาตั้งแต่สมัยยุคปี 2000 โดยในปัจจุบันยังคงมีอัพเดทอย่างต่อเนื่อง โดยในปัจจุบันสามารถซัพพอร์ท OpenSSL ได้อีกด้วย โดยอยากให้มีอัพเดทฟังก์ชั่นต่างๆเพิ่มขึ้นต่อไปอีกเรื่อยๆ และหวังว่า

    บทความที่เกี่ยวข้อง

  • Amazon S3 คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS ในปี 2022
  • How To Static Website EP2: การเก็บข้อมูลเว็บไซต์ลงบน Amazon S3 เพื่อให้ไปแสดงผลผ่าน Amazon CloudFront
  • การอัปโหลดข้อมูลไปยัง Amazon S3 ด้วย CloudBerry Explorer
  • การลบไฟล์อัตโนมัติด้วย S3
  • วิธีอัปโหลดไฟล์ด้วย WinSCP ไปยัง Server Website ที่ตั้งค่าใน EC2
  • WinSCP Official Site
  • https://github.com/winscp/winscp
  • AWS:Why aren't my Amazon S3 server access logs getting delivered?
  • AWS:Logging requests using server access logging
  • AWS:Choosing between managed policies and inline policies
  • AWS:Amazon S3 server access log format
  • AWS:How do I analyze my Amazon S3 server access logs using Athena?
  • S3のサーバーアクセスログから、接続失敗ログを洗い出す
  • 新サービスAWS Transfer for SFTPを使って、WinSCPからS3へアクセスする #reinvent
  • WinSCPでAmazon LinuxにSFTP接続してみた