
- TOP
- ã¿ã°äžèЧ
- ããã°ã©ãã³ã°
ããã°ã©ãã³ã°
ã€ãã³ã
ãã¬ãžã³
æè¡ããã°
ãªãŒãã·ããç ä¿®ãšããŠããªãã³ãžã£ãã«ç»ã£ãŠããŸããã ãã®äžã§ãŠãŒã¶ããŒã¹ã§è¡ãããŠãã ã·ã§ã¢ããªãŒããŒã·ãããšããåãçµã¿ã®æ¬è³ªãè身ã§äœæããã®ã§ãŸãšããŸãã ãã®åã«ã·ã§ã¢ããªãŒããŒã·ããå¶åºŠã«ã€ããŠè§£èª¬ããŸãã ç§ãã¡ã®ããŒã ã«ã¯ãããŒãžã£ãŒããªãŒããŒãšãã£ãããžã·ã§ã³ããããŸããããå
šå¡ããªãŒããŒããšããèãã®åºãæè¡ã®ããšã ãã§ãªããçµç¹éå¶ã«é¢ããŠãå
šå¡ã§æèŠãåºãåããæ¡çšãããŒã äºç®ã®è°è«ã«ãã¿ããªãåå ããŸãããšã³ãžãã¢ã®èªäž»æ§ãæé·ãéãããçµç¹ã¥ãããè¡ã£ãŠããŸãã Product Teamã«ã¯ããã¢ããã°ã©ãã³ã°ãããã¹ãé§åéçºããã¬ã³ã¿ã«ç§»ç±ããããŒã ã·ã£ããâŠ
ãã¡ãã®èšäºã¯ãMEDLEY Summer Tech Blog Relayãã®6æ¥ç®ã®èšäºã§ãã MEDLEY Summer Tech Blog Relay | MEDLEY Developer Portal ããã«ã¡ã¯ïŒDevRelã®éç°ïŒ@Shige0096ïŒã§ãã ã¡ãã¬ãŒã§ã¯å€äŒç»ãšããŠãMEDLEY Summer Tech Blog Relayããšé¡ããŠãããã°ãªã¬ãŒãéå¬ããŸãïŒ 7/13(æ)ã8/21(é)ãŸã§æ¯æ¥ç°ãªãã¡ã³ããŒã... developer.medley.jp ã¯ããã« å»çãã©ãããã©ãŒã æ¬éš ãã©ãããã©ãŒã éçºå®€ SRE ã°ã«ãŒãã®å±±ç°ã§ããå»çæ©é¢åã SaaS ã§ãã CLINICS ã®å®å®çšŒåãšã·ã¹ãã ä¿¡é Œæ§ã®åäžã«åãçµãã§ããŸãã æ¬èšäºã§ã¯ãCLINICS ãé·ãã«ããã£ãŠäœ¿çšããŠããã¯ã©ã€ã¢ã³ãèªèšŒãµãŒãã OpenResty ãã Nginx ãžç§»è¡ããã«è³ã£ãçµç·¯ã«ã€ããŠç޹ä»ããŸãã ç¹ã«å®éã«çŽé¢ããããžãã¹èª²é¡ãæè¡éžå®ã«ãã©ãŒã«ã¹ãåœãŠãŠã話ãããŸãã ãªããæ¬èšäºã®äž»çŒã¯ãOpenResty vs Nginxãã®ããŒã«æ¯èŒã§ã¯ãããŸãããæ¯èŒæ€èšãé²ãããªãã§ãããããé»å眲åãèŠããªãã®ã§ã¯ãªããããšããæ°ã¥ãã«è³ããçµæãšããŠèªèšŒãµãŒãåäœã§ã¯ãªãã¢ãŒããã¯ãã£å
šäœãèŠçŽãããšã«ãªããŸãããæ¬èšäºã§ã¯ãã®è©äŸ¡è»žãšå€æã®éçšãå
±æããŸãã æ³å®èªè
: æ¢åã·ã¹ãã ã®æè¡éžå®ã»å·æ°ã«åãçµããšã³ãžã㢠æ€èšŒç°å¢: AWS (ALB / NLB / NAT Gateway / VPC) ãåæ å·çæç¹: 2026幎3æãOpenResty / Nginx ã®ããŒãžã§ã³èšè¿°ã¯åœæã®æ
å ± æ¬èšäºã®ãã€ã³ã æ¬èšäºã¯ CLINICS ã®ã¯ã©ã€ã¢ã³ãèªèšŒãµãŒãã OpenResty ãã Nginx ãžç§»è¡ããäºäŸã§ããã話ã®äžå¿ã¯ããŒã«çœ®ãæããã®ãã®ã§ã¯ãªãããããããèªèšŒãµãŒãã¯äœã解決ããŠããã®ãããåãçŽããéçšã«ãããŸãã å
¥å£ã®åã : OpenResty ã®åŸç¶ãšããŠäœãéžã¶ã èŠçŽããåã : èªèšŒãµãŒãã«æ®ãã¹ã圹å²ã¯æ¬åœã«äœã 蟿ãçããçã : çµè·¯ããããã¯ãŒã¯å±€ã§åé¢ããã°ãã¢ããªå±€ã®é»å眲åã¯äžèŠãšãªããèªèšŒãµãŒãã®åœ¹å²ã¯ mTLS æ€èšŒã®ã¿ã«çž®ã æè¡éžå®ã®æ±ºãæ : ãæ°èŠãŠãŒã¶ãŒãã¯ã©ã€ã¢ã³ãèšŒææžãªãã§ã¢ã¯ã»ã¹ã§ããå°ç·ãå¿
èŠããšãã CLINICS åºæã®ä»æ§ããALB mTLS ã§ã¯ãªã Nginx åäœãéžã¶æ ¹æ ãšãªã£ã ããã«è³ããçç±ãã²ãšããšã§èšãã°ããOpenResty ã®ä»£æ¿ãæ¢ããããšããããŠãã¢ãŒããã¯ãã£ã®åæãã®ãã®ãåãçŽããããã§ããããŒã«æ¯èŒã¯å
¥å£ã«ããããæ¬è³ªã¯æè¡ã¹ã¿ãã¯ã®å€åŽ â ã¢ãŒããã¯ãã£ã®åæãšãµãŒãã¹ã®äœ¿ããæ¹ â ã«ãããŸããã åæ: ãªãã¯ã©ã€ã¢ã³ãèªèšŒ (mTLS) ãå¿
èŠãªã®ã æ¬é¡ã«å
¥ãåã«ãCLINICS ã®ãããªå»çãããã¯ãã«ãããŠããªãã¯ã©ã€ã¢ã³ãèªèšŒ (mTLS) ãè¡ãèªèšŒãµãŒããå¿
èŠãªã®ããæŽçããŸãã CLINICS ã¯å»çæ©é¢ã§å©çšãããæ
å ±ã·ã¹ãã ã§ãããåçåŽåçãå»çæ
å ±ã·ã¹ãã ã®å®å
šç®¡çã«é¢ããã¬ã€ãã©ã€ã³ 第6.0çã(2023幎5æ) ã®å¯Ÿè±¡ãšãªããŸããåã¬ã€ãã©ã€ã³ã® ã·ã¹ãã éçšç·š [Control] 13. ãããã¯ãŒã¯ã«é¢ããå®å
šç®¡çæªçœ® ã§ã¯ããªãŒãã³ãªãããã¯ãŒã¯ãä»ããéä¿¡ã«ã€ããŠæ¬¡ã®ããã«æèšãããŠããŸã ( åçåŽåç ã¬ã€ãã©ã€ã³å
¬åŒããŒãž )ã ⥠ãªãŒãã³ãªãããã¯ãŒã¯ã«ãããŠãIPsec ã«ãã VPN æ¥ç¶çãå©çšãã HTTPS ãå©çšããå ŽåãTLS ã®ãããã³ã«ããŒãžã§ã³ã TLS1.3 以äžã«éå®ããäžã§ãã¯ã©ã€ã¢ã³ãèšŒææžãå©çšãã TLS ã¯ã©ã€ã¢ã³ãèªèšŒã宿œããããšããã ãã·ã¹ãã ã»ãµãŒãã¹çã®å¯Ÿå¿ãå°é£ãªå Žåã«ã¯ TLS1.2 ã®èšå®ã«ããããšãå¯èœãšããããã®éãTLS ã®èšå®ã¯ãµãŒã/ã¯ã©ã€ã¢ã³ããšãã«ãTLS æå·èšå®ã¬ã€ãã©ã€ã³ 3.0.1 çãã«èŠå®ãããæãå®å
šæ§æ°Žæºã®é«ããé«ã»ãã¥ãªãã£åãã«æºããé©åãªèšå®ãè¡ãããšã â å»çæ
å ±ã·ã¹ãã ã®å®å
šç®¡çã«é¢ããã¬ã€ãã©ã€ã³ 第6.0ç ã·ã¹ãã éçšç·š [Control] ã€ãŸããCLINICS ããªãŒãã³ãªãããã¯ãŒã¯çµç±ã§ã¯ã©ã€ã¢ã³ããšéä¿¡ãã以äžãTLS 1.3 (ãŸãã¯é«ã»ãã¥ãªãã£åèšå®ã® TLS 1.2) + mTLS ã¯ã¬ã€ãã©ã€ã³äžã®èŠè«ã«ãªããŸããIPAãTLS æå·èšå®ã¬ã€ãã©ã€ã³ãã®é«ã»ãã¥ãªãã£åã«ã€ããŠã¯ãå
¬åŒããŒãž ( IPA å
¬åŒããŒãž ) ãåç
§ããŠãã ãã (å·çæç¹ã®ææ°çã¯ç¬¬3.1.1ç (2025幎4æ25æ¥å
¬é)ãäžèšåŒçšæäžã®ã3.0.1 çãã¯å»çæ
å ±ã¬ã€ãã©ã€ã³ç¬¬6.0çæ¬æã®èšèŒã«åºã¥ããŸã)ã CLINICS ã«ã¯ã©ã€ã¢ã³ãèªèšŒãµãŒããååšããæ ¹æ¬çç±ã¯ããã«ãããŸããããã¹ããã©ã¯ãã£ã¹ãšããŠå°å
¥ããŠãããã®ã§ã¯ãªããå»çæ
å ±ãæ±ããµãŒãã¹ãšããŠæºããã¹ãèŠä»¶ãšããŠããããã¯ãŒã¯çµè·¯äžã« mTLS æ€èšŒãæ
ãã³ã³ããŒãã³ããé
眮ãããŠããŸãã ãã®ãmTLS ãã©ãã§çµç«¯ããèª°ãæ€èšŒããããããæ¬èšäºã§æ±ãèšèšå€æã®åºçºç¹ãšãªããŸãã æ§æ§æãš OpenResty æ¡çšã®èæ¯ CLINICS ã®ã¯ã©ã€ã¢ã³ãèªèšŒãµãŒãã¯ãçŽ4幎ã«ããã£ãŠ OpenResty ã§éçšãããŠããŸããããµãŒãã¹ãã¹ã±ãŒã«ã¢ããããŠããææã«èšèšããããã®åŸã倧ããªæ¹ä¿®ãå ããã«åãç¶ããŠãããã®ã§ãã ãªãåœæ OpenResty ãéžã°ããã®ããèŠä»¶ãšèšèšå€æã®é ã«è¿œã£ãŠã¿ãŸãã èŠä»¶: mTLS ã«ããã¯ã©ã€ã¢ã³ãèªèšŒ åé
ã§è¿°ã¹ããšãããCLINICS ããªãŒãã³ãªãããã¯ãŒã¯çµç±ã§ã¯ã©ã€ã¢ã³ããšéä¿¡ãã以äžãå»çæ
å ±ã¬ã€ãã©ã€ã³ã®èŠè«ãšã㊠mTLS ã®å®è£
ãå¿
èŠã§ããã¯ã©ã€ã¢ã³ãèªèšŒãµãŒãã¯ããã® mTLS æ€èšŒãæ
ãã³ã³ããŒãã³ããšããŠé
眮ãããŠããŸãã èšèšå€æ: Web ãµãŒãã®å
±éå äžæ¹ãCLINICS ã® Web ãµãŒãã¯ãæ§è³ªã®ç°ãªãè€æ°çµè·¯ããã®ãªã¯ãšã¹ããåäžã§æãæ§æã«ãªã£ãŠããŸãããããã§ãããè€æ°çµè·¯ããšã¯ã次ã®3çš®é¡ã®ãŠãŒã¶ãŒããã®ãªã¯ãšã¹ãã§ãã 瀟å
ãªãã¬ãŒã¿ãŒ: ãµããŒããã¹ã¯ãªã©ã瀟å
ã®ãªãã¬ãŒã·ã§ã³æ¥åãæ
ããŠãŒã¶ãŒ melmo ãŠãŒã¶ãŒ: æ£è
åãã¢ã㪠melmo ã®å©çšè
å»åž« / å»çäºå (æ¬èšäºã§ã¯ãã«ã«ãå©çšãŠãŒã¶ãŒããšã衚èš): CLINICS ã«ã«ãããå©çšããã ããŠããå»çæ©é¢ã®ãŠãŒã¶ãŒ 远å èŠä»¶: ãªã¯ãšã¹ãçµè·¯ã®èå¥ Web ãµãŒããå
±éåããçµæãåãåã£ããªã¯ãšã¹ãããã©ã®çµè·¯ã蟿ã£ãŠãããããå€å®ããå¿
èŠãçãŸããŸããã èšèšå€æ: é»å眲åã«ãããªã¯ãšã¹ãçµè·¯ã®èå¥ CLINICS ã§ã¯ãã®ãçµè·¯èå¥ãããã¯ã©ã€ã¢ã³ãèªèšŒãµãŒããä»äžããé»å眲åã§å®çŸããŠããŸããã ã€ãŸããèªèšŒãµãŒãã¯ãmTLS ã®å®è£
ããšããªã¯ãšã¹ãçµè·¯ã®èå¥ãã®2ã€ã®èŠä»¶ãåæã«æºããå¿
èŠããããŸãããç¹ã«çµè·¯èå¥ãé»å眲åã§å®çŸããã«ã¯ããªã¯ãšã¹ãã®åçš®æ
å ±ã Lua ã¹ã¯ãªãããã Nginx ã®å€æ°çµç±ã§åãåºãå¿
èŠããããŸããäž¡æ¹ã1ã€ã®æè¡ã¹ã¿ãã¯ã§å®çŸã§ããéžæè¢ãšã㊠OpenResty ãæ¡çšããŠããŸãããåœæã®èŠä»¶ã«å¯ŸããŠã¯ãåççãªéžæã ã£ããšèšããŸãã ãã ããã·ã¹ãã ã¯èŠä»¶ãšäžç·ã«å€ã³ããã®ã§ããçŽ4幎ã®éã«ããµãŒãã¹ã®ã¹ã±ãŒã«ããŠãŒã¶ãŒå±æ§ã®å€æ§åãAWS åŽã§å©çšã§ããæ©èœã®é²åããããåœåã®åæãå°ããã€ãºã¬ãŠããŠããŸããã æ§æ§æã§èŠããŠãã2ã€ã®èª²é¡ é·å¹Žéçšãããã¡ã«ãæ§æäžã®èª²é¡ãé¡åšåããŠããŸããã 1. NAT Gateway äŸåã«ããçµè·¯æ§æã®èª²é¡ Web ãµãŒãã® ALB ã Internet-facing ã¹ããŒã ã®ããããã¡ã€ã³è§£æ±ºã§ã¯ãããªã㯠IP ãè¿ãããŸããOpenResty ãã proxy_pass ã§ ALB ãžãªã¯ãšã¹ããéãçµè·¯ã¯ãçµæãšã㊠VPC å€ãçµç±ããã«ãŒãã£ã³ã°ãšãªããNAT Gateway ãå¿
ãéãæ§æã«ãªã£ãŠããŸããã å ããŠãOpenResty ã® Docker Hub äžã§å
¬éãããŠããå
¬åŒã€ã¡ãŒãž ( openresty/openresty ) ã¯å·çæç¹ã§ 1.29.2.3 (Nginx 1.29.2 ããŒã¹) ãŸã§ãå
¬éãããŠãããNginx æ¬å®¶ã§ upstream ãžã® keep-alive ãããã©ã«ãåããã 1.29.7 ã®å€æŽ ( NGINX Community Blog ) ãåã蟌ãã«ã¯ãèªåã§ Docker ã€ã¡ãŒãžããã«ãããå¿
èŠããããŸãããproxy_pass ã®åºŠã«æ°èŠ TCP ã»ãã·ã§ã³ã匵ããããªãŒããŒããããããµãŒãã¹ãæäŸããäžã§ã®ããã©ãŒãã³ã¹èª²é¡ã®äžã€ã§ããã ããã«åé¡ãªã®ã¯ããã®çµè·¯äžã«ãã NAT Gateway ãåäžé害ç¹ãšããŠæ©èœããŠããŸãããšã§ããæ€èšåœæãAWS ã® NAT Gateway 㯠AZ åäœ (Zonal) åäœã®ã¿ã§ãCLINICS ã®æ§æã§ã¯èªèšŒãµãŒããã Web App ãžã®çµè·¯ãåäžã® NAT Gateway ãçµç±ããŠããŸãã (å·çæç¹ã§ã¯è€æ° AZ ãžèªåå±éãã Regional NAT Gateway ãéžæè¢ã«å ãã£ãŠããŸã)ããããèœã¡ããšã次ã®2æ¹åãåæã«æ¢ãŸããŸãã ã€ã³ããŠã³ãæ¹å: èªèšŒãµãŒã â Web App ãžã®ãªã¯ãšã¹ãçµè·¯ã鮿ãããã«ã«ãå©çšãŠãŒã¶ãŒã®ãªã¯ãšã¹ãåä»ã忢ãã ã¢ãŠãããŠã³ãæ¹å: Web App â å€éš SaaS ãžã®é£æºãäžèœã«ãªã æ¬æ¥ã§ããã°ããã®çµè·¯ã NAT Gateway ã®ãããªåäžé害ç¹ã«äŸåãããããšã¯é¿ããããšããã§ããã 2. é害çºçæã®åœ±é¿ç¯å²ã®åºã 瀟å
ãªãã¬ãŒã¿ãŒ / melmo ãŠãŒã¶ãŒ / ã«ã«ãå©çšãŠãŒã¶ãŒãåã Web ãµãŒããå
±æããŠãããããWeb ãµãŒãã§é害ãèµ·ãããšãæ§è³ªã®ç°ãªãå
šãŠãŒã¶ãŒã«åæã«åœ±é¿ãæ³¢åããæ§é ã«ãªã£ãŠããŸããããµãŒãã¹ã®æé·ã«å¯ŸããŠããªã¹ã¯ãç·åœ¢ä»¥äžã«èšããã§ããç¶æ
ãšãèšããŸãã è§£æ±ºã®æ¹åæ§ â çµè·¯ã®åé¢ãš VPC å
éåå 2ã€ã®èª²é¡ããæã¡æã«å¯Ÿå¿ããããšæ¬¡ã®ããã«ãªããŸãã NAT Gateway äŸåã«ããçµè·¯æ§æã®èª²é¡ â ALB ã Private Subnet ã«é
眮ããèªèšŒãµãŒããã Web App ãŸã§ã®éä¿¡ã VPC å
ã«éãã é害çºçæã®åœ±é¿ç¯å²ã®åºã â ã«ã«ãå©çšãŠãŒã¶ãŒã®çµè·¯ãã瀟å
ãªãã¬ãŒã¿ãŒã»melmo ãŠãŒã¶ãŒã®çµè·¯ããåé¢ãã ã€ãŸãä»åã®å·æ°ã§ã¯ããã«ã«ãå©çšãŠãŒã¶ãŒã®çµè·¯ãåé¢ããVPC å
ã§å®çµãããããšããã¢ãŒããã¯ãã£ã®æ¹éãå
ã«æ±ºãŸããŸããèªèšŒãµãŒããã©ãäœãçŽããã¯ããã®æ¹éã®ããšã«ç¶ãåãã§ãã åé¢ã®åž°çµ â é»å眲åã®ååšçç±ãæ¶ãã æ¹éãæ±ºãŸã£ããšããã§ãOpenResty ãæ
ã£ãŠãã圹å²ãåè§£ãçŽããŸãã mTLS ã«ããã¯ã©ã€ã¢ã³ãèªèšŒ â å»çæ
å ±ã¬ã€ãã©ã€ã³ã®èŠè« é»å眲åã«ããçµè·¯èå¥ â åäžã® Web ãµãŒããå
šçµè·¯ãæãããã®ä»çµã¿ 1 ã¯å€ããªããã§ã¯ 2 ã¯ã©ããã é»å眲åã§çµè·¯ãèå¥ããªããã°ãªããªãã£ãã®ã¯ãã瀟å
ãªãã¬ãŒã¿ãŒ / melmo ãŠãŒã¶ãŒ / ã«ã«ãå©çšãŠãŒã¶ãŒã®ãã¹ãŠã®çµè·¯ããåäžã® Web ãµãŒããæããŠãããããã§ããçµè·¯ããããã¯ãŒã¯çã«åºå¥ã§ããªããããããã¢ããªå±€ã®é»å眲åã§åºå¥ããŠããŸãããçµè·¯ããããã¯ãŒã¯å±€ã§åãããªããé»å眲åãã®ãã®ãèŠããªããªããŸãã ããã¯äœãã工倫ããŠåã£ãçµæãšãããããåé¢ãšããæ¹éã®è«ççãªåž°çµã§ãããã ãããã®åž°çµãæã€æå³ã¯å€§ãããèªèšŒãµãŒãã«æ®ã圹å²ã¯ mTLS ã«ããã¯ã©ã€ã¢ã³ãèªèšŒãã 1ã€ã«ãªããŸãããOpenResty ã®åŸç¶ã«äœãå¿
èŠãããšããåãã¯ããã®æç¹ã§ãmTLS ã ããªããäœã§å®è£
ãããããšããããã£ãšå°ããªåãã«å€ãã£ãŠããŸãã æ€èšããéžæè¢ â mTLS ã ããªããäœã§å®è£
ããã èªèšŒãµãŒãã«æ®ã圹å²ã mTLS ã®ã¿ã«çµããããšã§ãéžæè¢ã¯æ¬¡ã®2ã€ã«ãªããŸãã éžæè¢ A: AWS ALB ã® mTLS æ©èœ â ã¯ã©ã€ã¢ã³ãèªèšŒããããŒãžãæ©èœã§ä»£æ¿ããèªèšŒãµãŒããã®ãã®ã廿¢ãã éžæè¢ B: Nginx åäœ â èªèšŒãµãŒãã¯æ®ããLua ã¹ã¯ãªãã (OpenResty) ãæããŠæšæºæ©èœã®ã¿ã§åæ§æãã ãŸãé
åçã«èŠããã®ã¯éžæè¢ A ã§ãããmTLS ããæ
ããªãã³ã³ããŒãã³ãã®ããã«ããµãŒããèªåã§éçšãç¶ããçç±ã¯ãªããããããŸãããéçšè² è·ãäžããæ§æãåçŽã«ã§ãããšèããŠããŸããã éžæè¢ A: AWS ALB ã® mTLS æ©èœ AWS 㯠ALB ã« mTLS æ©èœãæäŸããŠããŸã ( ALB Mutual TLS å
¬åŒããã¥ã¡ã³ã )ãALB ã® mTLS ã«ã¯ verify ã¢ãŒã ãš passthrough ã¢ãŒã ã®2ã€ããããããããåäœãšè²¬åç¯å²ã倧ããç°ãªããŸãã A-1. verify ã¢ãŒã ALB ãã¯ã©ã€ã¢ã³ãèšŒææžãçŽæ¥æ€èšŒããã¢ãŒãã§ããã¯ã©ã€ã¢ã³ããæç€ºãã X.509 èšŒææžããALB ã«çŽä»ãã Trust Store ã® CA èšŒææžããã³ CRL (倱å¹ãªã¹ã) ãšç
§åããæ€èšŒã TLS ãã³ãã·ã§ã€ã¯å
ã§å®çµãããŸããæ€èšŒçµæã¯ X-Amzn-Mtls-Clientcert-Serial-Number ã» X-Amzn-Mtls-Clientcert-Issuer ã» X-Amzn-Mtls-Clientcert-Subject ã» X-Amzn-Mtls-Clientcert-Validity ãªã©ã®ãããã§ããã¯ãšã³ãã«æž¡ãããŸãã æ€èšŒã»å€±å¹ç¢ºèªãŸã§ ALB ã«å§ä»»ã§ãã: Web App åŽã«èšŒææžåŠçã³ãŒããäžèŠãšãªããèªèšŒé¢å¿ããããã¯ãŒã¯åºç€åŽã«éã蟌ãããã æ€èšŒå€±æã®è² è·ãããã¯ãšã³ãã«åã°ãªã: ãã³ãã·ã§ã€ã¯æ®µéã§æ€èšŒãå®çµãããããäžæ£ãªèšŒææžã Web App ã«å°éããããšããªã èšŒææžãæç€ºããªãã¯ã©ã€ã¢ã³ã㯠TLS ãã³ãã·ã§ã€ã¯ãæç«ããªã: ããã¯ãäžæ£ã¢ã¯ã»ã¹ãæ©æã«é®æã§ããããšããã¡ãªããã§ãããããæ£åœãªçç±ã§èšŒææžãæããªãã¯ã©ã€ã¢ã³ãããäžåéããªããšããå¶çŽã§ããã A-2. passthrough ã¢ãŒã æ€èšŒããžãã¯ãã¢ããªåŽã§èªç±ã«ã«ã¹ã¿ãã€ãºã§ãã: Subject ã Issuer ã«å¿ããèªå¯ãçµç¹åºæã®ããªã·ãŒé©çšãªã©ããã¢ããªã®ã³ãŒãããŒã¹ã§å®çµãã æ€èšŒããªã·ãŒãã³ãŒãã§ããŒãžã§ã³ç®¡çãããã: Trust Store ã®æŽæ°ã ALB ã®ç®¡çç»é¢ã§ã¯ãªããããã€ãã€ãã©ã€ã³ã§æ±ãã èšŒææžãã§ãŒã³æ€èšŒã»å€±å¹ç¢ºèªã®ã³ã¹ãã¯ãã¹ãŠ Web App åŽã«ä¹ã: æ€èšŒããžãã¯ã®å®è£
責任ã«å ããæ§èœãã¥ãŒãã³ã° (ãã§ãŒã³æ€èšŒã®ãã£ãã·ã¥ãCRL/OCSP ã®ååŸçµè·¯) ã Web App ã§æã€å¿
èŠããã ã»ãã·ã§ã³åé (Session Resumption) ã¯ãµããŒããããªã: AWS å
¬åŒããã¥ã¡ã³ãäžãpassthrough ãš verify ã®äž¡ã¢ãŒãã§ Session Resumption ã¯ç¡å¹åãããæšãæèšãããŠãã ( Mutual authentication with TLS - Before you begin ) éžæè¢ B: Nginx åäœ é»å眲åãæšãŠãããšã®èªèšŒãµãŒãã«å¿
èŠãªã®ã¯ãTLS ã®çµç«¯ãã¯ã©ã€ã¢ã³ãèšŒææžã®æ€èšŒãããã¯ãšã³ããžã® proxy_pass ã ãã§ãããããã¯ãã¹ãŠ Nginx ã®æšæºæ©èœã§å®çµããŸãã ãããã OpenResty ãæ¡çšããŠããçç±ã¯ãé»å眲åã®ããã«ãªã¯ãšã¹ãæ
å ±ã Lua ã§æè»ã«æ±ãããããšã§ãããLua ã䜿ãåæ©ããªããªã£ã以äžãæ¬å®¶ Nginx ã«æ»ãã®ãèªç¶ãªéžæè¢ã«ãªããŸããæ¬å®¶ã«æ»ãã°ãupstream ãžã® keep-alive ãããã©ã«ãåããã 1.29.7 ã®ãããªãæ¬å®¶ã®ãªãªãŒã¹ã«ãçŽæ¥è¿œåŸã§ããŸãã æ¯èŒãšè©äŸ¡ â ALB mTLS ãæ¡çšããªãã£ãçç± ALB mTLS ã¯é
åçã«èŠããŸããããCLINICS ã®ã¢ããªã±ãŒã·ã§ã³ä»æ§ãšç
§ããåããããšæ¡çšã§ããŸããã§ããã CLINICS ã®ä»æ§ â ã«ã«ãå©çšãŠãŒã¶ãŒã§ã mTLS ãªãã§éãçµè·¯ãå¿
èŠ CLINICS ã«ã¯ãã«ã«ãå©çšãŠãŒã¶ãŒã§ãã£ãŠããæ°èŠãŠãŒã¶ãŒã®ã¯ã©ã€ã¢ã³ãèšŒææžçºè¡æã¯ã¯ã©ã€ã¢ã³ãèšŒææžãæããªãç¶æ
ã§ãµãŒãã¹ã«ã¢ã¯ã»ã¹ã§ããå¿
èŠããããšãã仿§ããããŸãã ALB ã® verify ã¢ãŒããæ¡çšãããšãèšŒææžãæããªãã¯ã©ã€ã¢ã³ã㯠TLS æ¥ç¶èªäœã確ç«ããªãããããŠãŒã¶ãŒç»é²ã®å°ç·ãå£ããŠããŸããŸãã ãã®ä»æ§ã¯ãQA ããŒã ãšãçŸç¶ã©ããªãã¿ãŒã³ã®ã¢ã¯ã»ã¹ãéããŠãããããäžç·ã«æ£åžãããã¿ã€ãã³ã°ã§æŽçã§ãããã®ã§ãããã³ãŒããèªãã ã ãã§ã¯èŠããŠããªãã䜿ããæ¹ãããQA ããŒã ã®å®æ©æ€èšŒããŠããŠããæµ®ãäžãã£ãŠãã圢ã§ãããæ©èœèŠä»¶ãã§ã¯ãªãããµãŒãã¹ã®äœ¿ããæ¹ãã®æèã§æãçŽãå¿
èŠããããŸããã passthrough ã¢ãŒãã®å Žåã®é£ç¹ ã§ã¯ passthrough ã¢ãŒãã¯ã©ãããALB ã¯èšŒææžãã§ãŒã³ããããã§æž¡ãã ããªã®ã§ãå®éã® mTLS æ€èšŒã¯ Web App åŽã§è¡ãããšã«ãªããŸããããã¯æ¬¡ã®ãããªå¥çš®ã®ãªãŒããŒããããçã¿ãŸãã èªèšŒããžãã¯ã Web App ã«æã¡èŸŒããããèªèšŒé¢å¿ãšããžãã¹é¢å¿ãæ··ãã mTLS ã®æ€èšŒã³ã¹ã (èšŒææžãã§ãŒã³ã®æ€èšŒã倱å¹ç¢ºèª) ã Web App ã®å¿çæéã«çŽæ¥åœ±é¿ãã ãèªèšŒãµãŒãã廿¢ã㊠ALB ã«å¯ãããã€ããããçµå± Web App åŽã«è€éæ§ãç§»ãã ãã®çµæãšãªããŸãã ããããŠãmTLS ã®å®è£
ã¯éžæè¢ B ã® Nginx ã«æ±ºãŸããŸãããæ¹é (çµè·¯ã®åé¢ãš VPC å
éåå) ãšæè¡éžå® (Nginx) ãåãããçµæããæ¬¡ã®æ°æ§æã§ãã æ°æ§æ åã³ã³ããŒãã³ãã®åœ¹å²ãšèšèšæå³ NLB (L4 ããŒããã©ã³ãµ) NLB 㯠TCP ã®ãŸãŸãã¹ã¹ã«ãŒãã L4 ããŒããã©ã³ãµãšããŠæ®ããŸãããçç±ã¯ãTLS çµç«¯ã Nginx ã«çœ®ãããã£ãããã§ããALB ãæå段ã«çœ®ããš L7 ã§ TLS ãçµç«¯ããããšã«ãªããmTLS æ€èšŒã®éžæè¢ã¯ ALB ã® verify/passthrough ã¢ãŒãã«éå®ãããŠããŸããŸããNLB ãåæ®µã«ã㊠TCP ã®ãŸãŸ Nginx ã«å±ããããšã§ãTLS ã®çµç«¯ãš mTLS æ€èšŒã Nginx åŽã§å®çµã§ããŸãã Nginx (TLS çµç«¯ + mTLS æ€èšŒ) Nginx ã TLS çµç«¯ã®äœçœ®ã«çœ®ããèšèšæå³ã¯æ¬¡ã®ãšããã§ãã Web App ã TLS çµç«¯ã«ããªã: Web App åŽã« TLS çµç«¯ãš mTLS æ€èšŒããžãã¯ãæããããšãèªèšŒé¢å¿ãšããžãã¹é¢å¿ãæ··ãã (ALB passthrough ã¢ãŒãã§ææãã課é¡ãšåãçç±) èªèšŒããžãã¯ããåäžã®å Žæãã«éã蟌ãã: èªèšŒã¯ Web App ããæåã§å®çµãããWeb App ã¯ããžãã¹ããžãã¯ã«éäžããã OpenResty æä»£ã® Lua ã¹ã¯ãªãããäžèŠã«ãªã: çµè·¯èå¥ (= é»å眲å) ãæšãŠãããšã§ãNginx ã®æšæºæ©èœã®ã¿ã§æ§æã§ãã Private Subnet ALB (L7 ã«ãŒãã£ã³ã° + ãã«ã¹ãã§ãã¯) ALB 㯠Internet-facing ãã Private Subnet é
眮ã«å€æŽããŸãããããã«ãããNginx ãã ALB ãžã®éä¿¡ã VPC å
ã«éããNAT Gateway ãçµç±ããªããªããŸãã ALB ãå®å
šã«å€ã㊠Nginx ãã Web App ã«çŽçµããæ¡ãããåŸãŸããããALB ãæ®ããã®ã¯æ¬¡ã®åœ¹å²åæ
ãæå³ããããã§ãã L7 ã«ãŒãã£ã³ã° (ãã¹ããŒã¹ã»ãã¹ãããŒã¹) ã ALB ã«ä»»ããNginx ã¯èªèšŒã«éäžããã ãã«ã¹ãã§ãã¯ãšãããã€æã®ããŒããŒã·ã§ã³ã ALB ã«å§ãã Nginx ã¯èªèšŒãALB ã¯é
é â é¢å¿ã®åé¢ããããã¯ãŒã¯äžã®åœ¹å²ãšããŠãæç€ºããèšèšãšããŸããã 倿Žãããããããã® æŽçãããšãæ°æ§æã¯æ¬¡ã®4ç¹ãåæã«å®çŸããŠããŸãã1 ãš 3 ã2ã€ã®èª²é¡ãžã®çŽæ¥ã®åçã2 ã¯åé¢ã®åž°çµã4 ã¯ãã®å¯ç£ç©ã§ãã ã¹ã³ãŒãããã«ã«ãå©çšãŠãŒã¶ãŒããã®ãªã¯ãšã¹ããã«éå®ã瀟å
ãªãã¬ãŒã¿ãŒã»melmo ãŠãŒã¶ãŒã¯å¥çµè·¯ãžåé¢ çµè·¯ããããã¯ãŒã¯çã«åããããããé»å眲åã«ããçµè·¯èå¥ãäžèŠã«ãOpenResty ã§ Lua ã䜿ãåæ©ããªããªããNginx åäœã§ååãªæ§æã« NAT Gateway ãçµç±ããªããªããæ§æäžã®åäžé害ç¹ãæ¶æ»
VPC å
éåéä¿¡ã«ãªã£ãããšã§ãNginx 1.29.7 ã®ããã©ã«ã upstream keep-alive ( NGINX Community Blog ) ã®æ©æµããã®ãŸãŸäº«åã§ããæ§æã« ç§»è¡ã§èŠæŠããç¹ â ãèšèšå³ã«æžãããŠããªãçµè·¯ããäžçªæã æ°æ§æãçµµã«æãããšèªäœã¯æ¯èŒçæ©ãçµãããŸãããæ¬åœã«æéãããã£ãã®ã¯ããã®åŸã®ãçŸç¶ã©ã䜿ãããŠããããã®æ£åžãã§ãã CLINICS ã«ã¯ãã«ã«ãå©çšãŠãŒã¶ãŒã§ãã£ãŠããæ°èŠãŠãŒã¶ãŒã®ã¯ã©ã€ã¢ã³ãèšŒææžçºè¡æã¯ã¯ã©ã€ã¢ã³ãèšŒææžãæããªãç¶æ
ã§ã¢ã¯ã»ã¹ã§ããå¿
èŠããããšãã仿§ããããŸãã ããã¯èšèšå³ã§ã¯ãªãããµãŒãã¹ã®äœ¿ããæ¹ãšããŠååšãã仿§ã§ãã ãã®çµè·¯ã®ååšã«æ°ã¥ãããšãã§ããã®ã¯ãQA ããŒã ã«äŸé Œãã E2E ãã¹ãã®çµæã確èªãããšãã§ããã SRE åŽã§èšèšå³ãã³ãŒãã远ããããŠããæ®µéã§ã¯æŸããªãã£ã仿§ãããã®è³ç£ãéããæ€èšŒã§è¡šã«åºãŠããããšããã®ãæ£çŽãªãšããã§ããæºäžã®èšèšå³ã ãã远ããããŠãããããªãªãŒã¹åŸã«ç»é²å°ç·ãå£ããŠãããããããŸããã ããã§å€§ããã£ãã®ã¯ãä»ããŒã ãç©ã¿äžããŠããè³ç£ããSRE ã®ç§»è¡æ€èšŒãšããŠãã®ãŸãŸæŽ»çšã§ããããšã§ããQA ããŒã ãæŽåããŠãã E2E ãã¹ãã¯ããã®ç§»è¡ã®ããã«äœããããã®ã§ã¯ãªããæ¥åžžçãªå質æ
ä¿ã®ãªãã§è²ã£ãŠãããã®ã§ãããããç§»è¡æ€èšŒã«ã転çšã§ãããšãããããŒã ããŸããã§è³ç£ã«ã¢ã¯ã»ã¹ã§ããç¶æ
ããæºäžã®èšèšã ãã§ã¯èŠããªã仿§ãç§»è¡åã«æŽãåºãã»ãŒããã£ãããã«ãªã£ãŠããŸããã å ããŠããã°ã¬æ€èšŒã倧ããªå·¥æ°ãå²ããå·¥çšã§ããããåããŠããæ¢åãµãŒãã眮ãæããããšã¯ãæ¢åã®ãã¹ãŠã®æåãä¿èšŒããå¿
èŠããããšããããšã§ããããŸããæ¬çªãšçäŸ¡ãªæ¯ãèããããããQA ããŒã ã«æ°ç°å¢ã§ã®æ©èœã®ç·ããããäŸé ŒããŠç¢ºèªããŸãããSRE åç¬ã§åçã®èгç¹ããŒãããçµã¿ç«ãŠãããšããŠãããããã®æ€èšŒã¯æç«ããŠããªãã£ããšæããŸãã æèš â ããŒã«æ¯èŒã®åã«ã圹å²ã®åè§£ããã£ã ä»åã®ç§»è¡ãéããŠæ®ã£ãæèšã¯ã次ã®2ã€ã§ãã 1. æè¡éžå®ã®åã«ã圹å²ã®åè§£ããã ãOpenResty ã®ç§»è¡ããšããŠæ€èšãå§ãããšãçŸè¡ãµãŒããæ
ã£ãŠãã圹å²ããã¹ãŠåŒãç¶ãããšãæé»ã®åæã«ãªããŸãããã®åæã®ãŸãŸã§ã¯ããLua çžåœã®æè»æ§ãæã€åŸç¶ããæ¢ãç¶ããŠããã¯ãã§ãã å®éã«ã¯ãã¢ãŒããã¯ãã£ã®åæ â åäžã® Web ãµãŒããå
šçµè·¯ãæã â ãå
ã«èŠçŽããããšã§ãåŒãç¶ãã¹ã圹å²ã¯ mTLS ã ãã«çž®ã¿ãŸããããããŸã§æ¥ãã°ãããŒã«ã®æ¯èŒã¯ã»ãšãã©èªæã§ããèšãæãããšãOpenResty ã®ä»£æ¿ãæ¢ãã®ããããããOpenResty ãèŠããªããªã£ããšããããšã§ãã ãOpenResty vs NginxããALB mTLS ã䜿ããåŠãããšããããŒã«ã®æ¯èŒã¯ãå
¥ãå£ã«ãããŸããã§ãããæ¬è³ªã¯ãäœã解決ããŠããã®ãããåãçŽãããšã§ããããã®çãã¯å€ãã®å Žåãæè¡ã¹ã¿ãã¯ã®å€åŽ â ã¢ãŒããã¯ãã£ã®åæ â ã«ãããŸãã 2. ããã§ããæåŸã®æ±ºãæã¯ã䜿ããæ¹ã 圹å²ã mTLS ã ãã«çµã£ãŠãããALB mTLS ã Nginx ãããšããéžæã¯æ®ããŸããããããæ±ºããã®ã¯æ§èœã§ãã³ã¹ãã§ããªãããæ°èŠãŠãŒã¶ãŒã®ã¯ã©ã€ã¢ã³ãèšŒææžçºè¡æã¯ãèšŒææžãªãã§ã¢ã¯ã»ã¹ã§ããå¿
èŠãããããšãã仿§ã§ããããããŠãã®ä»æ§ã¯ãã³ãŒããèšèšããã¥ã¡ã³ãã§ã¯ãªããQA ããŒã ã®å®æ©æ€èšŒããŠããŠã®ãªãã«ãããŸããã ALB mTLS ã¯åäœã§èŠãã°åªããæ©èœã§ãããCLINICS ã®ä»æ§ãšçµã¿åããããšæ¡çšã§ããŸãããæè¡éžå®ã®è¯ãæªãã¯ãéžå®å¯Ÿè±¡ã®åªå£ã§ã¯ãªããéžå®å¯Ÿè±¡ãšãµãŒãã¹ä»æ§ã®çµã¿åããã§æ±ºãŸããŸãã ã¢ãŒããã¯ãã£å·æ°ã«ãããæè¡éžå®ã¯ãæè¡çãªæ£ããã ãã§ãªããã¢ããªã±ãŒã·ã§ã³ã®ä»æ§ããŠãŒã¶ãŒãã©ã®ããã«ãµãŒãã¹ã䜿ã£ãŠããããçè§£ããäžã§è¡ãå¿
èŠãããã ç§»è¡æ€èšŒã®å·¥çšãå«ããŠãä»åã®å·æ°ã§æãæéãèŠããã®ã¯ãã®çè§£ã§ããã ãŸãšã CLINICS ã®ã¯ã©ã€ã¢ã³ãèªèšŒãµãŒãã OpenResty ãã Nginx ãžç§»è¡ããäºäŸããèæ¯ã«ããã¢ãŒããã¯ãã£èŠçŽãã®éçšãšããããŠç޹ä»ããŸããã æ§æ§æ: åäžã® Web ãµãŒããå
šçµè·¯ãæããããã¢ããªå±€ã®é»å眲åã§çµè·¯èå¥ â NAT Gateway äŸåã«ããçµè·¯æ§æãé害波åç¯å²ã®åºãã«èª²é¡ãæ±ããŠãã æ¹é: ã«ã«ãå©çšãŠãŒã¶ãŒã®çµè·¯ãåé¢ããVPC å
ã«éãã â åé¢ã®åž°çµãšããŠé»å眲åãäžèŠã«ãªããèªèšŒãµãŒãã®åœ¹å²ã¯ mTLS ã®ã¿ã«çž®å° æè¡éžå®: ALB mTLS 㯠CLINICS ã®ä»æ§ (èšŒææžãªãã§éãå°ç·ãå¿
èŠ) ãšçµã¿åããããšæ¡çšã§ãããNginx åäœãæ¡çš æèš: ããŒã«æ¯èŒã®åã«åœ¹å²ã®åè§£ããããããã§ãæåŸã®æ±ºãæã¯ãµãŒãã¹ã®äœ¿ããæ¹ã®çè§£ã«ãã£ã ä»åã¯ã«ã«ãå©çšãŠãŒã¶ãŒã®çµè·¯ããçæããŸãããã瀟å
ãªãã¬ãŒã¿ãŒã»melmo ãŠãŒã¶ãŒã®çµè·¯ã«ã€ããŠãåãèãæ¹ã§æŽçãé²ããŠããäºå®ã§ãã ãåããŠãããã®ããå€ããã®ã¯æããã®ã§ãããèšèšæã®åæãå€ãã£ããŸãŸæŸçœ®ãããšããã€ã®éã«ããåããŠããã ãã®ãã®ãã«ãªã£ãŠããŸããŸãããã®å·®åãåããäœæ¥ãããããããç¶ããŠãããããšèããŠããŸãã Weâre hiring ã¡ãã¬ãŒã§ã¯ãSRE ãã¯ãããå»çãã«ã¹ã±ã¢ã®æªæ¥ããå
±ã«åµã£ãŠãããšã³ãžãã¢ãåéããŠããŸãããèå³ããæã¡ããã ããŸãããããã²ãå¿åãã ããã â»ã«ãžã¥ã¢ã«é¢è«ã倧æè¿ã§ãïŒãåžæã®éã¯ãããã®ä»ã®é
ç®ïŒåžæèšå
¥æ¬ïŒãã«ãŠãã®æšããèšèŒãã ããã ã¡ãã¬ãŒã§åãïœæ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã§ã®åãæ¹ã人äºå¶åºŠãæ±äººæ
å ±ãªã©ãæ¡çšã«é¢ããæ
å ±ãã玹ä»ããŸãã www.medley.jp MEDLEY Summer Tech Blog Relay 7æ¥ç®ã®èšäºã¯æè€ããã§ãïŒã楜ãã¿ã«ïŒïŒ
ã¯ãããŸããŠã2026幎5æããUzabaseã§åããŠãããŸããæž
æ°Žãšç³ããŸãã èªåã®ãžã§ã€ã³ããããŒã ã§ã¯ã颿°åèšèªã§ããClojureã䜿ã£ãŠéçºããŠããŸãã颿°åèšèªã§ã®éçºããã£ããã«ã颿°åããã°ã©ãã³ã°ã®è¯ãã«ã€ããŠèå³ãæã£ãã®ã§ãä»å瀟å
çºè¡šãããŸããã 颿°åãã¶ã€ã³ãå§èšã - é人åºçäŒ ãªã£ãšãïŒé¢æ°åããã°ã©ãã³ã°ãPDFçã ïœ SEshopïœ ç¿æ³³ç€Ÿã®æ¬ã»é»åæžç±é販ãµã€ã https://www.goodreads.com/book/show/39996759-a-philosophy-of-software-design ð åŠçã®æ¹ãž | 1day ã€ã³âŠ

























