Chuyển đến nội dung chính

Amazon S3

Mục tiêu

Thiết lập quy trình làm sạch tệp tự động trong các bucket Amazon S3 bằng cách sử dụng Glasswall Halo API thông qua chức năng thông báo sự kiện và các hàm lambda.

Hướng dẫn tích hợp Amazon S3


Điều kiện tiên quyết

  • Tài khoản AWS và vai trò IAM (Identity and Access Management) với các policy quyền sau:

    • Amazons3fullaccess: để tạo và cấu hình các bucket S3.
    • Amazonsqsfullaccess: để tạo và cấu hình hàng đợi SQS được dùng để kích hoạt.
    • Awslambda_fullaccess: để tạo và cấu hình hàm lambda thực thi một lệnh gọi tới Glasswall Halo.
    • (Tùy chọn) iamfullaccess: cần thiết để tạo và cấu hình vai trò thực thi mặc định cho hàm mới. Nếu không thể gán vai trò này, hãy làm theo các bước liên quan trong hướng dẫn này để yêu cầu tạo một vai trò rồi sử dụng vai trò đã được tạo sẵn này.
  • Quyền truy cập đã xác thực vào API đồng bộ của Glasswall Halo.


Bước 1 - Tạo một bucket S3

Trước tiên, bạn cần tạo một bucket S3 nơi các tệp nguồn được thêm vào, và đây sẽ là nguồn của các sự kiện kích hoạt quy trình làm việc.

  1. Đăng nhập vào bảng điều khiển quản lý AWS.

  2. Đi tới bảng điều khiển Amazon S3 bằng cách nhập “S3” vào thanh tìm kiếm hoặc chọn S3 trong menu Services > Storage.

Awss3 - step 1a

  1. Trong ngăn điều hướng bên trái, chọn Buckets.

  2. Nhấp vào Create bucket. Trang Create bucket sẽ mở ra.

Awss3 - step 1b

  1. Đối với tên bucket, hãy nhập tên cho bucket của bạn. Tên bucket phải:
  • Là duy nhất trong một partition. Partition là một nhóm các vùng; hiện tại AWS có ba partition:aws(Vùng tiêu chuẩn),aws-cn(Vùng Trung Quốc), vàaws-us-gov(Các vùng AWS govcloud (us)).
  • Có độ dài từ 3 đến 63 ký tự.
  • Chỉ bao gồm chữ cái viết thường, chữ số, dấu chấm (.) và dấu gạch nối (-). Để có khả năng tương thích tốt nhất, chúng tôi khuyến nghị bạn tránh sử dụng dấu chấm (.) trong tên bucket, ngoại trừ các bucket chỉ được dùng để lưu trữ website tĩnh.
  • Bắt đầu và kết thúc bằng một chữ cái hoặc chữ số.

Tên bucket là duy nhất trên toàn cầu, tính năng xác thực của bảng điều khiển AWS sẽ thông báo cho bạn nếu tên bucket đã nhập đang được sử dụng.

Lưu ý: sau khi bạn tạo bucket, bạn không thể thay đổi tên của bucket. Để biết thêm thông tin về cách đặt tên bucket, xem quy tắc đặt tên bucket.

  1. Đối với Region, hãy chọn vùng AWS nơi bạn muốn bucket được lưu trữ.

Lưu ý: để giảm thiểu độ trễ và chi phí cũng như đáp ứng các yêu cầu pháp lý, hãy chọn một vùng gần bạn. Các đối tượng được lưu trữ trong một vùng sẽ không bao giờ rời khỏi vùng đó trừ khi bạn chủ động chuyển chúng sang vùng khác. Để xem danh sách các vùng Amazon S3 AWS, hãy xem điểm cuối dịch vụ AWS trong tài liệu tham khảo chung của amazon web services.

Nếu bạn cần bất kỳ cài đặt bổ sung nào cho bucket của mình, chẳng hạn như kiểm soát truy cập, ghi nhật ký, tạo phiên bản hoặc mã hóa, bạn có thể cấu hình chúng tương ứng.

Ngoài ra, trong phần thiết lập quyền, bạn có thể xác định ai có quyền truy cập vào bucket và các đối tượng của bucket bằng cách chọn từ các tùy chọn như bucket policies, danh sách kiểm soát truy cập (ACL) hoặc chặn toàn bộ quyền truy cập công khai. Hãy đảm bảo bạn xem xét và thiết lập các cấu hình này theo yêu cầu của mình trước khi tiếp tục.

Để biết thông tin chi tiết hơn về cách tạo và cấu hình S3 buckets, vui lòng tham khảo hướng dẫn sử dụng AWS S3.


Bước 2 - Tạo hàng đợi SQS

Sau khi S3 bucket được tạo, cần tạo hàng đợi Amazon SQS (Simple Queue Service). Đây là nơi các thông báo sự kiện từ source S3 bucket của bạn sẽ được gửi đến và được Lambda function tiếp nhận.

  1. Đi tới bảng điều khiển Amazon SQS bằng cách tìm kiếm “SQS” trong thanh tìm kiếm hoặc bằng cách chọn Simple Queue Service trong menu Services > Application integration.

  2. Nhấp vào Create queue.

Awss3 - step 2a

  1. Chọn giữa hai loại hàng đợi SQS: Standard hoặc FIFO.

Hàng đợi Standard cung cấp thông lượng cao và thứ tự theo nỗ lực tối đa, trong khi hàng đợi FIFO đảm bảo xử lý “chính xác một lần” và thứ tự nghiêm ngặt dựa trên ID nhóm thông điệp. Loại hàng đợi standard được đặt mặc định.

Lưu ý: bạn không thể thay đổi loại hàng đợi sau khi nó đã được tạo.

  1. Nhập Name duy nhất cho hàng đợi của bạn; ví dụ: s3cdrevents.

Tên của hàng đợi FIFO phải kết thúc bằng hậu tố .fifo. Hậu tố này được tính vào giới hạn 80 ký tự của tên hàng đợi. Để xác định một hàng đợi có phải là fifo hay không, bạn có thể kiểm tra xem tên hàng đợi có kết thúc bằng hậu tố đó hay không.

  1. Bảng điều khiển đặt các giá trị mặc định cho các tham số cấu hình của hàng đợi. Nếu bạn đã quen với SQS, trong phần Configuration bạn có thể đặt các giá trị mới cho các tham số. Với mục đích của trường hợp sử dụng này, chúng ta sẽ giữ hầu hết các giá trị này ở mặc định.

  2. Cuộn xuống phần Access policy.

  3. Chọn tùy chọn Advanced để chỉnh sửa policy JSON thông qua trình chỉnh sửa nâng cao nhằm cho phép dịch vụ S3 xuất bản thông điệp vào hàng đợi.

  4. Thêm dấu phẩy sau phần tử “__owner_statement” và dán đoạn JSON sau:

{ 
"Sid": "AllowS3ToPublish",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sqs:SendMessage",
"Resource": "<ARN-OF-QUEUE>"
}

Lưu ý: hãy đảm bảo rằng bạn thay thế arn-of-queue trong đoạn mã bằng ARN (Amazon Resource Name) của hàng đợi; giá trị này sẽ giống với ARN tài nguyên của owner statement trong JSON hiện có.

Awss3 - step 2b

  1. Xem lại các giá trị cấu hình bạn đã nhập và nhấp vào Create queue.

Ghi lại ARN của hàng đợi để sử dụng sau.

Để biết thông tin chi tiết hơn về cách tạo và cấu hình Amazon SQS, vui lòng tham khảo hướng dẫn sử dụng AWS S3.


Bước 3 - Bật thông báo sự kiện

Bước tiếp theo là bật thông báo sự kiện, để hàng đợi SQS của bạn nhận được thông báo mỗi khi một tệp được đưa vào bucket S3 nguồn.

  1. Đi tới bảng điều khiển Amazon S3 và từ danh sách Buckets, chọn bucket bạn đã tạo trước đó.

  2. Từ trang Bucket overview, chọn tab Properties.

  3. Cuộn xuống phần Event notifications và nhấp vào Create event notification.

  4. Trong phần General configuration, hãy chỉ định một Event name mang tính mô tả cho thông báo sự kiện của bạn. Ngoài ra, bạn cũng có thể chỉ định PrefixSuffix để giới hạn thông báo cho các đối tượng có khóa kết thúc bằng các ký tự được chỉ định.

  5. Trong phần Event types, bạn có thể chọn một hoặc nhiều loại sự kiện mà bạn muốn nhận thông báo. Trong ví dụ này, chúng tôi tập trung vào các sự kiện Object creation để các đối tượng mới hoặc được sao chép tạo ra thông báo, từ đó CDR được thực thi trên đối tượng.

Chọn hộp kiểm All object create events.

Awss3 - step 3a

  1. Cuối cùng, trong phần Destination, hãy chọn đích thông báo sự kiện – trong trường hợp này là hàng đợi SQS mà chúng ta đã tạo và cấu hình.

Chọn SQS queue làm đích của bạn và chọn hàng đợi SQS mà chúng ta đã tạo và cấu hình trước đó.

  1. Chọn Save changes, và Amazon S3 sẽ gửi một thông điệp kiểm tra đến đích thông báo sự kiện.

Thông báo sự kiện được tạo và bạn sẽ được đưa trở lại phần thuộc tính của bucket S3.

Để biết thông tin chi tiết hơn về thông báo sự kiện, vui lòng tham khảo hướng dẫn sử dụng AWS S3.


Bước 4 - Tạo một hàm Lambda

Sau khi thông báo sự kiện đã được bật, bạn cần tạo một hàm Lambda mới.

  1. Đi tới dịch vụ Lambda bằng cách tìm kiếm “Lambda” trong thanh tìm kiếm hoặc bằng cách chọn Lambda trong menu Services > Compute.

  2. Trong ngăn điều hướng bên trái, chọn Functions.

  3. Nhấp vào Create function.

  4. Tại trang Create function, bạn sẽ thấy ba tùy chọn; hãy chọn Author from scratch.

  5. Nhập Function name phù hợp cho hàm Lambda của bạn; ví dụ: CDR-file.

Awss3 - step 4a

  1. Tiếp theo, chọn Runtime phù hợp với ngôn ngữ bạn dự định sử dụng.

Lưu ý: bạn có thể tìm mã mẫu qua Glasswall github. Bạn sẽ có thể tải mã lên ở bước sau.

  1. (Tùy chọn) Nếu bạn quen thuộc với các hàm Lambda, bạn có thể thiết lập thêm cấu hình thông qua tùy chọn General configuration trong tab Configurations.

  2. Nhấp vào Create function. Bạn sẽ đến trang Function overview.

Awss3 - step 4b

  1. Assigning the execution role can be done in two ways:
    • Yêu cầu và gán một role mới bằng iamfullaccess
    • Assigning an already existing role
      • Việc này có thể được thực hiện qua dịch vụ Lambda: Function overview > Configuration > Permissions > Edit.

[Tùy chọn] iamfullaccess

Nếu bạn không thể được cấp quyền iamfullaccess, vui lòng yêu cầu tạo một role với các quyền sau:

Logs :createlogstream

Logs :putlogevents

Cung cấp JSON đã hoàn tất từ bước Configure execution role cho những người dùng có đặc quyền của bạn để tạo một role.

Role mới này có thể được chọn từ giao diện người dùng tạo Lambda thay cho việc cho phép tạo một role mặc định mới.

  • Cuộn đến phần Change default execution role.
  • Chọn Use an existing role và chọn role đã được tạo trước đó.

Bước tiếp theo là cấu hình execution role giờ đây có thể được bỏ qua và bạn có thể tiếp tục đến Step 6 - Upload lambda code.


Bước 5 - Cấu hình execution role

Để cho phép hàm Lambda truy cập các dịch vụ AWS (S3, SQS), bạn cần gán thêm quyền cho execution role của Lambda.

  1. Trong bảng điều khiển AWS Lambda, chọn Functions trong ngăn điều hướng bên trái.

  2. Trên trang chi tiết của hàm Lambda, chọn thẻ Configuration, sau đó nhấp vào Permissions trong ngăn điều hướng bên trái.

  3. Trong mục Execution role, chọn liên kết của tên role. Bảng điều khiển IAM sẽ mở ra.

  4. Trên trang Summary của bảng điều khiển IAM cho execution role của hàm Lambda, chọn thẻ Permissions.

  5. Từ menu Add permissions, chọn Create inline policy.

  6. Chuyển sang trình chỉnh sửa JSON.

  7. Trong đoạn mã bên dưới, hãy thay thế phần bên dưới (resource) bằng ARN của hàng đợi SQS mà bạn đã tạo và ghi lại ở bước trước:

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": "*"
}
]
}
  1. Dán đoạn mã vào trình chỉnh sửa JSON với các resource đã được cập nhật.

  2. Nhấp vào Next.

  3. Đặt Name cho policy; ví dụ: usecasepolicy.

  4. Nhấp vào Create policy.

Hàm Lambda của bạn hiện đã có quyền để tương tác với các dịch vụ mà bạn yêu cầu.


Bước 6 - Tải mã Lambda lên

Khi các tệp được tải lên source S3 bucket, bạn cần một số đoạn mã được chạy để xử lý chúng khi Lambda được gọi.

Tùy thuộc vào framework của bạn, có nhiều cách để chạy Lambda function với đoạn mã dự kiến, nhưng hướng dẫn này tập trung vào chức năng tải lên file zip.

Lambda function sẽ có logic sau đây bất kể framework nào:

  • Truy xuất file: diễn giải thông điệp SQS để truy xuất file từ source bucket.
  • CDR file: thực hiện một yêu cầu đã xác thực tới Glasswall Halo Rest API.
  • Xử lý phản hồi: xử lý cả các phản hồi thành công và không thành công.

Nếu bạn cần thêm thông tin để bắt đầu, bạn có thể tìm thấy các codebase mẫu hoàn chỉnh đã triển khai logic này tại Glasswall engineering github. repository này cung cấp mã mẫu kèm hướng dẫn tải lên Lambda được tạo tại đây. Ngoài ra, còn có các file zip dựng sẵn mà bạn có thể dùng cho Lambda function. Vui lòng tham khảo hướng dẫn trong các file .md.


Bước 7 - Thêm trigger

Trong bước này, bạn cấu hình Lambda function để được gọi khi các thông điệp SQS được gửi tới queue bằng cách thêm một trigger.

  1. Trong ngăn tổng quan Function trên trang console của function, chọn Add trigger.

  2. Từ danh sách các trigger khả dụng, chọn SQS.

  3. Chọn SQS queue mà bạn đã tạo trước đó và nhấp vào Add.

Awss3 - step 7a

Quy trình hiện đã hoàn tất và sẵn sàng để kiểm thử.


Bước 8 - Kiểm thử

Bây giờ mọi thứ đã sẵn sàng, hãy tải một file lên source S3 bucket và trong vòng vài giây, một file có cùng tên sẽ xuất hiện trong clean S3 bucket.

Awss3 - step 8a

Awss3 - step 8b

File này là một bản sao sạch giống hệt về mặt hiển thị của file gốc, không chứa bất kỳ nội dung rủi ro hoặc lỗi cấu trúc nào có thể bao gồm malware.

Xác nhận qua Glasswall Halo Portal

  • Xử lý tệp gốc bằng ứng dụng Clean a file của Glasswall.

    • Tệp của bạn sẽ được gán một mức độ rủi ro cùng với mọi mục nội dung rủi ro hoặc lỗi cấu trúc được liệt kê.
  • Xử lý tệp đã được làm sạch từ clean S3 bucket trong ứng dụng Clean a file.

    • Tệp sẽ được trả về ở trạng thái sạch, không có nội dung rủi ro hoặc lỗi cấu trúc.