Amazon S3
วัตถุประสงค์
ตั้งค่าการทำความสะอาดไฟล์แบบอัตโนมัติในบัคเก็ต Amazon S3 โดยใช้ Glasswall Halo API ผ่านฟังก์ชันการแจ้งเตือนเหตุการณ์และฟังก์ชัน lambda
คู่มือการผสานรวม Amazon S3
- ข้อกำหนดเบื้องต้น
- ขั้นตอนที่ 1 - สร้างบัคเก็ต S3
- ขั้นตอนที่ 2 - สร้างคิว SQS
- ขั้นตอนที่ 3 - เปิดการแจ้งเตือนเหตุการณ์
- ขั้นตอนที่ 4 - สร้างฟังก์ชัน Lambda
- ขั้นตอนที่ 5 - กำหนดค่าบทบาทการดำเนินการ
- ขั้นตอนที่ 6 - อัปโหลดโค้ด Lambda
- ขั้นตอนที่ 7 - เพิ่มทริกเกอร์
- ขั้นตอนที่ 8 - ทดสอบ
ข้อกำหนดเบื้องต้น
-
บัญชี AWS และบทบาท IAM (Identity and Access Management) ที่มี policy สิทธิ์ดังต่อไปนี้:
- Amazons3fullaccess: สำหรับสร้างและกำหนดค่า S3 buckets
- Amazonsqsfullaccess: สำหรับสร้างและกำหนดค่า SQS queue ที่ใช้ในการทริกเกอร์
- Awslambda_fullaccess: สำหรับสร้างและกำหนดค่า lambda function ที่ดำเนินการเรียกไปยัง Glasswall Halo
- (ไม่บังคับ) iamfullaccess: จำเป็นสำหรับการสร้างและกำหนดค่า execution role เริ่มต้นสำหรับฟังก์ชันใหม่ หากไม่สามารถกำหนด role นี้ได้ ให้ทำตามขั้นตอนที่เกี่ยวข้องในคู่มือนี้เพื่อขอให้สร้าง role แล้วจึงใช้ role ที่สร้างไว้ล่วงหน้านี้
-
การเข้าถึง API แบบ synchronous ของ Glasswall Halo ที่ผ่านการยืนยันตัวตนแล้ว
ขั้นตอนที่ 1 - สร้าง S3 bucket
ก่อนอื่น คุณต้องสร้าง S3 bucket ที่จะเพิ่มไฟล์ต้นทางเข้าไป และ bucket นี้จะเป็นแหล่งที่มาของเหตุการณ์ที่ใช้ทริกเกอร์เวิร์กโฟลว์
-
เข้าสู่ระบบที่AWS management console
-
ไปที่ Amazon S3 console โดยพิมพ์ “S3” ในแถบค้นหา หรือเลือก S3 ภายใต้เมนู Services > Storage

-
ในแผงนำทางด้านซ้าย ให้เลือก Buckets
-
คลิก Create bucket หน้า Create bucket จะเปิดขึ้น

- สำหรับชื่อ bucket ให้ป้อนชื่อสำหรับ bucket ของคุณ โดยชื่อ bucket ต้อง:
- ไม่ซ้ำกันภายใน partition หนึ่ง partition คือการจัดกลุ่มของ region; ปัจจุบัน AWS มีสาม partition ได้แก่
aws(Standard regions),aws-cn(China regions), และaws-us-gov(AWS govcloud (us) regions) - มีความยาวระหว่าง 3 ถึง 63 อักขระ
- ประกอบด้วยตัวอักษรพิมพ์เล็ก ตัวเลข จุด (.) และขีดกลาง (-) เท่านั้น เพื่อความเข้ากันได้สูงสุด เราแนะนำให้หลีกเลี่ยงการใช้จุด (.) ในชื่อ bucket ยกเว้น bucket ที่ใช้สำหรับการโฮสต์เว็บไซต์แบบคงที่เท่านั้น
- ขึ้นต้นและลงท้ายด้วยตัวอักษรหรือตัวเลข
ชื่อ bucket ต้องไม่ซ้ำกันทั่วโลก โดยการตรวจสอบความถูกต้องใน AWS console จะแจ้งให้คุณทราบหากชื่อ bucket ที่ป้อนถูกใช้งานอยู่แล้ว
หมายเหตุ: หลังจากที่คุณสร้าง bucket แล้ว คุณจะไม่สามารถเปลี่ยนชื่อได้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งชื่อ bucket โปรดดู กฎการตั้งชื่อ bucket.
- สำหรับ Region ให้เลือก AWS region ที่คุณต้องการให้ bucket อยู่
หมายเหตุ: เพื่อลดเวลาแฝงและค่าใช้จ่าย รวมถึงรองรับข้อกำหนดด้านกฎระเบียบ ให้เลือก region ที่อยู่ใกล้คุณ วัตถุที่จัดเก็บใน region จะไม่ออกจาก region นั้น เว้นแต่คุณจะโอนไปยัง region อื่นอย่างชัดเจน สำหรับรายการ Amazon S3 AWS regions โปรดดู AWS service endpoints ในเอกสารอ้างอิงทั่วไปของ amazon web services
หากคุณต้องการการตั้งค่าเพิ่มเติมสำหรับ bucket ของคุณ เช่น การควบคุมการเข้าถึง การบันทึก log การกำหนดเวอร์ชัน หรือการเข้ารหัส คุณสามารถกำหนดค่าเหล่านี้ได้ตามต้องการ
นอกจากนี้ ในส่วนการตั้งค่าสิทธิ์ คุณสามารถกำหนดได้ว่าใครจะมีสิทธิ์เข้าถึง bucket และวัตถุภายใน โดยเลือกจากตัวเลือกต่างๆ เช่น bucket policies, access control lists (ACLs) หรือ block all public access โปรดตรวจสอบและตั้งค่าการกำหนดค่าเหล่านี้ให้ตรงตามความต้องการของคุณก่อนดำเนินการต่อ
สำหรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับการสร้างและกำหนดค่า S3 buckets โปรดดูที่ คู่มือผู้ใช้ AWS S3.
ขั้นตอนที่ 2 - สร้างคิว SQS
หลังจากสร้าง S3 bucket แล้ว จะต้องสร้างคิว Amazon SQS (Simple Queue Service) ด้วย นี่คือจุดที่การแจ้งเตือนเหตุการณ์จาก source S3 bucket ของคุณจะถูกส่งมา และถูกดึงไปโดยฟังก์ชัน Lambda
-
ไปที่ Amazon SQS console โดยค้นหา “SQS” ในแถบค้นหา หรือเลือก Simple Queue Service ภายใต้เมนู Services > Application integration
-
คลิก Create queue.

- เลือกระหว่างคิว SQS สองประเภท: Standard หรือ FIFO.
Standard queues ให้ปริมาณงานสูงและการจัดลำดับแบบ best-effort ขณะที่ FIFO queues รับประกันการประมวลผลแบบ “exactly once” และการจัดลำดับอย่างเคร่งครัดตาม message group ID โดยค่าเริ่มต้นจะตั้งเป็นประเภท standard queue
หมายเหตุ: คุณไม่สามารถเปลี่ยนประเภทของคิวได้หลังจากสร้างแล้ว
- ป้อนNameที่ไม่ซ้ำกันสำหรับคิวของคุณ; เช่น s3cdrevents.
ชื่อของคิว FIFO ต้องลงท้ายด้วยส่วนต่อท้าย .fifo ส่วนต่อท้ายนี้จะนับรวมในโควตาชื่อคิว 80 อักขระ หากต้องการตรวจสอบว่าคิวเป็น fifo หรือไม่ คุณสามารถตรวจสอบได้ว่าชื่อคิวลงท้ายด้วยส่วนต่อท้ายนี้หรือไม่
-
คอนโซลจะตั้งค่าเริ่มต้นสำหรับconfiguration parametersของคิว หากคุณคุ้นเคยกับ SQS คุณสามารถตั้งค่าใหม่สำหรับพารามิเตอร์ได้ภายใต้Configuration สำหรับกรณีการใช้งานนี้ เราจะคงค่าดีฟอลต์ส่วนใหญ่ไว้
-
เลื่อนไปที่ส่วนAccess policy
-
เลือกตัวเลือกAdvancedเพื่อแก้ไข policy JSON ผ่านตัวแก้ไขขั้นสูง เพื่ออนุญาตให้บริการ S3 เผยแพร่ข้อความไปยังคิว
-
เพิ่มเครื่องหมายจุลภาคหลังองค์ประกอบ “__owner_statement” แล้ววาง JSON snippet ต่อไปนี้:
{
"Sid": "AllowS3ToPublish",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sqs:SendMessage",
"Resource": "<ARN-OF-QUEUE>"
}
หมายเหตุ: ตรวจสอบให้แน่ใจว่าคุณแทนที่ arn-of-queue ใน snippet ด้วย ARN (Amazon Resource Name) ของคิว; ซึ่งจะเหมือนกับ resource ARN ของ owner statement ใน JSON ที่มีอยู่

- ตรวจสอบค่าการกำหนดค่าที่คุณป้อน แล้วคลิกCreate queue
จด ARN ของคิวไว้เพื่อใช้ในภายหลัง
สำหรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับการสร้างและกำหนดค่า Amazon SQS โปรดดูAWS S3 user guide
ขั้นตอนที่ 3 - เปิดการแจ้งเตือนเหตุการณ์
ขั้นตอนถัดไปคือเปิดการแจ้งเตือนเหตุการณ์ เพื่อให้คิว SQS ของคุณได้รับการแจ้งเตือนทุกครั้งที่มีการวางไฟล์ไว้ในบัคเก็ต S3 ต้นทาง
-
ไปที่คอนโซล Amazon S3 และจากรายการBuckets ให้เลือกบัคเก็ตที่คุณสร้างไว้ก่อนหน้านี้
-
จากหน้าBucket overview ให้เลือกแท็บProperties
-
เลื่อนลงไปที่ส่วนEvent notifications แล้วคลิกCreate event notification
-
ในส่วน General configuration ให้ระบุ Event name ที่สื่อความหมายสำหรับการแจ้งเตือนเหตุการณ์ของคุณ โดยคุณสามารถระบุ Prefix และ Suffix เพิ่มเติมได้ เพื่อจำกัดการแจ้งเตือนให้เฉพาะกับอ็อบเจ็กต์ที่มีคีย์ลงท้ายด้วยอักขระที่ระบุ
-
ในส่วน Event types คุณสามารถเลือกประเภทเหตุการณ์อย่างน้อยหนึ่งประเภทที่ต้องการรับการแจ้งเตือน ในตัวอย่างนี้ เราจะเน้นที่เหตุการณ์ Object creation เพื่อให้อ็อบเจ็กต์ใหม่หรืออ็อบเจ็กต์ที่ถูกคัดลอกก่อให้เกิดการแจ้งเตือน ซึ่งส่งผลให้มีการดำเนินการ CDR กับอ็อบเจ็กต์นั้น
เลือกช่องทำเครื่องหมาย All object create events

- สุดท้าย ในส่วน Destination ให้เลือกปลายทางของการแจ้งเตือนเหตุการณ์ ซึ่งในกรณีนี้คือคิว SQS ที่เราได้สร้างและกำหนดค่าไว้
เลือก SQS queue เป็นปลายทางของคุณ และเลือกคิว SQS ที่เราได้สร้างและกำหนดค่าไว้ก่อนหน้านี้
- เลือก Save changes แล้ว Amazon S3 จะส่งข้อความทดสอบไปยังปลายทางการแจ้งเตือนเหตุการณ์
การแจ้งเตือนเหตุการณ์จะถูกสร้างขึ้น และคุณจะถูกนำกลับไปยังคุณสมบัติของบัคเก็ต S3
สำหรับข้อมูลโดยละเอียดเพิ่มเติมเกี่ยวกับการแจ้งเตือนเหตุการณ์ โปรดดูที่ AWS S3 user guide
ขั้นตอนที่ 4 - สร้างฟังก์ชัน Lambda
เมื่อเปิดใช้งานการแจ้งเตือนเหตุการณ์แล้ว คุณต้องสร้างฟังก์ชัน Lambda ใหม่
-
ไปที่บริการ Lambda โดยค้นหา “Lambda” ในแถบค้นหา หรือเลือก Lambda ภายใต้เมนู Services > Compute
-
ในบานหน้าต่างนำทางด้านซ้าย ให้เลือก Functions
-
คลิก Create function
-
ในหน้า Create function คุณจะเห็นตัวเลือกสามรายการ ให้เลือก Author from scratch
-
ป้อน Function name ที่เหมาะสมสำหรับฟังก์ชัน Lambda ของคุณ เช่น CDR-file

- ถัดไป ให้เลือก Runtime ที่ตรงกับภาษาที่คุณต้องการใช้
หมายเหตุ: คุณสามารถดูโค้ดตัวอย่างได้ผ่าน Glasswall github คุณจะสามารถอัปโหลดโค้ดได้ในขั้นตอนถัดไป
-
(ไม่บังคับ) หากคุณคุ้นเคยกับ Lambda functions คุณสามารถตั้งค่าคอนฟิกเพิ่มเติมได้ผ่านตัวเลือก General configuration ภายใต้แท็บ Configurations
-
คลิก Create function คุณจะเข้าสู่หน้า Function overview

- Assigning the execution role can be done in two ways:
- การขอและกำหนด role ใหม่โดยใช้ iamfullaccess
- Assigning an already existing role
- สามารถทำได้ผ่านบริการ Lambda: Function overview > Configuration > Permissions > Edit.
[ไม่บังคับ] iamfullaccess
หากคุณไม่สามารถได้รับสิทธิ์ iamfullaccess โปรดขอให้สร้าง role ที่มีสิทธิ์ดังต่อไปนี้:
Logs :createlogstream
Logs :putlogevents
ส่ง JSON ที่กรอกเสร็จแล้วจากขั้นตอน Configure execution role ให้กับผู้ใช้ที่มีสิทธิ์ของคุณเพื่อสร้าง role
สามารถเลือก role ใหม่นี้ได้จากส่วนติดต่อผู้ใช้สำหรับการสร้าง Lambda แทนการอนุญาตให้สร้าง default role ใหม่
- เลื่อนไปที่ส่วน Change default execution role
- เลือก Use an existing role และเลือก role ที่สร้างไว้ล่วงหน้า
ขณะนี้สามารถข้ามขั้นตอนถัดไปของการตั้งค่า execution role ได้ และไปต่อที่ Step 6 - Upload lambda code
ขั้นตอนที่ 5 - ตั้งค่า execution role
เพื่ออนุญาตให้ Lambda function เข้าถึงบริการ AWS (S3, SQS) คุณต้องกำหนดสิทธิ์เพิ่มเติมให้กับ execution role ของ Lambda
-
ในคอนโซล AWS Lambda ให้เลือก Functions ในแถบนำทางด้านซ้าย
-
ในหน้ารายละเอียดของ Lambda function ของคุณ ให้เลือกแท็บ Configuration แล้วคลิก Permissions ในแถบนำทางด้านซ้าย
-
ภายใต้ Execution role ให้เลือกลิงก์ของชื่อ role คอนโซล IAM จะเปิดขึ้น
-
ในหน้่า Summary ของคอนโซล IAM สำหรับ execution role ของ Lambda function ของคุณ ให้เลือกแท็บ Permissions
-
จากเมนู Add permissions ให้เลือก Create inline policy
-
สลับไปที่ตัวแก้ไข JSON
-
ใน snippet ด้านล่าง ให้แทนที่ส่วนด้านล่าง (resource) ด้วย ARN ของ SQS queue ที่คุณสร้างไว้และจดบันทึกจากขั้นตอนก่อนหน้า:
Arn:AWS:sqs:{region}:{account}:{queuename}"
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "UseCaseStatement0",
"Effect": "Allow",
"Action": [
"sqs:DeleteMessage",
"sqs:GetQueueUrl",
"sqs:ReceiveMessage",
"sqs:GetQueueAttributes",
"sqs:ListQueueTags"
],
"Resource": [
"arn:aws:sqs:{Region}:{Account}:{QueueName}"
]
},
{
"Sid": "UseCaseStatement1",
"Effect": "Allow",
"Action": [
"sqs:ListDeadLetterSourceQueues",
"sqs:ListMessageMoveTasks",
"sqs:ListQueues",
"s3:GetObject",
"s3:CreateBucket",
"s3:PutObject"
],
"Resource": "*"
}
]
}
-
วาง snippet ลงในตัวแก้ไข JSON พร้อมทรัพยากรที่อัปเดตแล้ว
-
คลิก Next
-
ตั้งค่า Name ให้กับ policy; เช่น usecasepolicy
-
คลิก Create policy
ขณะนี้ Lambda function ของคุณมีสิทธิ์ในการโต้ตอบกับบริการที่คุณต้องการแล้ว
ขั้นตอนที่ 6 - อัปโหลดโค้ด Lambda
เมื่อมีการอัปโหลดไฟล์ไปยัง source S3 bucket คุณจำเป็นต้องมีโค้ดบางส่วนทำงานเพื่อประมวลผลไฟล์เหล่านั้นเมื่อ Lambda ถูกเรียกใช้
ขึ้นอยู่กับ framework ของคุณ มีหลายวิธีในการทำให้ Lambda function รันโค้ดที่ต้องการ แต่คู่มือนี้จะเน้นที่ความสามารถในการอัปโหลด zip
Lambda function จะมีตรรกะดังต่อไปนี้ไม่ว่าจะใช้ framework ใดก็ตาม:
- ดึงไฟล์: ตีความข้อความ SQS เพื่อดึงไฟล์จาก source bucket
- ไฟล์ CDR: ส่งคำขอที่ผ่านการยืนยันตัวตนไปยัง Glasswall Halo Rest API
- จัดการการตอบกลับ: จัดการการตอบกลับทั้งที่สำเร็จและไม่สำเร็จ
หากคุณต้องการข้อมูลเพิ่มเติมเพื่อเริ่มต้นใช้งาน คุณสามารถดู sample codebase ฉบับสมบูรณ์ที่มีการนำตรรกะนี้ไปใช้ได้ที่ Glasswall engineering github repository นี้มี sample code พร้อมคำแนะนำเกี่ยวกับการอัปโหลดไปยัง Lambda ที่สร้างไว้ที่นี่ นอกจากนี้ ยังมีไฟล์ zip ที่สร้างไว้ล่วงหน้าซึ่งคุณสามารถใช้กับ Lambda function ได้ โปรดดูคำแนะนำภายในไฟล์ .md
ขั้นตอนที่ 7 - เพิ่ม trigger
ในขั้นตอนนี้ คุณจะกำหนดค่า Lambda function ให้ถูกเรียกใช้เมื่อมีการเผยแพร่ข้อความ SQS ไปยังคิว โดยการเพิ่ม trigger
-
ในแผงภาพรวม Function ของหน้าคอนโซล function ของคุณ ให้เลือก Add trigger
-
จากรายการ trigger ที่พร้อมใช้งาน ให้เลือก SQS
-
เลือกคิว SQS ที่คุณสร้างไว้ก่อนหน้านี้ แล้วคลิก Add

ขณะนี้กระบวนการเสร็จสมบูรณ์และพร้อมสำหรับการทดสอบแล้ว
ขั้นตอนที่ 8 - ทดสอบ
เมื่อทุกอย่างพร้อมแล้ว ให้อัปโหลดไฟล์ไปยัง source S3 bucket และภายในไม่กี่วินาที ไฟล์ที่มีชื่อเดียวกันจะปรากฏใน clean S3 bucket


ไฟล์นี้เป็นสำเนาที่สะอาดของไฟล์ต้นฉบับซึ่งมีลักษณะเหมือนกันทุกประการ โดยไม่มีเนื้อหาที่มีความเสี่ยงหรือข้อบกพร่องด้านโครงสร้างใด ๆ ซึ่งอาจรวมถึง malware
ยืนยันผ่าน Glasswall Halo Portal
-
ประมวลผลไฟล์ต้นฉบับโดยใช้แอปพลิเคชัน Clean a file ของ Glasswall
- ไฟล์ของคุณจะได้รับการกำหนดระดับความเสี่ยง พร้อมทั้งแสดงรายการเนื้อหาที่มีความเสี่ยงหรือข้อบกพร่องของโครงสร้างที่พบ
-
ประมวลผลไฟล์ที่ทำความสะอาดแล้วจาก clean S3 bucket ในแอปพลิเคชัน Clean a file
- ควรส่งคืนไฟล์เป็นไฟล์สะอาดโดยไม่มีเนื้อหาที่มีความเสี่ยงหรือข้อบกพร่องของโครงสร้าง