WinSCP รองรับการเชื่อมต่อ S3 โดยใช้ IAM Role แล้ว

WinSCP รองรับการเชื่อมต่อ S3 โดยใช้ IAM Role แล้ว

สามารถเชื่อมต่อกับ S3 ได้โดยไม่ต้องใช้ IAM Access Key

เนื่องจากมีความต้องการที่จะเชื่อมต่อกับ S3 อย่างสะดวกจาก Windows Server ที่รันบน EC2 จึงได้ติดตั้ง WinSCP และพบว่าในขณะนี้รองรับการเชื่อมต่อ S3 โดยใช้ IAM Role แล้ว จึงจะมาแนะนำในบทความนี้

แนะนำเบื้องต้น

ใน WinSCP สามารถเชื่อมต่อกับ S3 ได้โดยใช้ IAM Access Key ซึ่งเนื้อหาในส่วนนี้เคยถูกนำเสนอไว้ในบล็อกก่อนหน้าของบริษัทเราแล้ว
https://dev.classmethod.jp/articles/connect-to-amazon-s3-with-winscp/

เมื่อได้ลองตรวจสอบดูว่าเริ่มสามารถเชื่อมต่อกับ S3 ได้ตั้งแต่เมื่อไร ดูเหมือนว่าเป็นช่วงปลายปี 2017 ดังนั้นอาจมีหลายท่านที่ทราบอยู่แล้วว่าสามารถเชื่อมต่อกับ S3 ได้โดยใช้ IAM Access Key

เมื่อช่วงเดือนมกราคมปี 2024 ที่ผ่านมา ตอนที่ผมติดตั้ง WinSCP ยังจำได้ว่าต้องตั้งค่า Access Key อยู่เลย ดังนั้นการที่ WinSCP รองรับ IAM Role น่าจะเป็นฟีเจอร์ที่เพิ่งเพิ่มเข้ามาไม่นานนี้เอง

ตรวจสอบเวอร์ชันต่างๆ ของ WinSCP ได้ที่ลิงก์ด้านล่างนี้
Recent Version History

ใน Document ก็มีการระบุเกี่ยวกับข้อมูลการรับรองความถูกต้องของสภาพแวดล้อม AWS (IAM Role) ไว้ด้วยเช่นกัน

With S3 protocol you can use Credentials from AWS environment. The discovered credentials will show in the respective boxes, but they won’t be saved. They will be read again each time you login.

ตามที่คาดไว้ มีการระบุไว้อย่างชัดเจนว่า หากใช้ IAM Role จะไม่มีการจัดเก็บ Credentials ไว้ใน Server
ดังนั้นจะลองเชื่อมต่อกับ Amazon S3 โดยใช้ IAM Role Authentication ผ่าน WinSCP ที่ติดตั้งไว้ใน EC2 (Windows)

ลองทำดู

สร้าง S3

สร้าง S3 Bucket ตามขั้นตอนในลิงก์ 1-1.การสร้าง S3 BUCKET นี้ โดยครั้งนี้ได้สร้าง Bucket ชื่อว่า s3-winscp-iam-role-test ใน Thailand Region

IAM Role สำหรับใช้กับ EC2 Instance

สร้าง IAM Role สำหรับใช้กับ EC2 Instance (Windows Server) โดยดูวิธีการสร้างได้ที่ลิงก์และตัวอย่างด้านล่างนี้

※ลิงก์บทความด้านล่างนี้เป็นแค่ตัวอย่าง มีการตั้งค่าบางส่วนที่แตกต่างกัน ให้ตั้งค่าตาม "ตัวอย่างการสร้าง IAM Role สำหรับใช้กับ EC2 Instance ในครั้งนี้"
https://dev.classmethod.jp/articles/ssm-iam-role-for-use-with-ec2-instance/

ตัวอย่างการสร้าง IAM Role สำหรับใช้กับ EC2 Instance ในครั้งนี้

  1. ไปที่บริการ "Identity and Access Management (IAM)"
  2. เลือก "Roles" จากเมนูด้านซ้าย แล้วคลิก "Create role"
  3. เลือก "AWS service" และเลือก "EC2" จากนั้นคลิก "Next"
  4. ไม่ต้องแนบ Policy ใดๆ จะเพิ่มภายหลัง
  5. เพิ่ม Tag ตามความจำเป็น
  6. ป้อน Role name เช่น "ec2-winscp-iam-role-test" (ครั้งนี้ใช้ชื่อเดียวกับ EC2) แล้วคลิก "Create role"

เพิ่ม Policy แบบสร้าง Inline Policy

เมื่อสร้างเสร็จแล้วจะเพิ่ม Policy แบบสร้าง Inline Policy ดังนี้

เข้ามาที่ Policy ที่สร้าง แล้วคลิก Add permissions และเลือก Create inline policy ในแท็บ Permissions
inline_policy-1

Step 1 - Specify permissions
เลือก JSON แล้วคัดลอก Code ด้านล่างนี้วางในช่อง Policy editor ตามรูปภาพด้านล่าง และคลิก Next ด้านล่างสุด
※อย่าลืมเปลี่ยน bucket-name ให้เป็นชื่อ S3 Bucket ของคุณ (ครั้งนี้คือ s3-winscp-iam-role-test)

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

inline_policy-2

Step 2 - Review and create
ป้อน Policy name เช่น s3-winscp-iam-role-test (ครั้งนี้ใช้ชื่อเดียวกับ S3) แล้วคลิก Create policy
inline_policy-3

เมื่อสร้างเสร็จแล้วจะแสดงหน้าจอแบบนี้
inline_policy-4

สร้าง EC2 Instance (Windows Server)

สร้าง EC2 Instance (Windows Server) สำหรับใช้ติดตั้ง WinSCP โดยดูวิธีการสร้างได้ที่ลิงก์ด้านล่างนี้

※ลิงก์บทความด้านล่างนี้เป็นแค่ตัวอย่าง มีการตั้งค่าบางส่วนที่แตกต่างกัน ให้ตั้งค่าตาม "ตัวอย่างการสร้าง IAM Role สำหรับใช้กับ EC2 Instance ในครั้งนี้"
https://dev.classmethod.jp/articles/windows-server-2022-in-amazon-ec2/

ตัวอย่างการสร้าง IAM Role สำหรับใช้กับ EC2 Instance ในครั้งนี้

Region: Thailand (แนะนำให้สร้าง EC2 Instance ใน Region เดียวกับ Amazon S3)

Key pair

Name: ec2-winscp-iam-role-test
Key pair type: RSA
Private key file format: .pem

EC2 Instance

Name and tags
Name: ec2-winscp-iam-role-test

Application and OS Images (Amazon Machine Image)
แท็บ Quick Start: Windows
Amazon Machine Image (AMI): Microsoft Windows Server 2025 Base

Instance type
Instance type: t3.micro

Key pair (login)
Key pair name - required: ec2-winscp-iam-role-test (Key pair ที่สร้างเตรียมไว้ตอนแรก)

Network settings
Firewall (security groups)
Create security group
"Security group name - required" และ "Description - required": ec2-winscp-iam-role-test
Inbound Security Group Rules: Type: rdp | Source type: My IP

Configure storage
1x 30 GiB gp3 Root volume, 3000 IOPS, Not encrypted

IAM instance profile: ec2-winscp-iam-role-test
ec2-s3-iam-role

เมื่อสร้าง EC2 Instance (Windows Server) และ Login สำเร็จแล้ว ให้ดาวน์โหลดและติดตั้ง WinSCP ได้จากที่นี่ ครั้งนี้เป็นเวอร์ชัน [6.5.2]

การตั้งค่า WinSCP

เปิดโปรแกรม WinSCP หน้าจอการตั้งค่าการเข้าสู่ระบบจะปรากฏขึ้น แล้วเลือก [Amazon S3] เป็นโปรโตคอลการถ่ายโอน
winscp-s3-1

ป้อน Host name เป็น [s3.ap-southeast-7.amazonaws.com] (*หากใช้ Host name "s3.amazonaws.com" ที่เป็นค่าเริ่มต้น จะไม่สามารถเชื่อมต่อได้)
แล้วดูที่ [Credentials from AWS environment] ซึ่งเป็นรายการสำหรับการตั้งค่าการเชื่อมต่อกับ S3 ที่ถูกเพิ่มเข้ามาใหม่ ให้ติ๊กเครื่องหมายถูก ✅️ ในช่องนี้เพื่อเปิดใช้งาน
winscp-s3-2

เมื่อติ๊กแล้ว Access key ID และ Secret access Key จะถูกป้อนโดยอัตโนมัติและไม่สามารถแก้ไขได้ ข้อมูลรับรองชั่วคราวที่ได้รับจาก IAM Role จะแสดงขึ้นมาแบบนี้ นอกจากนี้ยังสามารถเลือกจากรายการ Drop-down ถัดจากช่องทำเครื่องหมายได้ แต่ในสภาพแวดล้อมนี้สามารถเลือกได้เพียง [General] เท่านั้น รายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้จะอธิบายไว้ในตอนท้ายของบทความนี้

จากนั้นคลิกปุ่ม [Advanced...] เพื่อตั้งค่าในขั้นตอนถัดไป
winscp-s3-3

ในการตั้งค่า [Environment]-[Directories] ให้ป้อน Path ไปยัง S3 Bucket ที่สร้างเตรียมไว้ใน [Remote directory]
winscp-s3-4

เมื่อดูการตั้งค่า [Environment]-[S3] จะเห็นว่ามีการป้อน [Session token] ไปแล้วและไม่สามารถแก้ไขได้ ในส่วนนี้ไม่จำเป็นต้องตั้งค่าอะไร ดังนั้นให้คลิกปุ่ม [OK]
winscp-s3-5

คลิก [Save] แล้วจะมี POP-UP "Save session as site" แสดงขึ้นมา
ให้บันทึกการตั้งค่านี้โดยตั้งค่าในช่อง [Site name] เป็นชื่อของ S3 Bucket ที่สร้างขึ้นในครั้งนี้ นอกจากนี้ยังมี [Create desktop shortcut] ให้ติ๊กด้วย ดูเหมือนจะสะดวกดีเลยลองติ๊กเปิดใช้งานดู แล้วคลิก [OK]
winscp-s3-6

การตั้งค่าถูกบันทึกเรียบร้อยแล้ว และได้มีการสร้าง Shortcut ขึ้นบน Desktop ด้วย ดังนั้นจะใช้โอกาสนี้ในการลองปิด WinSCP แล้วเปิดใหม่ผ่าน Shortcut บน Desktop ดูสักครั้ง
winscp-s3-7

ตรวจสอบการเชื่อมต่อ S3

เมื่อลองดับเบิลคลิกที่ Shortcut แล้วก็เชื่อมต่อกับ S3 ได้ทันทีเลย สะดวกมากจริงๆ
winscp-s3-8

สร้างไฟล์ข้อความอะไรก็ได้ง่ายๆ ขึ้นมา เช่น [Text File] แล้วเราสามารถอัปโหลดไฟล์ไปยัง S3 ได้อย่างง่ายดายด้วยการลากและวาง
winscp-s3-9

ต่อไปลองไปดูที่ S3 Bucket ในหน้าจอ Console กันบ้าง จะเห็นว่าไฟล์ถูกอัปโหลดเข้ามาแล้ว
winscp-s3-10

ส่วนเสริม

สำหรับรายการ Drop-down ที่อยู่ถัดจากช่อง [Credentials from AWS environment] หากมีการตั้งค่าโปรไฟล์ (~/.aws/credentials) ไว้บนเซิร์ฟเวอร์ ระบบจะสามารถอ่านและเลือกใช้งานได้โดยอัตโนมัติ แต่ครั้งนี้ไม่ได้ตั้งค่าไว้ จึงสามารถเลือกได้แค่ [General] เท่านั้นตามที่แสดงในรูปภาพด้านล่าง
winscp-s3-11

สรุป

รู้สึกประทับใจที่ WinSCP ที่ใช้งานมาอย่างยาวนาน ยังมีการพัฒนาและปรับปรุงอย่างต่อเนื่อง ตามที่ได้กล่าวไว้ในส่วนเสริม ฟีเจอร์ต่างๆ ก็ดูเหมือนจะยังเพิ่มขึ้นเรื่อยๆ

สำหรับผู้ที่ใช้งาน WinSCP บน EC2 และเชื่อมต่อกับ S3 โดยใช้ IAM Access Key หากอัปเดต WinSCP เป็นเวอร์ชันใหม่ ก็อาจสามารถใช้งานได้โดยไม่ต้องฝัง Access Key ลงไปในการตั้งค่าอีกต่อไป

หวังว่าบทความนี้จะเป็นประโยชน์กับใครสักคนไม่มากก็น้อยครับ

บทความต้นฉบับ

https://dev.classmethod.jp/articles/connected-to-s3-with-winscp-iam-role/

แปลโดย: POP(Tinnakorn Maneewong) จากบริษัท Classmethod (Thailand) ครับ !

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

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.