Lumaktaw sa pangunahing nilalaman

Amazon S3

Layunin

Mag-set up ng awtomatikong file sanitization sa mga Amazon S3 bucket gamit ang Glasswall Halo API sa pamamagitan ng event notification functionality at lambda functions.

Gabay sa Integrasyon ng Amazon S3


Mga Kinakailangan

  • AWS account at IAM (Identity and Access Management) role na may mga sumusunod na permission policy:

    • Amazons3fullaccess: para gumawa at mag-configure ng mga S3 bucket.
    • Amazonsqsfullaccess: para gumawa at mag-configure ng SQS queue na ginagamit para mag-trigger.
    • Awslambda_fullaccess: para gumawa at mag-configure ng lambda function na nagsasagawa ng tawag sa Glasswall Halo.
    • (Opsyonal) iamfullaccess: kinakailangan para gumawa at mag-configure ng default execution role para sa bagong function. Kung hindi maitalaga ang role na ito, sundin ang mga kaugnay na hakbang sa gabay na ito upang humiling ng paggawa ng role at pagkatapos ay gamitin ang paunang nagawang role na ito.
  • Authenticated na access sa synchronous API ng Glasswall Halo.


Hakbang 1 - Gumawa ng S3 bucket

Una, kailangan mong gumawa ng S3 bucket kung saan idaragdag ang mga source file, at ito ang magiging pinagmulan ng mga event na magti-trigger sa workflow.

  1. Mag-log in sa AWS management console.

  2. Pumunta sa Amazon S3 console sa pamamagitan ng paglalagay ng “S3” sa search bar o sa pagpili ng S3 sa ilalim ng menu na Services > Storage.

Awss3 - step 1a

  1. Sa kaliwang navigation pane, piliin ang Buckets.

  2. I-click ang Create bucket. Bubukas ang pahinang Create bucket.

Awss3 - step 1b

  1. Para sa bucket name, maglagay ng pangalan para sa iyong bucket. Ang bucket name ay dapat:
  • Maging natatangi sa loob ng isang partition. Ang partition ay isang pagpapangkat ng mga region; kasalukuyang may tatlong partition ang AWS:aws(Standard regions),aws-cn(China regions), ataws-us-gov(AWS govcloud (us) regions).
  • May haba na nasa pagitan ng 3 at 63 character.
  • Binubuo lamang ng maliliit na titik, numero, tuldok (.), at gitling (-). Para sa pinakamahusay na compatibility, inirerekomenda namin na iwasan mong gumamit ng mga tuldok (.) sa mga bucket name, maliban sa mga bucket na ginagamit lamang para sa static website hosting.
  • Magsimula at magtapos sa isang titik o numero.

Ang mga bucket name ay globally unique; ipapaalam sa iyo ng validation ng AWS console kung ang inilagay na bucket name ay ginagamit na.

Tandaan: pagkatapos mong gawin ang bucket, hindi mo na mababago ang pangalan nito. Para sa higit pang impormasyon tungkol sa pagpapangalan ng mga bucket, tingnan ang mga panuntunan sa pagpapangalan ng bucket.

  1. Para sa Region, piliin ang AWS region kung saan mo gustong manatili ang bucket.

Tandaan: upang mabawasan ang latency at mga gastos at matugunan ang mga regulatory requirement, pumili ng region na malapit sa iyo. Ang mga object na naka-store sa isang region ay hindi kailanman umaalis sa region na iyon maliban kung tahasan mo silang ililipat sa ibang region. Para sa listahan ng mga Amazon S3 AWS region, tingnan ang AWS service endpoints sa amazon web services general reference.

Kung kailangan mo ng anumang karagdagang setting para sa iyong bucket, tulad ng access control, logging, versioning, o encryption, maaari mo itong i-configure ayon dito.

Bukod pa rito, sa ilalim ng seksyong set permissions, maaari mong tukuyin kung sino ang may access sa bucket at sa mga object nito sa pamamagitan ng pagpili mula sa mga opsyon tulad ng mga bucket policy, access control list (ACL), o block all public access. Tiyaking sinusuri at itinatakda mo ang mga configuration na ito ayon sa iyong mga kinakailangan bago magpatuloy.

Para sa mas detalyadong impormasyon tungkol sa paggawa at pag-configure ng mga S3 bucket, pakitingnan ang AWS S3 user guide.


Hakbang 2 - Gumawa ng SQS queue

Pagkatapos magawa ang S3 bucket, kailangang gawin ang Amazon SQS (Simple Queue Service) queue. Dito ipapadala ang mga event notification mula sa iyong source S3 bucket, at kukunin ng Lambda function.

  1. Pumunta sa Amazon SQS console sa pamamagitan ng paghahanap ng “SQS” sa search bar o sa pagpili ng Simple Queue Service sa ilalim ng menu na Services > Application integration.

  2. I-click ang Create queue.

Awss3 - step 2a

  1. Pumili sa pagitan ng dalawang uri ng SQS queue: Standard o FIFO.

Ang mga Standard queue ay nagbibigay ng mataas na throughput at best-effort ordering, habang ang mga FIFO queue ay ginagarantiyahan ang “exactly once” na pagproseso at mahigpit na pagkakasunod-sunod batay sa message group ID. Ang standard queue type ang nakatakda bilang default.

Tandaan: hindi mo na mababago ang uri ng queue kapag nagawa na ito.

  1. Maglagay ng natatanging Name para sa iyong queue; hal. s3cdrevents.

Ang pangalan ng isang FIFO queue ay dapat magtapos sa hulaping .fifo. Kasama ang hulapi sa 80-character na quota ng pangalan ng queue. Para matukoy kung ang isang queue ay fifo, maaari mong tingnan kung nagtatapos ang pangalan ng queue sa hulapi.

  1. Nagtatakda ang console ng mga default na value para sa mga configuration parameters ng queue. Kung pamilyar ka sa SQS, sa ilalim ng Configuration maaari kang magtakda ng mga bagong value para sa mga parameter. Para sa use case na ito, iiwan natin ang karamihan sa mga ito sa default.

  2. Mag-scroll pababa sa seksyong Access policy.

  3. Piliin ang opsyong Advanced upang i-edit ang policy JSON sa pamamagitan ng advanced editor para payagan ang serbisyo ng S3 na mag-publish ng mga mensahe sa queue.

  4. Magdagdag ng kuwit pagkatapos ng elementong “__owner_statement” at i-paste ang sumusunod na JSON snippet:

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

Tandaan: tiyaking papalitan mo ang arn-of-queue sa snippet ng ARN (Amazon Resource Name) ng queue; ito ay magiging kapareho ng resource ARN ng owner statement sa umiiral na JSON.

Awss3 - step 2b

  1. Suriin ang mga value ng configuration na inilagay mo at i-click ang Create queue.

Itala ang ARN ng queue para magamit mamaya.

Para sa mas detalyadong impormasyon tungkol sa paggawa at pag-configure ng Amazon SQS, mangyaring sumangguni sa AWS S3 user guide.


Hakbang 3 - I-on ang mga event notification

Ang susunod na hakbang ay i-on ang event notification, upang makatanggap ang iyong SQS queue ng notification sa tuwing may file na inilalagay sa source S3 bucket.

  1. Pumunta sa Amazon S3 console at mula sa listahang Buckets, piliin ang bucket na ginawa mo kanina.

  2. Mula sa pahinang Bucket overview, piliin ang tab na Properties.

  3. Mag-scroll pababa sa seksyong Event notifications at i-click ang Create event notification.

  4. Sa seksyong General configuration, tumukoy ng malinaw na Event name para sa iyong event notification. Opsyonal, maaari ka ring tumukoy ng Prefix at Suffix upang limitahan ang mga notification sa mga object na may mga key na nagtatapos sa mga tinukoy na character.

  5. Sa seksyong Event types, maaari kang pumili ng isa o higit pang uri ng event na gusto mong makatanggap ng mga notification. Sa halimbawang ito, nakatuon tayo sa mga event na Object creation upang ang mga bago o kinopyang object ay magresulta sa mga notification na magti-trigger ng CDR sa object.

Piliin ang checkbox na All object create events.

Awss3 - step 3a

  1. Panghuli, sa seksyong Destination, piliin ang destinasyon ng event notification – sa kasong ito, ang SQS queue na ginawa at na-configure natin.

Piliin ang SQS queue bilang iyong destinasyon at piliin ang SQS queue na ginawa at na-configure natin kanina.

  1. Piliin ang Save changes, at magpapadala ang Amazon S3 ng test message sa destinasyon ng event notification.

Nagawa na ang event notification, at ibabalik ka sa mga property ng S3 bucket.

Para sa mas detalyadong impormasyon tungkol sa mga event notification, pakitingnan ang AWS S3 user guide.


Hakbang 4 - Gumawa ng Lambda function

Kapag na-on na ang event notification, kailangan mong gumawa ng bagong Lambda function.

  1. Pumunta sa Lambda service sa pamamagitan ng paghahanap ng “Lambda” sa search bar o sa pagpili ng Lambda sa ilalim ng menu na Services > Compute.

  2. Sa kaliwang navigation pane, piliin ang Functions.

  3. I-click ang Create function.

  4. Sa pahinang Create function, bibigyan ka ng tatlong opsyon; piliin ang Author from scratch.

  5. Maglagay ng angkop na Function name para sa iyong Lambda function; hal. CDR-file.

Awss3 - step 4a

  1. Susunod, pumili ng Runtime na tumutugma sa iyong nilalayong wika.

Tandaan: makakakita ka ng mga sample code sa pamamagitan ng Glasswall github. Magagawa mong mag-upload ng code sa susunod na hakbang.

  1. (Opsyonal) Kung pamilyar ka sa mga Lambda function, maaari kang magtakda ng mga karagdagang configuration sa pamamagitan ng opsyong General configuration sa ilalim ng tab na Configurations.

  2. I-click ang Create function. Darating ka sa pahinang Function overview.

Awss3 - step 4b

  1. Assigning the execution role can be done in two ways:
    • Paghiling at pagtatalaga ng bagong role gamit ang iamfullaccess
    • Assigning an already existing role
      • Magagawa ito sa pamamagitan ng Lambda service: Function overview > Configuration > Permissions > Edit.

[Opsyonal] iamfullaccess

Kung hindi ka mabigyan ng mga pahintulot na iamfullaccess, mangyaring humiling na gumawa ng role na may mga sumusunod na pahintulot:

Logs :createlogstream

Logs :putlogevents

Ibigay ang nakumpletong JSON mula sa hakbang na Configure execution role sa iyong mga privileged user upang gumawa ng role.

Maaaring piliin ang bagong role na ito mula sa user interface ng paggawa ng Lambda kapalit ng pagpapahintulot na gumawa ng bagong default role.

  • Mag-scroll sa seksyong Change default execution role.
  • Piliin ang Use an existing role at piliin ang naunang ginawang role.

Ang susunod na hakbang ng pag-configure sa execution role ay maaari nang laktawan at maaari ka nang magpatuloy sa Hakbang 6 - I-upload ang lambda code.


Hakbang 5 - I-configure ang execution role

Upang payagan ang Lambda function na ma-access ang mga AWS service (S3, SQS), kailangan mong magtalaga ng mga karagdagang pahintulot sa execution role ng Lambda.

  1. Sa console ng AWS Lambda, piliin ang Functions sa kaliwang navigation pane.

  2. Sa page ng mga detalye ng iyong Lambda function, piliin ang tab na Configuration, at pagkatapos ay i-click ang Permissions sa kaliwang navigation pane.

  3. Sa ilalim ng Execution role, piliin ang link ng pangalan ng role. Magbubukas ang IAM console.

  4. Sa pahinang Summary ng IAM console para sa execution role ng iyong Lambda function, piliin ang tab na Permissions.

  5. Mula sa menu na Add permissions, piliin ang Create inline policy.

  6. Lumipat sa JSON editor.

  7. Sa snippet sa ibaba, palitan ang seksyon sa ibaba (resource) ng ARN ng SQS queue na ginawa mo at itinala mula sa nakaraang hakbang:

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. I-paste ang snippet sa JSON editor kasama ang mga na-update na resource.

  2. I-click ang Next.

  3. Bigyan ang policy ng Name; hal. usecasepolicy.

  4. I-click ang Create policy.

May mga pahintulot na ngayon ang iyong Lambda function upang makipag-ugnayan sa mga serbisyong kailangan mo.


Hakbang 6 - I-upload ang Lambda code

Kapag na-upload ang mga file sa source S3 bucket, kailangan mo ng ilang code na tatakbo upang maproseso ang mga ito kapag na-invoke ang Lambda.

Depende sa iyong framework, may maraming paraan para mapatakbo ang Lambda function gamit ang nilalayong code, ngunit nakatuon ang gabay na ito sa functionality ng zip upload.

Magkakaroon ang Lambda function ng sumusunod na lohika anuman ang framework:

  • Kunin ang file: bigyang-kahulugan ang mensahe ng SQS upang makuha ang file mula sa source bucket.
  • CDR file: gumawa ng authenticated request sa Glasswall Halo Rest API.
  • Pangasiwaan ang mga tugon: pangasiwaan ang mga tugon na parehong matagumpay at hindi matagumpay.

Kung kailangan mo ng higit pang impormasyon para makapagsimula, makakakita ka ng kumpletong mga sample codebase na may naka-implement na lohikang ito sa Glasswall engineering github. Ang repository na ito ay nagbibigay ng sample code na may mga tagubilin sa pag-upload sa Lambda na ginawa rito. Bukod dito, may mga pre-built zip file na maaari mong gamitin para sa Lambda function. Pakitingnan ang mga tagubilin sa loob ng mga .md file.


Hakbang 7 - Magdagdag ng trigger

Sa hakbang na ito, iko-configure mo ang Lambda function upang ma-invoke kapag na-publish ang mga mensahe ng SQS sa queue sa pamamagitan ng pagdaragdag ng trigger.

  1. Sa pane ng pangkalahatang-ideya ng Function sa console page ng iyong function, piliin ang Add trigger.

  2. Mula sa listahan ng mga available na trigger, piliin ang SQS.

  3. Piliin ang SQS queue na ginawa mo kanina at i-click ang Add.

Awss3 - step 7a

Kumpleto na ngayon ang proseso at handa nang subukan.


Hakbang 8 - Pagsubok

Ngayong nakahanda na ang lahat, mag-upload ng file sa source S3 bucket at sa loob ng ilang segundo ay lilitaw ang isang file na may kaparehong pangalan sa clean S3 bucket.

Awss3 - step 8a

Awss3 - step 8b

Ang file na ito ay isang malinis na kopya ng orihinal na file na kapareho sa itsura, nang walang anumang mapanganib na nilalaman o mga depektong istruktural na maaaring may kasamang malware.

Kumpirmahin sa pamamagitan ng Glasswall Halo Portal

  • Iproseso ang orihinal na file gamit ang application na Clean a file ng Glasswall.

    • Ang iyong file ay bibigyan ng antas ng panganib kasama ng anumang mga item ng mapanganib na nilalaman o mga depektong istruktural na nakalista.
  • Iproseso ang nalinis na file mula sa clean S3 bucket sa application na Clean a file.

    • Dapat maibalik ang file bilang malinis na walang mapanganib na nilalaman o mga depektong istruktural.