การตั้งค่า Policy ที่แนะนำเมื่อต้องสร้าง ACCESS KEY สำหรับ S3 (วิธีสร้าง Policy โดยใช้ Visual Policy Editor)
สวัสดีครับ ต้า ครับ
ในการใช้งาน AWS แบบที่เป็น Best Practice เราควรจะให้ สิทธิผู้ใช้เท่าที่จำเป็น
เกี่ยวกับความเสี่ยงหากไม่ได้กำหนดสิทธิ์ให้ผู้ใช้เท่าที่จำเป็น
สามารถอ่านเพิ่มเติมได้ในบทความต่อไปนี้:
ซึ่งสิทธิที่อยู่ใน IAM user จะถูกกำหนดจาก IAM Policy
วันนี้ผมจะมาพาสร้าง IAM Policy ด้วย Visual Policy editor ซึ่งเป็น Official Tool ของ AWS กันครับ
โจทย์ Policy ที่ต้องการสร้าง
การสร้าง IAM Policy สำหรับ Access key เพื่อให้ Application เชื่อมต่อกับ S3 และสามารถ อัปโหลดหรือดาวน์โหลดไฟล์ ได้
ดังนั้น สิทธิ์ที่เราต้องการคือ PutObject, GetObject, ListBucket และ DeleteObject เพื่อให้การทำงานกับ S3 Bucket เป็นไปตามที่ต้องการ
หากใครไม่มีไอเดียว่าควรให้สิทธิอะไรดี ผมแนะนำให้ลองอ่านบทความต่อไปนี้ดูครับ
ลงมือทำ
"ก่อนที่เราจะเริ่มสร้าง IAM Policy เราต้องเข้าใจว่ามันคืออะไร และมีหน้าที่อะไร IAM Policy เป็นชุดของกฎที่กำหนดสิทธิ์การเข้าถึงทรัพยากร AWS โดยเราจะใช้ Visual Policy Editor ซึ่งเป็นเครื่องมือที่ช่วยให้การสร้าง Policy ง่ายขึ้นโดยไม่ต้องเขียน JSON เอง"
ก่อนอื่นให้เราไปที่ console ของ IAM Policy กันก่อน
เลือก Create Policy
ในหน้านี้ให้เราเลือก แบบ Visual
และเนื่องจากเราต้องการ Permission (สิทธิ) ในการใช้งาน S3
เราจะทำการเลือก S3 ครับ
ในหน้าต่างนี้เราสามารถเลือก สิทธิต่างๆที่เราต้องการได้
หากเราไม่เข้าใจว่าสิทธิแต่ละอันมันทำอะไรได้ เราสามารถกดinfo
เพื่อดูรายละเอียดได้
คราวนี้มาดูว่าผมเลือกอะไรกันบ้าง
ก่อนอื่น ผมเลือก ListBucket
และ GetBucketLocation
ต่อไปผมจะมาเลือก Resource ที่ IAM Policy นี้มีสิทธิเข้าถึง
เลื่อนลงมาด้านล่างในหัวข้อ Resources
เราเลือก Specific
แล้วกด Add ARNs
เราสามารถเลือก Bucket name ที่เราต้องการให้มีสิทธิเข้าถึงมันได้ที่นี่
โดยผมจะอนุญาตให้ IAM Policy นี้เข้าถึง tar-translate-app bucket ครับ
เท่านี้เราก็ได้ IAM Policy ที่มีสิทธิเข้าถึง tar-translate-app bucket แล้ว แต่เรายังไม่มีสิทธิเข้าไปดู ข้างใน Bucket เพราะฉนั้นเราจะมาเพิ่ม permission เข้าไปอีกตัวครับ
โดยการเลือกปุ่ม Add more permissions
ที่อยู่ด้านล่าง
คราวนี้เราจะมาเพิ่มสิทธิที่ IAM Policy นี้มีต่อข้างใน Bucket กัน
โดยผมจะเลือก PutObject
, GetObject
, DeleteObject
ตามภาพด้านล่างนี้
เลื่อนลงมาด้านล่างในหัวข้อ Resources
เราเลือก Specific
แล้วกด Add ARNs
รอบนี้ผมจะกรอกตามนี้เพื่อเป็นการระบุว่าจะมีสิทธิกับทุก object ใน Bucket
(การใส่ * หมายถึงให้สิทธิ์กับทุกไฟล์ภายใน Bucket)
แล้วผมทำการกด Next
จากนั้นเราสามารถตั้งชื่อ และ คำอธิบายได้ตามที่เราต้องการ
แล้วกด Create Policy
เป็นอันเสร็จสิ้น
เพิ่มเติม
เราสามารถเข้ามาดู Policy ที่เราสร้างขึ้น ในหน้าต่าง Policy ได้ครับ
โดยก็มีให้ดูทั้งแบบ Summary
และ JSON
ครับ
ในการกำหนด Resource ARN สำหรับ S3 ใน IAM Policy เราต้องระบุให้ถูกต้อง มิฉะนั้น Policy อาจทำงานไม่ถูกต้อง
เมื่อกำหนดสิทธิ์ให้กับ S3 Bucket และ Object ภายใน Bucket เราต้องระบุ ARN สองรูปแบบ ดังนี้
json
PreviewDownloadCopy code
"Resource": [
"arn:aws:s3:::your_name_s3_bucket",
"arn:aws:s3:::your_name_s3_bucket/*"
]
🔹 arn:aws:s3:::your_name_s3_bucket
→ หมายถึง ตัว Bucket เอง
🔹 arn:aws:s3:::your_name_s3_bucket/*
→ หมายถึง ไฟล์ทั้งหมดภายใน Bucket
💡 หากระบุเพียงอย่างใดอย่างหนึ่ง อาจทำให้ Policy ไม่ทำงานตามที่คาดไว้
ตัวอย่าง IAM Policy สำหรับ S3 ตามกรณีที่พบบ่อย
ในการใช้งานจริง การกำหนดสิทธิ์ของ IAM Policy ควรพิจารณาตามความต้องการของระบบ และหลักการ Least Privilege Principle หรือการให้สิทธิ์เท่าที่จำเป็น
ด้านล่างนี้เป็นตัวอย่าง IAM Policy ที่สามารถนำไปใช้งานได้ตามกรณีต่างๆ
1️⃣ ให้สิทธิ์ ดาวน์โหลดไฟล์เท่านั้น (ReadOnly)
หากต้องการให้ผู้ใช้สามารถ ดาวน์โหลดไฟล์ จาก S3 Bucket ได้โดยไม่สามารถอัปโหลดหรือลบไฟล์ สามารถใช้ Policy ดังนี้
json
PreviewDownloadCopy code
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}
คำอธิบาย
✅ s3:GetObject
→ อนุญาตให้ดาวน์โหลดไฟล์จาก S3
✅ s3:ListBucket
→ อนุญาตให้ดูรายการไฟล์ใน Bucket
2️⃣ ให้สิทธิ์ อัปโหลดและดาวน์โหลดไฟล์ (Read/Write)
หากต้องการให้ผู้ใช้สามารถ อัปโหลดและดาวน์โหลดไฟล์ ได้ แต่ไม่สามารถลบไฟล์ ให้ใช้ Policy ดังนี้
json
PreviewDownloadCopy code
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}
คำอธิบาย
✅ s3:GetObject
→ อนุญาตให้ดาวน์โหลดไฟล์
✅ s3:PutObject
→ อนุญาตให้อัปโหลดไฟล์
✅ s3:ListBucket
→ อนุญาตให้ดูรายการไฟล์
3️⃣ ให้สิทธิ์ อัปโหลด, ดาวน์โหลด และลบไฟล์ (Read/Write/Delete)
หากต้องการให้ผู้ใช้สามารถ อัปโหลด, ดาวน์โหลด และลบไฟล์ ได้ ให้ใช้ Policy ดังนี้
json
PreviewDownloadCopy code
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}
คำอธิบาย
✅ s3:GetObject
→ อนุญาตให้ดาวน์โหลดไฟล์
✅ s3:PutObject
→ อนุญาตให้อัปโหลดไฟล์
✅ s3:DeleteObject
→ อนุญาตให้ลบไฟล์
✅ s3:ListBucket
→ อนุญาตให้ดูรายการไฟล์
4️⃣ ให้สิทธิ์ กำหนดสิทธิ์แยกตามโฟลเดอร์
หากต้องการให้สิทธิ์ เฉพาะบางโฟลเดอร์ใน S3 Bucket เช่น ให้ผู้ใช้สามารถอัปโหลดและดาวน์โหลดไฟล์ได้เฉพาะโฟลเดอร์ uploads/
เท่านั้น สามารถใช้ Policy ดังนี้
json
PreviewDownloadCopy code
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::your-bucket-name/uploads/*"
]
}
]
}
คำอธิบาย
✅ s3:GetObject
→ อนุญาตให้ดาวน์โหลดไฟล์จาก uploads/
✅ s3:PutObject
→ อนุญาตให้อัปโหลดไฟล์ไปที่ uploads/
💡 หมายเหตุ: Policy นี้จะไม่สามารถเข้าถึงไฟล์นอกโฟลเดอร์ uploads/
ได้
สรุป
ในส่วนนี้ เราได้เพิ่มตัวอย่าง IAM Policy สำหรับกรณีที่พบบ่อย ได้แก่
✔ ReadOnly → ดาวน์โหลดไฟล์ได้เท่านั้น
✔ Read/Write → อัปโหลดและดาวน์โหลดไฟล์ได้
✔ Read/Write/Delete → อัปโหลด, ดาวน์โหลด และลบไฟล์ได้
✔ กำหนดสิทธิ์แยกตามโฟลเดอร์
การกำหนดสิทธิ์ที่เหมาะสมจะช่วยเพิ่มความปลอดภัยให้กับระบบของคุณ และลดความเสี่ยงที่ข้อมูลจะถูกเข้าถึงโดยไม่ได้รับอนุญาต
หวังว่าตัวอย่างเหล่านี้จะช่วยให้คุณสามารถกำหนด IAM Policy ได้ง่ายขึ้นนะครับ 😊🚀
สรุปโดยรวม
ในบทความนี้ เราได้เรียนรู้เกี่ยวกับ การสร้าง IAM Policy บน AWS โดยใช้ Visual Policy Editor ซึ่งเป็นเครื่องมืออย่างเป็นทางการของ AWS ที่ช่วยให้เราสร้าง Policy ได้ง่ายขึ้น
โจทย์ของเรา คือการสร้าง IAM Policy ที่สามารถใช้ Access Key เพื่อให้ Application สามารถ อัปโหลด (PUT), ดาวน์โหลด (GET), ลบ (DELETE) และดูรายการไฟล์ (LIST) ภายใน Amazon S3 Bucket ได้
เราได้ทำตามขั้นตอนดังนี้:
✅ เข้าไปที่ IAM Console และเลือก Create Policy
✅ ใช้ Visual Policy Editor เพื่อเลือก S3 Service และกำหนด Permissions
✅ กำหนด Resources โดยระบุ Bucket และ Object ที่ต้องการให้สิทธิ์
✅ ตรวจสอบ Policy และกด Create Policy
สิ่งสำคัญที่ควรจำ:
🔹 ควรให้ สิทธิ์เท่าที่จำเป็น (Least Privilege Principle) เพื่อลดความเสี่ยงด้านความปลอดภัย
🔹 สามารถตรวจสอบและแก้ไข Policy ได้ผ่านหน้า IAM Console
🔹 หากไม่แน่ใจว่าสิทธิ์ที่กำหนดเหมาะสมหรือไม่ ควรศึกษาเพิ่มเติมจาก AWS Documentation
หวังว่าบทความนี้จะช่วยให้คุณเข้าใจและสามารถสร้าง IAM Policy ได้ง่ายขึ้น 🚀
หากต้องการศึกษาเพิ่มเติม สามารถดูบทความที่เกี่ยวข้องด้านล่างได้เลย! 😊
บทความที่เกี่ยวข้อง