SCSKã®çã§ãã ä»åãããŒã¿ããŒã¹é¢é£ã®è©±é¡ã§ãããè¥å¹²æ¯è²ã®ç°ãªãå
容ãšãªããŸãã èŠä»¶ãšãã®èæ¯ æ¬æ¡ä»¶ã«ããã MySQL (RDS/Aurora) ã®åçš®ãã°ã¯ Cloudwatch Logs ã«åºåãããŠãããããªèšèšãšãªã£ãŠããã®ã§ããããã°ã®äžéšããã¹ãã³ã°ã§ããªãããšããçžè«ãåããŸãããå
·äœçã«ã¯ä»¥äžã®ãããªèŠä»¶ã§ãã æ¬çªç°å¢çš AWS ã¢ã«ãŠã³ãã® Cloudwatch Logs ã«åºåããããã°ã¯ãã¹ãã³ã°ããªã éçšä¿å®çš AWS ã¢ã«ãŠã³ãã® Cloudwatch Logs ã«æ¬çªç°å¢çš AWS ã¢ã«ãŠã³ãã§åºåããããã°ã転éãããã®éã«ãã°ã®äžéšããã¹ãã³ã°ããã äžèšèŠä»¶ã®èæ¯ãšããŠãã客ãããæ¬çªç°å¢çš AWS ã¢ã«ãŠã³ãã§ãªãã¬ãŒã·ã§ã³ããå Žåã¯ãæ¬çªéçšã«ãŒã ïŒç¹æš©åºç»ïŒã«å
¥å®€ã®äžãåçš®å¶çŽã®äžã§äœæ¥ããå¿
èŠããããŸãããã£ãŠãäžè¬åºç»ã§ãã¢ã¯ã»ã¹ã§ãã AWS ã¢ã«ãŠã³ãäžã§æ¬çªç°å¢ã® RDS/Aurora ãã°ç¢ºèªã»åæãããã«åºã¥ãå皮調æ»ãè¡ããããã«ããããšã§ãããåæ»ã«éçšã»ä¿å®ãè¡ããããã«ããããšããæå³ããããŸããã ãã ããMySQL ãã°ã«ã¯ãããã PII ã®ãããªæ©åŸ®ãªæ
å ±ãå«ãŸããå¯èœæ§ãããããšãããéçšä¿å®çš AWS ã¢ã«ãŠã³ãã® Cloudwatch Logs ã«ãã°ã転éããé㯠100% 確å®ã«ãã¹ãã³ã°ãè¡ãå¿
èŠããããŸãã ãããæ¹åŒæ€èšæã«ããããã€ã³ãã§ããã è£è¶³ïŒãã¹ãã³ã°å¯Ÿè±¡ã® MySQL ãã°ã«ã€ã㊠ãããããPII ã®ãããªæ©åŸ®ãªæ
å ±ãå«ãŸããå¯èœæ§ããã MySQL ãã°ãããã®ãïŒãšæãããæ¹ããããããããŸããããã®çåèªäœã¯æ£ãããšæã£ãŠããŠãå®è³ªçã«ãããŒã¿ããŒã¹äžã§å®è¡ããã SQL æããã®ãŸãŸãã°ã«åºåãããããããªã±ãŒã¹ã®ã¿ã該åœããŸããäŸãã° SQL æã® where å¥ã«ãã®ãããªæ©åŸ®ãªæ
å ±ãå«ãŸããŠãããããªã±ãŒã¹ã§ããã ã€ãŸããããŒã¿ããŒã¹äžã§å®è¡ããã SQL æããã®ãŸãŸãã°ã«åºåããåŸã MySQL ãã°ã®ã¿ããã¹ãã³ã°å¯Ÿè±¡ãšããã° OK ãšããããšã«ãªããŸããå
·äœçã«ã¯ä»¥äž 3 çš®é¡ãšãªããŸãããMySQL ãšã©ãŒãã°ã«ã€ããŠã¯æ¥µããŠéå®çãªã±ãŒã¹ã§ãããããå®è³ªçã«ã¯ã»ãŒã¹ããŒã¯ãšãªãã°åã³ç£æ»ãã°ã®ã¿ã察象ãšãªããŸãã MySQL ãšã©ãŒãã° ã¹ããŒã¯ãšãªãã° ç£æ»ãã°ïŒã¯ãšãªæ
å ±ãåºåããå ŽåïŒ æ¬æ¡ä»¶ã§ã¯ç£æ»ãã°ã«ã¯ãšãªæ
å ±ãåºåããªãæ¹éã§ãã£ãããããŸãã¯ã¹ããŒã¯ãšãªãã°ãå¯Ÿè±¡ã«æ€èšãé²ããããšã«ãªããŸããã ã¹ããŒã¯ãšãªã®åºåäŸã¯ä»¥äžã®éãã§ããããããšããŠå®è¡æéããŠãŒã¶ãã¯ãšãªå®è¡æã®åçš®çµ±èšæ
å ±ãå«ãŸããŠãããå®è¡ããã SQL æã®æ
å ±ã¯ SET timestamp æã®çŽåŸã«åºåãããŸãã # Time: 2025-05-13T05:36:51.377085Z # User@Host: admin[admin] @ [10.10.51.21] Id: 6102 # Query_time: 1.192364 Lock_time: 0.000002 Rows_sent: 0 Rows_examined: 4999999 use test; SET timestamp=1747113033; select * from regex_test where col1 > 100 and col2 = "abc" å®è£
æ¡1ïŒBedrock or ãã¹ãã³ã°ã«é©ãããããŒãžããµãŒãã¹ã®äœ¿çš å
ã
ã®ã客ããããã®èŠæãšããŠã¯ãçæAIïŒLLMïŒãæ©æ¢°åŠç¿ãªã©ã䜿çšããŠãéæ±ºå®çãªã«ãŒã«ã§ PII ã®ãããªæ
å ±ãæ€ç¥ããŠãã¹ãã³ã°ãå®çŸã§ããªããïŒãšããå
容ã§ãããæ£èŠè¡šçŸãªã©ã䜿çšããŠãã°ãã¹ãã³ã°çšã®ã¹ã¯ãªãããå®è£
ãããããªã¢ãããŒãã§ã¯æ±ºå®çãªã«ãŒã«ãšãªããããæªç¥ã®ãã¿ãŒã³ã«ãã®ãŸãŸå¯Ÿå¿ã§ããªãããšã察å¿ã«éããŠçžå¿ã®ã³ã¹ãããããããšãªã©ãçç±ã§ãããAWS äžã§ãã®ãããªä»çµã¿ã®å®è£
ãæ€èšãããšãªããšãåœç¶ã§ãã Bedrock ãåè£ãšãªããŸãã äžæ¹ã§ãçæ AI ã®åçã»ç¹æ§äžãPII ã®ãããªæ
å ±ãå«ããã°ãå
¥åããŠã 100% ãã¹ãã³ã°ã§ãããšããä¿èšŒã¯ãããŸãããçæ AI ãéæ±ºå®çãªã«ãŒã«ïŒããã³ããïŒãè§£éããŠåŠçãã§ãã以äžããã®æ¯ãèããéæ±ºå®çã«ãªãããšã¯çŸç¶é¿ããããªããšãèšããŸãããããã«ãããå
è¿°ã®éãéçšä¿å®çš AWS ã¢ã«ãŠã³ãã® Cloudwatch Logs ã«ãã°ã転éããé㯠100% 確å®ã«ãã¹ãã³ã°ãè¡ãå¿
èŠãããã ãã®èŠä»¶ãæºããããšãã§ããªãã£ãããä»åã¯èŠéããšãªããæ±ºå®çãªã«ãŒã«ã«ãããã¹ãã³ã°æ¹åŒãæ¡çšããããšãšãªããŸããã å¯Ÿå¿ææã¯ Bedrock Guardrails ãæ¥æ¬èªå¯Ÿå¿ããå°ãåã ã£ãã®ã§ãããããä»ã§ããã°ãã®æ©èœã®äœ¿çšãåæãšããäžã§ããå°ãçå£ã« Bedrock ã®äœ¿çšãæ€èšãããããããŸããããããã«ããéæ±ºå®çãªèŠçŽ ã¯æé€ã§ããªãã®ã§ãä»ã®ãµãŒãã¹/æ¹åŒãšçµã¿åããããBedrock ã®ãã¹ãã³ã°åŠç察象ãéå®ãããªã©ã®æ€èšãå¿
èŠã§ããããªãšã¯æããŸãã Amazon Bedrock Guardrails ãæ¥æ¬èªã«å¯Ÿå¿ããŸãã | Amazon Web Services æ¬èšäºã§ã¯ãæ¥æ¬èªãæ±ããããã«ãªã£ã Amazon Bedrock Guardrails ã®æ©èœãšå©çšæé ã«ã€ããŠã玹ä»ããŸããä»åã®ã¢ããããŒãã§ãã³ã³ãã³ããã£ã«ã¿ãŒãšæåŠãããã¯ã«ã€ã㊠Standard Tier ãéžæããããšã§... aws.amazon.com ãªããå
ã
ã®ã客ããã®èŠä»¶ãšããŠã¯å¿
ãããçæ AIïŒLLMïŒã®äœ¿çšãåæã§ã¯ãªããäŸãã° Cloudwatch Logs ã®ãããŒãžãããŒã¿ä¿è·ããªã·ãŒã MacieãComprehend ãªã©ã®ãããŒãžããµãŒãã¹ã䜿çšã㊠PII æ
å ±ã®ãã¹ãã³ã°ãããããšã䞊è¡ããŠæ€èšããŠããŸãããæ®å¿µãªãããããã®ãµãŒãã¹ãæ¥æ¬èªã«å¯Ÿå¿ããŠããªãæ
å ±ãå€ãã£ããããããããåè£ããå€ããããåŸãªãã£ããšããã®ãæ£çŽãªãšããã§ããïŒMacie 㯠PII æ
å ±ã®æ€ç¥ãŸã§ã察象ãšãªãããããã®å
ã®ãã¹ãã³ã°ãã©ããããã¯ãŸãå¥åé¡ãšãªããŸããã»ã»ïŒ Amazon Comprehend でサポートされている言語 - Amazon Comprehend Amazon Comprehend ã§ãµããŒããããŠããèšèªã«ã€ããŠèª¬æããŸãã docs.aws.amazon.com PII 向けマネージドデータ識別子 - Amazon Macie Amazon Macie ãçµã¿èŸŒã¿åã®åºæºãšææ³ã䜿çšã㊠Amazon S3 ãªããžã§ã¯ãããæ€åºã§ããå人ãç¹å®ã§ããæ
å ±ã®ã¿ã€ãã説æããŸãã docs.aws.amazon.com ãã°ãã¹ãã³ã°æ¹éåã³ã«ãŒã«ã®æ€èš ããŠãå
è¿°ã®éãæ±ºå®çãªã«ãŒã«ãå®ããããšã«ãªããŸãããããã®ã«ãŒã«ãå®ããããã«ã¹ããŒã¯ãšãªãã°ã«å«ãŸãã SQL æã®ã©ã®éšåãã©ããã¹ãã³ã°ããã®ãã®æ¹éãæ€èšããå¿
èŠããããŸããã åœå㯠PII ã«è©²åœããæ
å ±ãå«ãŸããããŒãã«ãã«ã©ã åã³å
·äœç㪠PII æ
å ±ã«ã€ããŠã客ããã«èª¿æ»é ããäžã§ããã®å¯Ÿè±¡ã SQL æå
ã«å«ãŸããå Žåã®ã¿è©²åœæ
å ±ããã¹ãã³ã°ãããããªã«ãŒã«ãæ€èšããããšããé²ãæ¹ãæ€èšããŠããŸãããSQL æã«ããããã¹ãã³ã°ç¯å²ãåºããªãã°ãªãã»ã©åœç¶ãªãããã°ïŒæ
å ±ïŒã®äŸ¡å€ã¯çžå¯Ÿçã«äžãã£ãŠããŸãããã§ãã ãã ãã客ããåŽã§èª¿æ»ã«å²ããå·¥æ°ãéå®çã§ããããã°ãã¹ãã³ã°å¯Ÿè±¡ãååã«ç¹å®ãã€ç¶²çŸ
ã§ããã ãã®æ
å ±ããããžã§ã¯ãæéå
ã«æŽçããã®ãé£ããããšããããšãåãã£ããããã客ãããšãåè°ã®äžãæçµçã«ã¯ ãMySQL ã® SQL æ§æäž PII æ
å ±ãå«ãŸãåŸãç®æãå
šãŠç¶²çŸ
çã«ãã¹ãã³ã°ããã ãšããæ¹éã§ãã¹ãã³ã°ãè¡ãããšã«æ±ºå®ããŸããããŸããç¶²çŸ
çã«ãã¹ãã³ã°ããããšãæåªå
ãšããæ¬æ¥å¯Ÿè±¡å€ã®éšåããã¹ãã³ã°ã®ã«ãŒã«ã»ä»çµã¿äžãã¹ãã³ã°ãããŠããŸãããšã¯èš±å®¹ããæšãåãããŠæ±ºå®ããŸããã ãã®æ¹éãèžãŸããŠãSQL æ§æã MySQL ã®ããã¥ã¡ã³ããã調æ»ããçµæã MySQL ã«ããããªãã©ã«å€ ããã¹ãã³ã°ããã°ãå¿
ç¶çã« SQL æ§æäž PII æ
å ±ãå«ãŸãåŸãç®æãå
šãŠç¶²çŸ
çã«ãã¹ãã³ã°ã§ããã®ã§ã¯ãªãããšèããŸããã fw_error_www dev.mysql.com æ€èšã®çµæãäžèš URL ã«ç€ºãããŠãããªãã©ã«å€ã®äžèЧããã ãæ°å€ã ãš ãæååãªãã©ã«ã ã® 2 çš®é¡ã察象ã«ãã¹ãã³ã°ãããããªã«ãŒã«ã§ããã°äžèšèŠä»¶ãæºãããã®ã§ã¯ãªãããšæçµçã«å€æããŸãããæ°å€ãªãã©ã«ã§ã¯ãªãæ°å€ã察象ãšããããšã§ãæ¥ä»ãªãã©ã«ã 16 鲿°ãªãã©ã«ã®äžéšãåãããŠãã¹ãã³ã°ã§ããããã§ããbooleanãªãã©ã«ã NULL å€ã¯å¯Ÿè±¡å€ãšãªããŸãããäžæŠã¯å¯Ÿè±¡å€ãšããŠè¯ããšããããšã§ã客ãããšåæããŸãããå¿
èŠã«ãªã£ãå Žåã¯è¿œå ããã°ãããšãã倿ã§ãã ã¡ãªã¿ã«äžå¿è£è¶³ã§ããããªããžã§ã¯ãå®çŸ©èªäœã« PII æ
å ±ãå«ãŸããŠããªãããšãåæã§ãããã¡ãããã®ãããªããšã¯ååãŸãããåŸãªããã®ãšæããŸããã念ã®ãããã å®è£
æ¡2ïŒCloudwatch Logs ã®ã«ã¹ã¿ã ããŒã¿èå¥åã®äœ¿çš äžèšæ±ºå®ãèžãŸããŠãŸãèããã®ã Cloudwatch Logs ã®ã«ã¹ã¿ã ããŒã¿èå¥åã®äœ¿çšã§ããCloudwatch Logs å
ã§ãã°ãã¹ãã³ã°ãå®çµã§ããã·ã³ãã«ãªæ§æãšãªããŸãããããã¥ã¡ã³ããèŠãéãã¯æ£èŠè¡šçŸã䜿çšã§ããã®ã§ãæ°å€ããšãæååãªãã©ã«ãã® 2 çš®é¡ã察象ã«ãã¹ãã³ã°ãããããªã«ãŒã«ãå®è£
ã§ããããšèããããã§ãã カスタムデータ識別子 - Amazon CloudWatch Logs CloudWatch Logs ã§ãã¹ã¯ããã«ã¹ã¿ã ããŒã¿ã®ã¿ã€ããæå®ããããã«äœ¿çšããã«ã¹ã¿ã ããŒã¿èå¥åãäœæããæ¹æ³ã«ã€ããŠèª¬æããŸãã docs.aws.amazon.com ãšããããšã§æ©é詊ããŠã¿ãã®ã§ãã以äžã®ãããªå¶çŽãçºèŠãããããçµè«ãšããŠä»åã¯äœ¿çšã§ããªããšãã倿ã«ãªããŸããã 䜿çšã§ããæ£èŠè¡šçŸã®èšæ³ãéå®ãããŠãã æ£èŠè¡šçŸãã¿ãŒã³ã«ãããããéšåãå
šãŠãã¹ã¯ããããããªæåãšãªã 1ã€ã®ãã°ã°ã«ãŒãã«å¯ŸããŠèšå®ã§ããã«ã¹ã¿ã ããŒã¿èå¥åãæå€§ 10 å 200 æå以äžã®æ£èŠè¡šçŸãã¿ãŒã³ã¯äœ¿çšã§ããªã ä»åãç¹ã«ããã¯ãšãªã£ãã®ã¯ 1ã2 ç¹ç®ã§ããã®ã§ãããå°ãæãäžããŠèª¬æããŸãã ãªããäžèš AWS ããã¥ã¡ã³ãäžã§ã¯æ£èŠè¡šçŸå
ã§äœ¿çšã§ããèšå·ã以äžã®éãéå®ãããŠããããã«èŠåããããããã¯ããã§å°ãã®ã§ AWS ãµããŒãã«åãåãããŠããã®ã§ãããåçãšããŠã¯ããã¥ã¡ã³ãã®è¡šèšãééã£ãŠãããåºæ¬çã«ã¯ã©ã®èšå·ã䜿çšã§ãããšã®ããšã§ãããïŒæ¬æ¥æç¹ã§ã¯ãŸã ããã¥ã¡ã³ãã¯çŽã£ãŠããªãããã§ãïŒ èšå·: ( ‘_’ | ‘#’ | ‘=’ | ‘@’ |’/’ | ‘;’ | ‘,’ | ‘-‘ | ‘ ‘ ) 䜿çšã§ããæ£èŠè¡šçŸã®èšæ³ãéå®ãããŠãã ç§ã®æ€èšŒããç¯å²ã§ãããæå°ããããåæ¹/åŸæ¹åç
§ãåŠå®å
èªã¿ãšãã£ãæ£èŠè¡šçŸãã¿ãŒã³ã䜿çšã§ããŸããã§ãããç¹ã«ãåŠå®å
èªã¿ã®ãããªè€éãªæ£èŠè¡šçŸãã¿ãŒã³ã«ã€ããŠã¯ãregex too complexãã®ãããªãšã©ãŒã衚瀺ãããŠããŸããã«ã¹ã¿ã ããŒã¿èå¥åãšããŠç»é²ã§ããŸããã§ããã ãŸãããæååãªãã©ã«ãã«ãããã³ã°ãããæ£èŠè¡šçŸãã¿ãŒã³ã«æå°ãããã䜿çšã§ããªãã®ãå®çšäžåé¡ããããŸãããäŸãã°ãããã«ã¯ã©ãŒãã§å²ãããæååãªãã©ã«ã¯äžäŸãšã㊠“[^”]*?” ã®ãããªæ£èŠè¡šçŸã§ãããã³ã°ã§ããŸãããæå°ããã (?) ã䜿ããªãã®ã§ “[^”]*” ãšãªã£ãŠããŸããŸããããã«ã¯ã©ãŒãã§å²ãããä»»æã®æååãæå€§ããããšãªã£ãŠããŸããããæ¬æ¥ãã¹ãã³ã°å¯Ÿè±¡ãšããŠæå³ããŠããªãéšåãŸã§ãã¹ãã³ã°ãããŠããŸããŸãã å
·äœäŸãæãããšã以äžã®ãã㪠SQL æã®å Žå㯠select * from regex_test where col1 > 100 and col2 = "abc" 以äžã®ããã«ã»ãŒæ³å®éããã¹ãã³ã°ã§ããŸãã select * from regex_test where col1 > 100 and col2 = ***** äžæ¹ã§ããã®ããã«æååãªãã©ã«ãè€æ°çŸãããã㪠SQL æã®å Žå㯠select * from regex_test where col1 > 100 and col2 = "abc" and col3 = "edf" æå€§ãããã®åœ±é¿ã§ãcol2 ãžã®åãåããæ¡ä»¶ã«æå®ãããæååãªãã©ã«ãããcol3 ãžã®åãåããæ¡ä»¶ã«æå®ãããæååãªãã©ã«ãŸã§ãäžžã
æ£èŠè¡šçŸãã¿ãŒã³ã«ãããã³ã°ããŠããŸããããããåºãç¯å²ããã¹ãã³ã°ãããŠããŸããŸãããã® SQL ã®å Žåã ãš col3 ãžã®åãåããæ¡ä»¶ãå®å
šã«ãã¹ãã³ã°ãããŠããŸããå
ã® SQL æã®æ§é çãªæ
å ±ã倱ãããŠããŸããŸãã select * from regex_test where col1 > 100 and col2 = ****************** ãã® SQL æã¯åçŽãªåãŸã ãã·ã§ããããµãã¯ãšãªãè€æ°è¡šã®çµåãªã©ãå«ãŸããè€é㪠SQL æã®å Žåã¯æååãªãã©ã«ã®æå€§ãããã«ãã£ãŠãã¹ãã³ã°ãããŠããŸãç¯å²ãæŽã«èšå€§ã«ãªãããšãèããããŸããå
è¿°ããéããæ¬æ¥å¯Ÿè±¡å€ã®éšåããã¹ãã³ã°ã®ã«ãŒã«ã»ä»çµã¿äžãã¹ãã³ã°ãããŠããŸãããšã¯èš±å®¹ãããšããæ¹éããããšããŠããSQL æã®ååãçããªããããªåºç¯å²ããã¹ãã³ã°ãããŠããŸããšéçšä¿å®çš AWS ã¢ã«ãŠã³ãäžã®ãã°ããææãªèª¿æ»ãã§ããªããªã£ãŠããŸããšããããšã«ãªããŸãã æ£èŠè¡šçŸãã¿ãŒã³ã«ãããããéšåãå
šãŠãã¹ã¯ããããããªæåãšãªã ãã¡ãã¯æ°å€ã®ãã¹ãã³ã°ã§åé¡ãšãªããŸãããå
è¿°ããéããã¹ããŒã¯ãšãªãã°ã®ãããã«ã¯æ§ã
ãªæ
å ±ãå«ãŸããŠããŸãããåçŽã«æ°å€ããã¹ã¯ãããšä»¥äžã®éããéèŠãªæ
å ±ãæŠããã¹ã¯ãããŠããŸãããšã«ãªããŸãã # Time: ****-**-**T**:**:**.******Z # User@Host: admin[admin] @ [**.**.**.**] Id: **** # Query_time: *.****** Lock_time: *.****** Rows_sent: * Rows_examined: ******* use test; SET timestamp=**********; select * from regex_test where col* > *** and col* = "abc" æ°å€ã¯æååãªãã©ã«ãšéãã·ã³ã°ã«ã¯ã©ãŒã/ããã«ã¯ã©ãŒãã«ããå²ã¿æåããªããããã·ã³ãã«ãªæ£èŠè¡šçŸã§ SQL æå
ã®æ°å€ã«ã®ã¿ããããããããšãå°é£ã§ãããã£ãŠãçŸå®çãªæ¹æ³ãšããŠã¯ SET timestamp æä»¥éã® SQL æã®ã¿ãæ£èŠè¡šçŸã«ãããã¹ãã³ã°ã®å¯Ÿè±¡ãšããããšãæãç°¡åãªè§£æ±ºçãªã®ã§ãããæ®å¿µãªããã«ã¹ã¿ã ããŒã¿èå¥åã§ã¯ãã¿ãŒã³ãããããéšåãå
šãŠãã¹ã¯ãããŠããŸããããªä»æ§ã®ãããã®ãããªå¯Ÿå¿ãåããŸããã§ããã ã¡ãªã¿ã«ã1ç¹ç®ã«ã€ããŠã¯äŸãã° \s+”[^”]*”\s* ã®ããã«æååãªãã©ã«ååŸã®ç©ºçœæåããã¿ãŒã³ã«è¿œå ããããšã§ãcol2 ã®æ¡ä»¶å¥ãš col3 ã®æ¡ä»¶å¥ãå¥ã
ã«ãã¹ãã³ã°ããããšã¯å¯èœã§ããïŒ2ç¹ç®ã®å Žåã䌌ããããªå·¥å€«ãã§ããªãã¯ãªãïŒãŸãã詊ããŠããŸãããåèªã®å¢çã瀺ã \b ã \s ã®ä»£ããã«äœ¿çšããŠãè¯ããšæããŸãã ãã ããããããã¿ãŒã³ãæ€èšãåºããšæçµçã«ã¹ããŒã¯ãšãªãã°ã®åºå仿§ãæ£ç¢ºã«ææ¡ããªããšãã¹ãã³ã°ã®æãæŒããçºçãåŸãããšã«ãªãããã調æ»/å®è£
ã³ã¹ãã®èгç¹ãéã¿ããšããæå³ããããªããªã£ãŠããŸããŸãããã£ãŠãä»åã¯äžèš 2ãç¹ã®å¶çŽã倿ããæ®µéã§ãä»ã®æ¹æ³ãæ¡çšããããšã«ããŸããã å®è£
æ¡3ïŒLambdaïŒPythonïŒã®äœ¿çš ãšããããšã§ããå¹
åºãæ£èŠè¡šçŸã®èšæ³ãæ±ãããœãªã¥ãŒã·ã§ã³ãšããŠã¯ããã¯ã LambdaïŒPythonïŒã®äœ¿çšããã¿ãŒã§ã¯ãªãããšããçµè«ãšãªããŸãããå
è¿°ãããã°ãã¹ãã³ã°ã«ãŒã«ãå®è£
ããåã«ã¯ããæå³ã©ããšã§ããªããããLambda ã䜿çšãããã°ãã¹ãã³ã°ãã©ã®ãããªã¢ãŒããã¯ãã£ã§å®çŸããã®ãã®æ€èšã«å
¥ããŸããã ã¢ãŒããã¯ãã£ãšããŠã¯å€§ãŸãã«ä»¥äž 2 ã€ã®æ¡ãã客ãããšæ€èšããŸããããã¹ããŒã¯ãšãªãã°ã®æ§è³ªäžå€§éã«åºåããããããªã±ãŒã¹ã¯å°ãªããããã¢ãŒããã¯ãã£ã®ã·ã³ãã«ããåã£ãŠçµè«ãšããŠã¯æ¡ 1 ãæ¡çšããŸãããããä»åŸãã°åºåãå¢å€§ããããåºåéã®å€ããã°ããã¹ãã³ã°å¯Ÿè±¡ã«è¿œå ãããå Žåã¯ãæ¡ 2 ã®æ¹ãçãè¯ãããã§ã¯ãããŸãã æ¡1ïŒCloudwatch Logs ã®ãµãã¹ã¯ãªãã·ã§ã³ãã£ã«ã¿çµç±ã§ãã°ãã¹ãã³ã°çšã® Lambda ããªã¢ã«ã¿ã€ã å®è¡ å
è¿°ããéãã®ã·ã³ãã«ãªæ§æã§ããã¹ãã³ã°ããããã°ãéçšä¿å®çš AWS ã¢ã«ãŠã³ãã«ãªã¢ã«ã¿ã€ã åºåã§ããŸãããã°åºåéã«å¿ããŠãã°ãã¹ãã³ã°çš Lambda ã®åŒã³åºãåæ°ãå€ããªãããã³ã¹ãé¢ãžã®åœ±é¿ãèããããŸãããåé¢ Lambda ã®ãã¹ãã³ã°å¯Ÿè±¡ãåäžã®ãã°ãšã³ããªïŒã¹ããŒã¯ãšãªãã°ïŒã«ãªããããLambda ã®å®è£
ãããã·ã³ãã«ã«ããããšãã§ããŸãããŸãããµãã¹ã¯ãªãã·ã§ã³ãã£ã«ã¿çµç±ã§ãã°ãã¹ãã³ã°å¯Ÿè±¡ã® Lambda ãåŒã³åºãæ§æäžãäžæçãªãšã©ãŒã§ Lambda ã®å®è¡ã«å€±æããå Žåã®ãªãã©ã€ãé£ããã®ããã¡ãªããã§ã¯ãããŸãã æ¡2ïŒFirehose ã§ Cloudwatch Logs ã®ãã°ã S3 ã«åºåããEventBridge çµç±ã§ãã°ãã¹ãã³ã°çšã® Lambda ããããå®è¡ Firehose ã§ Cloudwatch Logs ã®ãã°ã S3 ã«åºåããŠãããEventBridge çµç±ã§ãã°ãã¹ãã³ã°çšã® Lambda ããããå®è¡ããæ§æã§ããæ¡ 1 ãšæ¯èŒãããšãã°ãã¹ãã³ã°åŠç倱ææã®ãªãã©ã€ã容æãªããšãåã³ãããå®è¡ãå¯èœãªããšïŒïŒ Lambda ã®å®è¡åæ°ãçžå¯Ÿçã«æããããïŒã® 2 ç¹ãã¡ãªããã«ãªããŸããæãããããã®ã¡ãªãããåŸãããã«ã¯ Lambda ã®å®è£
ãçžå¿ã«è€éã«ãªããããã¢ãŒããã¯ãã£ã®è€éæ§ãšåãããŠãã¬ãŒããªãã«ãªãéšåã ãšæããŸãããããå®è¡ãå¿
é èŠä»¶ãšãªãå Žåã¯ãã®ãããªã¢ãŒããã¯ãã£ãæ¡çšããå¿
èŠãåºãŠããŸããã ãªããS3 ã®ã€ãã³ãããªã¬ãŒçµç±ã§ Lambda ãèµ·åãããããªæ§æã«ããã°ãªã¢ã«ã¿ã€ã åºåãå¯èœã«ãªããŸãããä»åã®ã±ãŒã¹ã§ã¯æ¡ 1 ãšæ¯èŒãããšãã®ã¢ãŒããã¯ãã£ãåãã¡ãªããããªããããããã§ã¯åãäžããŠããŸããã æ¡ 1 ã«ããããã°ãã¹ãã³ã°çš Lambda ã®å®è£
äŸ æåŸã«ãæ¡ 1 ã«ããããã°ãã¹ãã³ã°çš Lambda ã®å®è£
äŸã玹ä»ããŸãããã ãã®å®è£
äŸã¯ã¯ãã¹ã¢ã«ãŠã³ãã® Cloudwatch Logs åºåã«å¯Ÿå¿ããŠããªãã®ã§ãããæéãããã°æ¹èšãããããããŸãããã import json import time import base64 import gzip import re import boto3 # ãã°ã°ã«ãŒããšãã°ã¹ããªãŒã ã®èšå®ïŒãµã³ãã«ïŒ LOG_GROUP_NAME = '/custom/mysql-masked-log' LOG_STREAM_NAME = 'slowquery' def lambda_handler(event, context): # base64ã§ãã³ãŒã decoded_data = base64.b64decode(event['awslogs']['data']) # gzipã§è§£å decompressed_data = gzip.decompress(decoded_data) json_data = json.loads(decompressed_data) # æååãªãã©ã«çœ®æçšã®æ£èŠè¡šçŸ regex_str = r'(["\'])((?:\\.|(?!\1).)*?)(\1)' # SET timestampæä»¥éã®SQLæãæœåºããããã®æ£èŠè¡šçŸ settimestamp_pattern = r'(?s)(.*?SET\s+timestamp.*?\n)(.*)' # æ°å€ãªãã©ã«çœ®æçšé¢æ° def replace_numbers(match): before_settimestamp = match.group(1) # SET TIMESTAMPãŸã§ã®éšå after_settimestamp = match.group(2) # SET TIMESTAMP以éã®éšå # æ°å€ãªãã©ã«ïŒæŽæ°ã»å°æ°ïŒã®ã¿ãã?ãã«çœ®æïŒèå¥åäžã®æ°åã¯å¯Ÿè±¡å€ïŒ masked_numbers = re.sub(r'\b\d+(\.\d+)?\b', '?', after_settimestamp) return before_settimestamp + masked_numbers # å
šlogEventsãåŠçïŒè€æ°ä»¶å¯Ÿå¿ïŒ log_events = json_data.get('logEvents', []) masked_events = [] for log_event in log_events: cwl_msg = log_event['message'] # æååãªãã©ã«ãã*ãã«çœ®æ masked_msg = re.sub(regex_str, r'\1*\1', cwl_msg, flags=re.DOTALL) # SET timestampæä»¥éã®æ°å€ãªãã©ã«ãã?ãã«çœ®æ # SET timestampãã¿ãŒã³ã«ãããããªãã£ãå Žåã¯ãã®ã³ãŒãã§ã¯èæ
®ããŠããªã masked_msg = re.sub(settimestamp_pattern, replace_numbers, masked_msg) masked_events.append({ 'timestamp': log_event.get('timestamp', int(round(time.time() * 1000))), 'message': masked_msg }) # CWLã«ãã¹ã¯ããã¹ããŒã¯ãšãªãã°ãåºå log_to_cwl(masked_events) return { 'statusCode': 200, 'body': json.dumps(f'Processed {len(masked_events)} log events') } def log_to_cwl(log_events: list): """ æå®ãããã°ã°ã«ãŒããšãã°ã¹ããªãŒã ã«ããã¹ã圢åŒã§ãã°ãåºåãã Args: log_events: {'timestamp': int, 'message': str} ã®ãªã¹ã """ # CloudWatch Logs ã¯ã©ã€ã¢ã³ããåæå logs_client = boto3.client('logs') # ãã°ã°ã«ãŒããååšããªãå Žåã¯äœæ try: logs_client.create_log_group(logGroupName=LOG_GROUP_NAME) except logs_client.exceptions.ResourceAlreadyExistsException: pass # ãã°ã¹ããªãŒã ãååšããªãå Žåã¯äœæ try: logs_client.create_log_stream( logGroupName=LOG_GROUP_NAME, logStreamName=LOG_STREAM_NAME ) except logs_client.exceptions.ResourceAlreadyExistsException: pass # ãã°ãåºå logs_client.put_log_events( logGroupName=LOG_GROUP_NAME, logStreamName=LOG_STREAM_NAME, logEvents=log_events ) å
è¿°ã®ãã°ãã¹ãã³ã°ã«ãŒã«ã Python ã§å®è£
ããŠãã以äžã®å
容ããªãã®ã§ããŸãèšåããããšã¯ãªãã®ã§ãããäžå¿ãã€ã³ãã ã説æããŠçµãããããšæããŸãã ãµãã¹ã¯ãªãã·ã§ã³ãã£ã«ã¿çµç±ã§ Lambda ã«æž¡ããããã°ã¯å§çž®ãããŠããã®ã§ãæåã«ãã³ãŒãã»è§£åããŠååŸ ä»¥äž3çš®é¡ã®æ£èŠè¡šçŸãã¿ãŒã³ãçšæ æååãªãã©ã«ãã*ãã«çœ®æ æ°å€ãã?ãã«çœ®æ SET timestamp æä»¥éã®éšåïŒïŒSQLæïŒãšãããããåã®éšåãå¥ã
ã«æœåº ååŸããã¹ããŒã¯ãšãªãã°ã®å
容ããããŸãæååãªãã©ã«ãã*ãã«çœ®æããåŸãSET timestamp æä»¥éã®éšåã«å«ãŸããæ°å€ãã?ãã«çœ®æ Cloudwatch Logs åºåæã«å¯Ÿè±¡ã®ãã°ã°ã«ãŒã/ãã°ã¹ããªãŒã ãååšããªãå Žå㯠Lambda åŽã§äœæ ãŸãšã èŠä»¶äžæçµçã«ã¯ç¡é£ãªæ¹åŒã«èœã¡çããŸããããããã«è³ããŸã§è²ã
ãšèãããããããããã¯ã ã£ããªãšæããŸãã Cloudwatch Logs ã®ãããŒãžãããŒã¿èå¥åãªã©ã®ããªã»ããã«å®çŸ©ãããŠããã«ãŒã«ããã®ãŸãŸäœ¿çšã§ããã°äžçªè¯ãã£ãã®ã§ããããã®ãããã¯ããããèšèªã®å£ãæãããšããã§ããäžæåã¯ããããæ¥æ¬èªã«ãããèªç¶èšèªåŠçã®èгç¹ã§ãã®æã®è©±ãè²ã
ãã£ãããšãæãåºããšããããããããã®ãçæ AIïŒLLMïŒã®éçã§å€§ååã£æããããšæããããããããšããã«ãŸã æ®ã£ãŠããã®ã ãªãšæããæ¬¡ç¬¬ã§ããå¥ã®æ©äŒãããã°ãBedrock Guardrails ãä»åŸæ¯é詊ããŠã¿ãããšããã§ãã æ¬èšäºãã©ãªããã®åœ¹ã«ç«ãŠã°å¹žãã§ãã
ABEMA ããã¯ãšã³ããšã³ãžãã¢ã®å€§çã§ãã ABEMAã®ãµãã¹ã¯ãªãã·ã§ã³ã·ã¹ãã ããªãã¡ã¯ã¿ãª ...
ãªã¯ã«ãŒãã®ããŒã¿æšé²å®€ã«ãŠã飲é£ã»ãã¥ãŒãã£ãŒã»IDPããŒã¿ãœãªã¥ãŒã·ã§ã³éšãçµ±æ¬ããéšé·ãéå· å¹žæ¯
ãå€å²ã«ãããäºæ¥