ããã«ã¡ã¯ïŒäººæãã©ãããã©ãŒã æ¬éšã§æè¡åºå ±å
Œãšã³ãžãã¢æ¡çšãããŠããéç°( @Shige0096 )ã§ãã2024 幎 11 æã«ã¡ãã¬ãŒã«ãžã§ã€ã³ããåã®ç€Ÿå€ã€ãã³ãã«åå ããŠããŸããã ä»åãã¡ãã¬ãŒã¯ 2024/11/23 ã«ä¹æ®µåäž KS ãã«ã«ãŠéå¬ãããã JSConf JP 2024 ãã«ãã¬ãã¢ã ã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããŸããã JSConf JP ã¯äžè¬ç€Ÿå£æ³äºº Japan Node.js Association ã«ãã£ãŠäŒç»ã»éå¶ãããŠãã JavaScript ã«é¢ããââ ãç¥ã â âã§ããæ¥æ¬ãšæµ·å€ã® Web éçºè
ãç¹ããç®çã§äŒç»ãããŠããŸãã2020 幎ããéå¬ãããä»å¹Žã§ 5 åç®ãä»å¹Žãããã³ããšã³ããšã³ãžãã¢ã»æ¡çšäººäºã»æè¡åºå ±æ
åœãäžå¿ã«å€ãã®åå è
ã蚪ããŸããã äŒå Žã®æ§å äŒå Žã¯ä¹æ®µåäž KS ãã«ãä»å¹Žã¯ãªã³ã©ã€ã³ã»ãªãã©ã€ã³ã®ãã€ããªããéå¬ã§ãããçŸå°ãã±ããã¯å£²ãåããŠããŸã£ãã®ã§ããªã³ã©ã€ã³é
ä¿¡ãããã®ã¯å¬ããã§ããã åœæ¥ã¯ 4 ã€ã®ãã©ãã¯ã«åãããæé垯ã«ãã£ãŠã¯ 4 ã»ãã·ã§ã³ãåæäžŠè¡ããŠããŸããã ã»ãã·ã§ã³æ°ãå€ããšãŠãå
å®ããã€ãã³ãã«ãªããŸããã äŒå Žå
¥ãå£ ã¡ãã¬ãŒããŒã¹ã®æ§å ã¡ãã¬ãŒããŒã¹ã§ã¯ãå»çäœéšããããããããã«ãçšããŠã¢ã³ã±ãŒã調æ»ããŸããã ãšã³ãžãã¢ãã¯ããå€ãã®æ¹ã«ãè¶ãããã ããŸããïŒãè¶ãããã ããçæ§ããããšãããããŸãã âš ç¹ã«å€ãã£ããå»çäœéšãããããã¯ä»¥äž 2 ã€ã â ãã£ãã·ã¥ã¬ã¹æ±ºæžãããã âš ãã£ãã·ã¥ã¬ã¹å¯Ÿå¿ãé²ãã§ããããŸã ãŸã çŸé察å¿ã®ç
é¢ãå€ã âš çŸéãåŒãèœãšãã«äžåºŠã³ã³ããã«è¡ãããšããã£ã â¡ åŸ
ã¡æéãé·ãïŒã»ãŒåç ïŒ äœïŒ âš äºçŽããã¯ããªã®ã«åŸ
ã¡æéãçºçããŠãã âš ãã€ãæ··ãã§ããã®ã§ç
é¢ã«è¡ãã®ãç²ãã å®éã« CLINICS ã¢ã㪠ã®ç»é¢ãã芧ããã ããªãã以äžã®ãããªã話ãããŸããããªã³ã©ã€ã³èšºçãåããã®ã¡ããèŠæã«åãããŠè¬ã Uber ã§é
éããããšãå¯èœã§ããããšããäœãããã£ãã·ã¥ã¬ã¹æ±ºæžãã¹ã ãŒãºã«ã§ããŠãšãŠãè¯ãïŒãªã©ã®ã声ãããã ããŸããã å€ãã®æ¹ã«ãè¶ãããã ããŸãã ð èªèº«ãéçºããŠãããããã¯ãã«èŸŒããæãã¯äººäžå ðâš ã¡ãã¬ãŒç»å£ åœç€Ÿã®é«æ©(å»çãã©ãããã©ãŒã æ¬éš)ãšåŸ·æ°ž(人æãã©ãããã©ãŒã )ãç»å£ããŸããã 髿©ã®ã»ãã·ã§ã³ã®æ§å 次ã
ã«åå è
ãå¢ããŠãããæçµçã«ã¯ 50 åè¿ãã®æ¹ã«ã芧ããã ããŸãã ð ãªã³ã©ã€ã³é
ä¿¡ãå«ãããèŠèŽããã ããçæ§ãããããšãããããŸããïŒ ç»å£ãã髿©ããäžèš ã»ãã·ã§ã³ãç»å£è³æãã芧é ããçæ§ãããããšãããããŸããïŒåœæ¥ã®ããŒã¹ãæèŠªäŒããŸã X ãããã°ãéããŠãçæ§ããå€ãã®ãææ³ãé ãæè¬ã®æ°æã¡ã§ãã£ã±ãã§ããçºè¡šã§è©³ããåãäžããããªãã£ãå
容ã«é¢ãã Q&A ã以äžã«å
¬éããŸãã ã³ã³ããŒãã³ãã®åå²ç²åºŠãããŒã å
šäœã§ã©ã®ããã«çµ±äžããŠããŸããïŒ çºè¡šå
ã§ç޹ä»ãã{é¢å¿äº}{ç¶æ³}{ããŒã¹ã³ã³ããŒãã³ãå}ã®åœåèŠåãå®ãããšã§ Button ã Dialog ã®åäœã§èªç¶ãšã³ã³ããŒãã³ããåå²ããããããªã¡ã³ã¿ã«ã¢ãã«ãç¯ããŠããŸããå ã㊠Plop ã䜿ã£ãŠãã³ãã¬ãŒãã³ãŒããçæããããšã§å®è£
ããã¬ãªãããã«ããŠããŸãã ç¶æ
管çã©ã€ãã©ãªã¯ã©ã®ããã«äœ¿ãåããŠããŸããïŒ éåæç¶æ
管ç㯠Tanstack Query ããã©ãŒã ç¶æ
管ç㯠React Hook Form ããã®ä»ã® UI ã«é¢ããç¶æ
㯠React.useState ã®ããã«äœ¿ãåããŠããŸããè€åã³ã³ããŒãã³ãéã§èŠªåé¢ä¿ãããå Žå㯠React.createContext ã䜿ã£ãŠäŸåé¢ä¿ã衚çŸããããšããããŸãããã®ãšããåã³ã³ããŒãã³ãã® Storybook ã® decorator ã« Context Provider ãèšå®ããããšã§ãè€åã³ã³ããŒãã³ãéã®é£æºãå«ãã Story ãšãã®ãã¹ããå®è£
ããŠããŸãã Redux ã¯ãµãŒããã£ãã·ã¥ãšããŠéçšããŠããŸããããçŸåšã¯ Tanstack Query ãžã®ç§»è¡ãé²ããŠããããç©æ¥µçãªå©çšã¯é¿ããŠããŸãã ð ç»å£è³æã¯ãã¡ã 執氞ã®ã»ãã·ã§ã³ã®æ§å ç»å£ãã埳氞ããäžèš Remix ã®ãã¡ã€ã«ããŒã¹ã«ãŒãã£ã³ã°ã«ã€ã㊠LT ãããŠããã ããŸãããåœæ¥ã« React Router v7 ãæ£åŒãªãªãŒã¹ããããªã©æ³å®å€ã®ããšãèµ·ããã€ã€ããçããã«ããããªè©±é¡ãšããŠåãäžããŠããã ãæãé£ãã£ãã§ãã ð ç»å£è³æã¯ãã¡ã çµããã« ã¡ãã¬ãŒã¯ãããããå»çãã«ã¹ã±ã¢é åã«ãããŠãå»çäœéšã«ã€ã³ãã¯ããäžãããããã¯ãããµãŒãã¹ã®éçºã«åãçµãã§ãããŸããåŒãç¶ãæè¡çãªãã£ã¬ã³ãžãè¡ã£ãŠãããŸãã®ã§ã泚ç®ãã ããïŒ æåŸã«ãæ¹ã㊠JSConf JP 2024 ã®éå¶ã®çæ§ãç»å£ãããã¹ããŒã«ãŒã®çæ§ãåå è
ã®çæ§ãããããšãããããŸãããæ¥å¹Žã®éå¬ã楜ãã¿ã«ããŠããŸãïŒ ãã€ãã¹ç€Ÿãšã¡ã«ã«ãªç€Ÿã®çŽ æµãªããã«ãã£ãããã ããŸãã âš ã¡ãã¬ãŒã§ã¯äžç·ã«åã仲éãåéããŠããŸãã ãã²ãã®èšäºãããŒã¹ãç»å£ãªã©ã§èå³ãæã£ãŠããã ããæ¹ã¯ãé£çµ¡ããåŸ
ã¡ããŠãããŸãïŒã«ãžã¥ã¢ã«é¢è«ã倧æè¿ã§ãã®ã§ããæ°è»œã«ãåãåãããã ããïŒ åœæ¥äŒå Žã§ãæéããã ããçæ§ãããããšãããããŸããïŒ ã¡ãã¬ãŒã¯ä»åŸãæè¡ã€ãã³ããžåºå±/ç»å£ããäºå®ã§ããä»åŸãçããã«ãäŒãããããšã楜ãã¿ã«ããŠããŸãïŒ
ããã«ã¡ã¯ïŒäººæãã©ãããã©ãŒã æ¬éšã§æè¡åºå ±å
Œãšã³ãžãã¢æ¡çšãããŠããéç°( @Shige0096 )ã§ãã2024 幎 11 æã«ã¡ãã¬ãŒã«ãžã§ã€ã³ããåã®ç€Ÿå€ã€ãã³ãã«åå ããŠããŸããã ä»åãã¡ãã¬ãŒã¯ 2024/11/23 ã«ä¹æ®µåäž KS ãã«ã«ãŠéå¬ãããã JSConf JP 2024 ãã«ãã¬ãã¢ã ã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããŸããã JSConf JP ã¯äžè¬ç€Ÿå£æ³äºº Japan Node.js Association ã«ãã£ãŠäŒç»ã»éå¶ãããŠãã JavaScript ã«é¢ããââ ãç¥ã â âã§ããæ¥æ¬ãšæµ·å€ã® Web éçºè
ãç¹ããç®çã§äŒç»ãããŠããŸãã2020 幎ããéå¬ãããä»å¹Žã§ 5 åç®ãä»å¹Žãããã³ããšã³ããšã³ãžãã¢ã»æ¡çšäººäºã»æè¡åºå ±æ
åœãäžå¿ã«å€ãã®åå è
ã蚪ããŸããã äŒå Žã®æ§å äŒå Žã¯ä¹æ®µåäž KS ãã«ãä»å¹Žã¯ãªã³ã©ã€ã³ã»ãªãã©ã€ã³ã®ãã€ããªããéå¬ã§ãããçŸå°ãã±ããã¯å£²ãåããŠããŸã£ãã®ã§ããªã³ã©ã€ã³é
ä¿¡ãããã®ã¯å¬ããã§ããã åœæ¥ã¯ 4 ã€ã®ãã©ãã¯ã«åãããæé垯ã«ãã£ãŠã¯ 4 ã»ãã·ã§ã³ãåæäžŠè¡ããŠããŸããã ã»ãã·ã§ã³æ°ãå€ããšãŠãå
å®ããã€ãã³ãã«ãªããŸããã äŒå Žå
¥ãå£ ã¡ãã¬ãŒããŒã¹ã®æ§å ã¡ãã¬ãŒããŒã¹ã§ã¯ãå»çäœéšããããããããã«ãçšããŠã¢ã³ã±ãŒã調æ»ããŸããã ãšã³ãžãã¢ãã¯ããå€ãã®æ¹ã«ãè¶ãããã ããŸããïŒãè¶ãããã ããçæ§ããããšãããããŸãã âš ç¹ã«å€ãã£ããå»çäœéšãããããã¯ä»¥äž 2 ã€ã â ãã£ãã·ã¥ã¬ã¹æ±ºæžãããã âš ãã£ãã·ã¥ã¬ã¹å¯Ÿå¿ãé²ãã§ããããŸã ãŸã çŸé察å¿ã®ç
é¢ãå€ã âš çŸéãåŒãèœãšãã«äžåºŠã³ã³ããã«è¡ãããšããã£ã â¡ åŸ
ã¡æéãé·ãïŒã»ãŒåç ïŒ äœïŒ âš äºçŽããã¯ããªã®ã«åŸ
ã¡æéãçºçããŠãã âš ãã€ãæ··ãã§ããã®ã§ç
é¢ã«è¡ãã®ãç²ãã å®éã« CLINICS ã¢ã㪠ã®ç»é¢ãã芧ããã ããªãã以äžã®ãããªã話ãããŸããããªã³ã©ã€ã³èšºçãåããã®ã¡ããèŠæã«åãããŠè¬ã Uber ã§é
éããããšãå¯èœã§ããããšããäœãããã£ãã·ã¥ã¬ã¹æ±ºæžãã¹ã ãŒãºã«ã§ããŠãšãŠãè¯ãïŒãªã©ã®ã声ãããã ããŸããã å€ãã®æ¹ã«ãè¶ãããã ããŸãã ð èªèº«ãéçºããŠãããããã¯ãã«èŸŒããæãã¯äººäžå ðâš ã¡ãã¬ãŒç»å£ åœç€Ÿã®é«æ©(å»çãã©ãããã©ãŒã æ¬éš)ãšåŸ·æ°ž(人æãã©ãããã©ãŒã )ãç»å£ããŸããã 髿©ã®ã»ãã·ã§ã³ã®æ§å 次ã
ã«åå è
ãå¢ããŠãããæçµçã«ã¯ 50 åè¿ãã®æ¹ã«ã芧ããã ããŸãã ð ãªã³ã©ã€ã³é
ä¿¡ãå«ãããèŠèŽããã ããçæ§ãããããšãããããŸããïŒ ç»å£ãã髿©ããäžèš ã»ãã·ã§ã³ãç»å£è³æãã芧é ããçæ§ãããããšãããããŸããïŒåœæ¥ã®ããŒã¹ãæèŠªäŒããŸã X ãããã°ãéããŠãçæ§ããå€ãã®ãææ³ãé ãæè¬ã®æ°æã¡ã§ãã£ã±ãã§ããçºè¡šã§è©³ããåãäžããããªãã£ãå
容ã«é¢ãã Q&A ã以äžã«å
¬éããŸãã ã³ã³ããŒãã³ãã®åå²ç²åºŠãããŒã å
šäœã§ã©ã®ããã«çµ±äžããŠããŸããïŒ çºè¡šå
ã§ç޹ä»ãã{é¢å¿äº}{ç¶æ³}{ããŒã¹ã³ã³ããŒãã³ãå}ã®åœåèŠåãå®ãããšã§ Button ã Dialog ã®åäœã§èªç¶ãšã³ã³ããŒãã³ããåå²ããããããªã¡ã³ã¿ã«ã¢ãã«ãç¯ããŠããŸããå ã㊠Plop ã䜿ã£ãŠãã³ãã¬ãŒãã³ãŒããçæããããšã§å®è£
ããã¬ãªãããã«ããŠããŸãã ç¶æ
管çã©ã€ãã©ãªã¯ã©ã®ããã«äœ¿ãåããŠããŸããïŒ éåæç¶æ
管ç㯠Tanstack Query ããã©ãŒã ç¶æ
管ç㯠React Hook Form ããã®ä»ã® UI ã«é¢ããç¶æ
㯠React.useState ã®ããã«äœ¿ãåããŠããŸããè€åã³ã³ããŒãã³ãéã§èŠªåé¢ä¿ãããå Žå㯠React.createContext ã䜿ã£ãŠäŸåé¢ä¿ã衚çŸããããšããããŸãããã®ãšããåã³ã³ããŒãã³ãã® Storybook ã® decorator ã« Context Provider ãèšå®ããããšã§ãè€åã³ã³ããŒãã³ãéã®é£æºãå«ãã Story ãšãã®ãã¹ããå®è£
ããŠããŸãã Redux ã¯ãµãŒããã£ãã·ã¥ãšããŠéçšããŠããŸããããçŸåšã¯ Tanstack Query ãžã®ç§»è¡ãé²ããŠããããç©æ¥µçãªå©çšã¯é¿ããŠããŸãã ð ç»å£è³æã¯ãã¡ã 執氞ã®ã»ãã·ã§ã³ã®æ§å ç»å£ãã埳氞ããäžèš Remix ã®ãã¡ã€ã«ããŒã¹ã«ãŒãã£ã³ã°ã«ã€ã㊠LT ãããŠããã ããŸãããåœæ¥ã« React Router v7 ãæ£åŒãªãªãŒã¹ããããªã©æ³å®å€ã®ããšãèµ·ããã€ã€ããçããã«ããããªè©±é¡ãšããŠåãäžããŠããã ãæãé£ãã£ãã§ãã ð ç»å£è³æã¯ãã¡ã çµããã« ã¡ãã¬ãŒã¯ãããããå»çãã«ã¹ã±ã¢é åã«ãããŠãå»çäœéšã«ã€ã³ãã¯ããäžãããããã¯ãããµãŒãã¹ã®éçºã«åãçµãã§ãããŸããåŒãç¶ãæè¡çãªãã£ã¬ã³ãžãè¡ã£ãŠãããŸãã®ã§ã泚ç®ãã ããïŒ æåŸã«ãæ¹ã㊠JSConf JP 2024 ã®éå¶ã®çæ§ãç»å£ãããã¹ããŒã«ãŒã®çæ§ãåå è
ã®çæ§ãããããšãããããŸãããæ¥å¹Žã®éå¬ã楜ãã¿ã«ããŠããŸãïŒ ãã€ãã¹ç€Ÿãšã¡ã«ã«ãªç€Ÿã®çŽ æµãªããã«ãã£ãããã ããŸãã âš ã¡ãã¬ãŒã§ã¯äžç·ã«åã仲éãåéããŠããŸãã ãã²ãã®èšäºãããŒã¹ãç»å£ãªã©ã§èå³ãæã£ãŠããã ããæ¹ã¯ãé£çµ¡ããåŸ
ã¡ããŠãããŸãïŒã«ãžã¥ã¢ã«é¢è«ã倧æè¿ã§ãã®ã§ããæ°è»œã«ãåãåãããã ããïŒ åœæ¥äŒå Žã§ãæéããã ããçæ§ãããããšãããããŸããïŒ ã¡ãã¬ãŒã¯ä»åŸãæè¡ã€ãã³ããžåºå±/ç»å£ããäºå®ã§ããä»åŸãçããã«ãäŒãããããšã楜ãã¿ã«ããŠããŸãïŒ
ããã«ã¡ã¯ïŒäººæãã©ãããã©ãŒã æ¬éšã§æè¡åºå ±å
Œãšã³ãžãã¢æ¡çšãããŠããéç°( @Shige0096 )ã§ãã2024 幎 11 æã«ã¡ãã¬ãŒã«ãžã§ã€ã³ããåã®ç€Ÿå€ã€ãã³ãã«åå ããŠããŸããã ä»åãã¡ãã¬ãŒã¯ 2024/11/23 ã«ä¹æ®µåäž KS ãã«ã«ãŠéå¬ãããã JSConf JP 2024 ãã«ãã¬ãã¢ã ã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããŸããã JSConf JP ã¯äžè¬ç€Ÿå£æ³äºº Japan Node.js Association ã«ãã£ãŠäŒç»ã»éå¶ãããŠãã JavaScript ã«é¢ããââ ãç¥ã â âã§ããæ¥æ¬ãšæµ·å€ã® Web éçºè
ãç¹ããç®çã§äŒç»ãããŠããŸãã2020 幎ããéå¬ãããä»å¹Žã§ 5 åç®ãä»å¹Žãããã³ããšã³ããšã³ãžãã¢ã»æ¡çšäººäºã»æè¡åºå ±æ
åœãäžå¿ã«å€ãã®åå è
ã蚪ããŸããã äŒå Žã®æ§å äŒå Žã¯ä¹æ®µåäž KS ãã«ãä»å¹Žã¯ãªã³ã©ã€ã³ã»ãªãã©ã€ã³ã®ãã€ããªããéå¬ã§ãããçŸå°ãã±ããã¯å£²ãåããŠããŸã£ãã®ã§ããªã³ã©ã€ã³é
ä¿¡ãããã®ã¯å¬ããã§ããã åœæ¥ã¯ 4 ã€ã®ãã©ãã¯ã«åãããæé垯ã«ãã£ãŠã¯ 4 ã»ãã·ã§ã³ãåæäžŠè¡ããŠããŸããã ã»ãã·ã§ã³æ°ãå€ããšãŠãå
å®ããã€ãã³ãã«ãªããŸããã äŒå Žå
¥ãå£ ã¡ãã¬ãŒããŒã¹ã®æ§å ã¡ãã¬ãŒããŒã¹ã§ã¯ãå»çäœéšããããããããã«ãçšããŠã¢ã³ã±ãŒã調æ»ããŸããã ãšã³ãžãã¢ãã¯ããå€ãã®æ¹ã«ãè¶ãããã ããŸããïŒãè¶ãããã ããçæ§ããããšãããããŸãã âš ç¹ã«å€ãã£ããå»çäœéšãããããã¯ä»¥äž 2 ã€ã â ãã£ãã·ã¥ã¬ã¹æ±ºæžãããã âš ãã£ãã·ã¥ã¬ã¹å¯Ÿå¿ãé²ãã§ããããŸã ãŸã çŸé察å¿ã®ç
é¢ãå€ã âš çŸéãåŒãèœãšãã«äžåºŠã³ã³ããã«è¡ãããšããã£ã â¡ åŸ
ã¡æéãé·ãïŒã»ãŒåç ïŒ äœïŒ âš äºçŽããã¯ããªã®ã«åŸ
ã¡æéãçºçããŠãã âš ãã€ãæ··ãã§ããã®ã§ç
é¢ã«è¡ãã®ãç²ãã å®éã« CLINICS ã¢ã㪠ã®ç»é¢ãã芧ããã ããªãã以äžã®ãããªã話ãããŸããããªã³ã©ã€ã³èšºçãåããã®ã¡ããèŠæã«åãããŠè¬ã Uber ã§é
éããããšãå¯èœã§ããããšããäœãããã£ãã·ã¥ã¬ã¹æ±ºæžãã¹ã ãŒãºã«ã§ããŠãšãŠãè¯ãïŒãªã©ã®ã声ãããã ããŸããã å€ãã®æ¹ã«ãè¶ãããã ããŸãã ð èªèº«ãéçºããŠãããããã¯ãã«èŸŒããæãã¯äººäžå ðâš ã¡ãã¬ãŒç»å£ åœç€Ÿã®é«æ©(å»çãã©ãããã©ãŒã æ¬éš)ãšåŸ·æ°ž(人æãã©ãããã©ãŒã )ãç»å£ããŸããã 髿©ã®ã»ãã·ã§ã³ã®æ§å 次ã
ã«åå è
ãå¢ããŠãããæçµçã«ã¯ 50 åè¿ãã®æ¹ã«ã芧ããã ããŸãã ð ãªã³ã©ã€ã³é
ä¿¡ãå«ãããèŠèŽããã ããçæ§ãããããšãããããŸããïŒ ç»å£ãã髿©ããäžèš ã»ãã·ã§ã³ãç»å£è³æãã芧é ããçæ§ãããããšãããããŸããïŒåœæ¥ã®ããŒã¹ãæèŠªäŒããŸã X ãããã°ãéããŠãçæ§ããå€ãã®ãææ³ãé ãæè¬ã®æ°æã¡ã§ãã£ã±ãã§ããçºè¡šã§è©³ããåãäžããããªãã£ãå
容ã«é¢ãã Q&A ã以äžã«å
¬éããŸãã ã³ã³ããŒãã³ãã®åå²ç²åºŠãããŒã å
šäœã§ã©ã®ããã«çµ±äžããŠããŸããïŒ çºè¡šå
ã§ç޹ä»ãã{é¢å¿äº}{ç¶æ³}{ããŒã¹ã³ã³ããŒãã³ãå}ã®åœåèŠåãå®ãããšã§ Button ã Dialog ã®åäœã§èªç¶ãšã³ã³ããŒãã³ããåå²ããããããªã¡ã³ã¿ã«ã¢ãã«ãç¯ããŠããŸããå ã㊠Plop ã䜿ã£ãŠãã³ãã¬ãŒãã³ãŒããçæããããšã§å®è£
ããã¬ãªãããã«ããŠããŸãã ç¶æ
管çã©ã€ãã©ãªã¯ã©ã®ããã«äœ¿ãåããŠããŸããïŒ éåæç¶æ
管ç㯠Tanstack Query ããã©ãŒã ç¶æ
管ç㯠React Hook Form ããã®ä»ã® UI ã«é¢ããç¶æ
㯠React.useState ã®ããã«äœ¿ãåããŠããŸããè€åã³ã³ããŒãã³ãéã§èŠªåé¢ä¿ãããå Žå㯠React.createContext ã䜿ã£ãŠäŸåé¢ä¿ã衚çŸããããšããããŸãããã®ãšããåã³ã³ããŒãã³ãã® Storybook ã® decorator ã« Context Provider ãèšå®ããããšã§ãè€åã³ã³ããŒãã³ãéã®é£æºãå«ãã Story ãšãã®ãã¹ããå®è£
ããŠããŸãã Redux ã¯ãµãŒããã£ãã·ã¥ãšããŠéçšããŠããŸããããçŸåšã¯ Tanstack Query ãžã®ç§»è¡ãé²ããŠããããç©æ¥µçãªå©çšã¯é¿ããŠããŸãã ð ç»å£è³æã¯ãã¡ã 執氞ã®ã»ãã·ã§ã³ã®æ§å ç»å£ãã埳氞ããäžèš Remix ã®ãã¡ã€ã«ããŒã¹ã«ãŒãã£ã³ã°ã«ã€ã㊠LT ãããŠããã ããŸãããåœæ¥ã« React Router v7 ãæ£åŒãªãªãŒã¹ããããªã©æ³å®å€ã®ããšãèµ·ããã€ã€ããçããã«ããããªè©±é¡ãšããŠåãäžããŠããã ãæãé£ãã£ãã§ãã ð ç»å£è³æã¯ãã¡ã çµããã« ã¡ãã¬ãŒã¯ãããããå»çãã«ã¹ã±ã¢é åã«ãããŠãå»çäœéšã«ã€ã³ãã¯ããäžãããããã¯ãããµãŒãã¹ã®éçºã«åãçµãã§ãããŸããåŒãç¶ãæè¡çãªãã£ã¬ã³ãžãè¡ã£ãŠãããŸãã®ã§ã泚ç®ãã ããïŒ æåŸã«ãæ¹ã㊠JSConf JP 2024 ã®éå¶ã®çæ§ãç»å£ãããã¹ããŒã«ãŒã®çæ§ãåå è
ã®çæ§ãããããšãããããŸãããæ¥å¹Žã®éå¬ã楜ãã¿ã«ããŠããŸãïŒ ãã€ãã¹ç€Ÿãšã¡ã«ã«ãªç€Ÿã®çŽ æµãªããã«ãã£ãããã ããŸãã âš ã¡ãã¬ãŒã§ã¯äžç·ã«åã仲éãåéããŠããŸãã ãã²ãã®èšäºãããŒã¹ãç»å£ãªã©ã§èå³ãæã£ãŠããã ããæ¹ã¯ãé£çµ¡ããåŸ
ã¡ããŠãããŸãïŒã«ãžã¥ã¢ã«é¢è«ã倧æè¿ã§ãã®ã§ããæ°è»œã«ãåãåãããã ããïŒ åœæ¥äŒå Žã§ãæéããã ããçæ§ãããããšãããããŸããïŒ ã¡ãã¬ãŒã¯ä»åŸãæè¡ã€ãã³ããžåºå±/ç»å£ããäºå®ã§ããä»åŸãçããã«ãäŒãããããšã楜ãã¿ã«ããŠããŸãïŒ
ãã¡ãã®èšäºã¯ MedleyïŒã¡ãã¬ãŒïŒ Advent Calendar 2024 ã®3æ¥ç®ã®èšäºã§ãã Who are you? ã¡ãã¬ãŒã§äž»ã«SRE掻åãè¡ã£ãŠãã人æãã©ãããã©ãŒã æ¬éš 第åéçºã°ã«ãŒãã®çäºã§ãã æåã«ç°¡åã«FAQ圢åŒã§èªå·±ç޹ä»ãããŠããã ãããšæããŸãã ïŒæšæ¥ã¯äœãé£ã¹ãŸãããïŒ ïŒ éººç³»ãã¡ã¹ãããŒãã§ã¯äžçªå¥œããªå°è«žãã°ã ïŒå¥œããªæ¬ã¯äœã§ããïŒ ïŒ æ³äºæ£ããã®èªäŒæžãäžå乿ãã¯å¿ã«æ®ã£ãŠããŸãã ïŒéã³ã«è¡ããªãã©ãã«è¡ããŸããïŒ ïŒ ã¢ãŠããã¢ã奜ããªã®ã§ãã£ã³ããªã©ã ä»åã¯å©çšããŠããAWSç°å¢ã« IAM Identity Center ãå°å
¥ãã話ããããŠããã ãããšæããŸãã ã»ãã¥ãªãã£ãšç®¡çã³ã¹ãã®å€©ç§€ ã¡ãã¬ãŒã§ã¯ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã¯å³éã«ç®¡çãããå¹³æã§å€éšããŒã«ã«ä¿åãããããšã¯ãããŸãããAWSã®IAMãŠãŒã¶ã®ã¢ã¯ã»ã¹ããŒã«é¢ããŠãåãã§ãã ãã ãããã§ãå¿é
ã«ãªãã®ã¯ PCã®äžã«å¹³æã§æ®ãæ
å ± ãPCãå³éã«ç®¡çãããŠããã®ã§ããããæŒæŽ©ãããã®ã§ã¯ãããŸããããããã§ãå¯èœæ§ã¯ãŒãã§ã¯ãããŸããã äžæã¯AssumeRoleã䜿ãããšã§æŒæŽ©æã®ãªã¹ã¯ãæžãããŸããã æåã®èªèšŒã§ã¯äœãã§ããªãåŒ±ãæš©éã§ãAssumeRoleã§æš©éã®åŒ·ãããŒã«ã«å€èº«ããæ¹åŒãå°å
¥ããŸããã ãã®è©±ãèããŠãè
ã«å
垯ãå·»ããåŠçæã®å°å¹Žã倩çã®ãé¢ã被ãããããšãæµ®ããã ããªãã¯AWSããããããŒã銎æã¿ã®ãã®ããã°ã®æ¬èãªèªè
ã§ãã AssumeRoleæŠèŠå³ ããã§ããŸã 課é¡ã¯ãããŸããã IAMãŠãŒã¶ãšAssumeRoleã®ç®¡çã³ã¹ã ã§ãã AWSã¢ã«ãŠã³ãã¯ãµãŒãã¹ããšã«è€æ°ååšããããã«æ¬çªç°å¢ãã¹ããŒãžã³ã°ç°å¢ã§ãåããŠãããŸããããããã®AWSã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããç°å¢ãéçºã¡ã³ããŒã«æäŸããå¿
èŠããããŸãã AssumeRoleã¯å€èº«ããå
ãšå€èº«ããå
ã®èšå®ãããå¿
èŠããããAWSã¢ã«ãŠã³ããè·šãå Žåã¯ããããã®AWSã¢ã«ãŠã³ãã«èšå®ãå¿
èŠã«ãªããŸããéçºã¡ã³ããŒã®ç°åããã床ã«ãã¡ããã¡ãã®AWSã¢ã«ãŠã³ãã«ãã®èšå®ãããããšããé¢åãªãã€ã«ã«ãªã£ãŠããŸããã ã»ãã¥ã¢ãªç°å¢ãç¶æãããŸãŸã管çã³ã¹ãããªãã¹ãäžãããã ããã§å°å
¥ã決ããã®ã IAM Identity Center ã§ããã IAM Identity Centerã®å°å
¥æ€èš çµè«ãå
ã«ç³ãäžããŸããšãIAM Identity Centerãå°å
¥ããããšã§ ã»ãã¥ã¢ãªç°å¢ãç¶æããªãããã€ã«ã®åæžãå®çŸããããšãã§ããŸãã ã å®ç§ã§ç©¶æ¥µãšããã»ã©ã§ã¯ãããŸãããã誰ããç®ã奪ãããŠããçæ³ã®ç°å¢ã«äžæ©è¿ã¥ãããšããŸããã IAM Identity Centerãããã«ç®¡çããAWS Control Towerã®å°å
¥ãæ€èšããŸããããæ¢ã«ããç°å¢ã«å°å
¥ããããšã®äºæãã¬å¶éããããããšã®ãªã¹ã¯ããAWS Configãå€çšãããããšã§æãã¬ã³ã¹ãå¢ãçºçãããšã®æ
å ±ããããä»åã¯èŠéãããšã«ããŸããã IAM Identity Centerãšã¯ å
㯠AWS Single Sign-On ïŒAWS SSOïŒ ãšãããµãŒãã¹åã§ããã ããã¯IAMãŠãŒã¶ãšã¯å
šãå¥ç©ã®ãŠãŒã¶ïŒãããSSOãŠãŒã¶ãšããŸãïŒãäœæããSSOãŠãŒã¶ãåAWSã¢ã«ãŠã³ãã®åIAMããŒã«ãæã£ããŠãŒã¶ã«å€èº«ããããšãã§ããæ©èœã§ãã IAM Identity CenteræŠèŠå³ IAM Identity Centerãå°å
¥ããæ±ºãæ SSOãŠãŒã¶ãšæš©éã®ç®¡çã¯äžã€ã®AWSã¢ã«ãŠã³ãã®IAM Identity Centerã§ç®¡çããããšãã§ããŸãã ããã¯AWS Organizationsã®æ©èœã®äžã«ä¹ãæ©èœã§ããã幞ãå
ã
ãããå°å
¥ããŠããããšã§ãããã«çµã¿èŸŒãããšãã§ããŸããïŒã¡ãªã¿ã«çŸåšã¯IdPãèšå®ããããšã§AWS OrganizationsããªããŠããã®æ©èœã䜿ãããšãã§ããŸãïŒã ã€ãŸãã è€æ°ã®AWSã¢ã«ãŠã³ãã®è€æ°ã®ãŠãŒã¶ã®è€æ°ã®ããŒã«ãäžã€ã®IAM Identity Centerã§å
šãŠç®¡çããããšãã§ããã®ã§ã ã ã§ã¯ãåAWSã¢ã«ãŠã³ãã§æ¢ã«äœæããŠããŸã£ãIAMããªã·ãŒããIAM Identity Centerã§åãå
容ã§äœãçŽããªããšãããªãããšãããšãããªããšããªããã«ã¹ã¿ã ããŒã«ãšããèšå®ã§ãIAMããªã·ãŒåã ãå®çŸ©ããããšã§æ¢åã®IAMããªã·ãŒããã®ãŸãŸæŽ»ããããšãã§ããŸãã ãããŠãSSOãŠãŒã¶ã¯æä¹
çãªã¢ã¯ã»ã¹ããŒãæã€ããšãã§ãããæå€§ã§12æéã®æéä»ãã¢ã¯ã»ã¹ããŒããæã€ããšãã§ããŸãããåŸã£ãŠã ä»®ã«äžãäžã¢ã¯ã»ã¹ããŒãæŒæŽ©ããŠã12æéåŸã«ã¯äœ¿ããªããªããŸã ã ãŸãã«æåŒ·ã§ç¡æµã®IAM Identity Centerã§ãã IAM Identity Centerã®å°å
¥ ããã§ã¯IAM Identity Centerã®å°å
¥ã®æµããç°¡åã«èª¬æããããŸãã äžçªæåã¯IAM Identity Centerãæå¹ã«ããããšã§ãããããã¯å²æããŠæå¹åããåŸã®æé ãèšèŒããŠãããŸãã IAM Identity Centerå
šäœå³ SSOãŠãŒã¶ã®äœæ SSOãŠãŒã¶ã¯åè¿°ããéãIAMãŠãŒã¶ãšã¯å
šãå¥ç©ãªã®ã§ãæ°ãã«å
šå¡åäœæããå¿
èŠããããŸãã æäœéå¿
èŠãªã®ã¯ååãšã¡ãŒã«ã¢ãã¬ã¹ã®ã¿ã§ãã äœæç»é¢ã«ä»»æé
ç®ã§äœæãé»è©±çªå·ãªã©ãã£ããããã®ã§ãããã·ã¹ãã çã«ã¯å
šãé¢ä¿ãªãããã§ããIAM Identity CenterãIdPãšããŠäœ¿ããšãã®ããã®èšå®ã§ããããã SSOãŠãŒã¶äœæç»é¢ SSOã°ã«ãŒãã®äœæ SSOã°ã«ãŒããšã¯ãSSOãŠãŒã¶ãšåŸè¿°ããèš±å¯ã»ããããŸãšããããã®ãã®ã§ãã æ°ããSSOãŠãŒã¶ãå¢ããå Žåã¯ã該åœã®ã°ã«ãŒãã«è¿œå ããŠãããã ãã§OKã§ãã SSOã°ã«ãŒãäœæç»é¢ èš±å¯ã»ããã®äœæ èš±å¯ã»ããã¯ãIAMããŒã«ã®çŽ ã«ãªããã®ã§ãã ããã§èšå®ããããªã·ãŒãåAWSã¢ã«ãŠã³ãã«IAMããŒã«ãIAMããªã·ãŒãšããŠããããžã§ãã³ã°ãããŸãã ããããžã§ãã³ã°å
ã®AWSã¢ã«ãŠã³ãã«æ¢ã«ããIAMããªã·ãŒã䜿ãããå Žåã¯ãã«ã¹ã¿ããŒãããŒãžãããªã·ãŒã§ãã®ååãèšå®ããã°å²ãåœãŠãããšãã§ããŸãã ååãééã£ãŠããŠååšããªãIAMããªã·ãŒãèšå®ããŠããŸã£ãå Žåã¯ãããããžã§ãã³ã°æã«ãšã©ãŒã«ãªããŸãã èš±å¯ã»ããäœæç»é¢ ããããžã§ãã³ã° âSSOãŠãŒã¶ãŸãã¯ã°ã«ãŒãâ ãš âèš±å¯ã»ããâ ãé©çšãããAWSã¢ã«ãŠã³ãã«ããããžã§ãã³ã°ããããšã§ã察象SSOãŠãŒã¶ã§è©²åœAWSã¢ã«ãŠã³ãã«ãã°ã€ã³å¯èœã«ãªããŸãã ããããžã§ãã³ã°æŠèŠå³ SSOã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ SSOãŠãŒã¶ã§ãã°ã€ã³ããAWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ã«ãAWSã¢ã«ãŠã³ããžã®ãªã³ã¯ã®äžèЧã衚瀺ãããŸãã ãã®ãªã³ã¯ããåAWSã¢ã«ãŠã³ãã«ãä»»æã®ããŒã«ã§ãã°ã€ã³ããããšãã§ããŸãã䟿å©ã§ããïŒ AWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ äžæçãªã¢ã¯ã»ã¹ããŒã¯CLIã§ãååŸã§ããŸããããã®ç»é¢ããã ã¢ã¯ã»ã¹ã㌠ã®ãªã³ã¯ãã¯ãªãã¯ãããšäžèЧç»é¢ã衚瀺ãããŸãã AWSã¢ã¯ã»ã¹ããŒã¿ã« ã¢ã¯ã»ã¹ããŒç¢ºèªç»é¢ å°å
¥åŸã«å¯Ÿå¿ããããš ãããŸã§ã®æé ã§ãããžã¡ã³ãã³ã³ãœãŒã«ã®ã§ãã°ã€ã³ã¯ã§ããããã«ãªã£ãŠããŸããããã以å€ã®ããŒã«çã§å©çšããããã«ããããšãããã§ã¯èª¬æããŸãã ~/.aws/configã®ä¿®æ£ ã¿ãŒããã«ã§AWS CLIãå©çšããããã«ããããŸã§ã¢ã¯ã»ã¹ããŒãçŽæ¥æå®ããŠããã®ããSSOãŠãŒã¶å¯Ÿå¿ã®èšè¿°ã«å€æŽããå¿
èŠããããŸãã ã¢ã¯ã»ã¹ããŒãªã©ã®ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã®èšèŒãäžèŠã«ãªãããã®å
å®¹ãæŒæŽ©ããŠããã¡ãŒãžãå°ãªãã§ãã [default] sso_session = m y-sso sso_account_id = 999999999999 sso_role_name = x xxxxxxxxxxx [sso-session my-sso] sso_start_url = h ttps://xxxxxxxxxxxx.awsapps.com/start sso_registration_scopes = s so:account:access sso_sessionã®èšå®ãå€ãaws_sdkã ãšå¯Ÿå¿ããŠããªãã£ããããã®ã§ãææ°ã®aws_sdkã䜿ãããã« mise (éçºããŒã«ç®¡ççšããŒã«)ã«èšå®ããŸããã [tools] awscli = "latest" ãã®èšå®ãããç¶æ
ã§ aws sso login ãå®è¡ãããšèªèšŒç»é¢ã®ãã©ãŠã¶ãèªåã§ç«ã¡äžããããã©ãŠã¶ã§ã®èªèšŒå®äºåŸã«ã¿ãŒããã«ã§CLIã䜿ããããã«ãªããŸãã ã¿ãŒããã«ã§sso login ãã©ãŠã¶ã§èªèšŒ éçºç°å¢ãžã®ã¢ã¯ã»ã¹ããŒã®æž¡ãæ¹ éçºç°å¢ã«ãããŠã¢ã¯ã»ã¹ããŒã®èšå®ãå¿
èŠãªç®æãããããããæ¯æ¥ããŒã¿ã«ç»é¢ããã³ããã§æŽæ°ããŠãã ãããšããã®ã¯é¢åãããã®ã§ãæ¯æ¥1åæåã«ã·ã§ã«ãå®è¡ããŠãããããã«ããŸããïŒãããé¢åãªã®ã§ãããªãã§ã©ãã«ãã§ããã°è¯ãã£ãã®ã§ããã»ã»ã»ç¡å¿µïŒã ãã®å®è¡ã«ã¯SSOã®èªèšŒæ
å ±ãã·ã§ã«å
ã®åŠçã§å©çšãããã aws2-wrap ãå©çšãã.envãã¡ã€ã«ã®æŽæ°ã«ã¯ python-dotenv ãå©çšããŸããã ãããmiseã§å®çŸ©ããããšã§ãå
šéçºã¡ã³ããŒã«ãããªã察å¿ã§ããŸããã # äžéšæç² if ! $(aws2-wrap --profile " $profile " --export ); then aws sso login --profile= " $profile " eval "$( aws2-wrap --profile " $profile " --export )" fi # äžéšæç² from dotenv import set_key def update_env_file ( env_file , key_value_pairs ): try : for key in key_value_pairs: value = key_value_pairs[key] set_key(env_file, key, value, quote_mode = 'never' ) except Exception as e: print (e) Terraform, Packerã®å¯Ÿå¿ ææ°ã®TerraformãPackerã§ã¯aws ssoã«å¯Ÿå¿ããŠããã®ã§ãssoã®profileããã®ãŸãŸäœ¿ãããšãã§ããŸãïŒAssumeRoleã«ã¯å¯Ÿå¿ããŠããªãã£ãã®ã§ãããã察å¿ãããæã¯å€§å€ã§ããã»ã»ã»ïŒã Terraformã¯ç°å¢äŸåããªããããå®è¡ç°å¢ãã³ã³ããåãã³ã³ããå
ã§å®è¡ããŠããã®ã§ãããâãã°ã€ã³æã«SSOã»ãã·ã§ã³ã®ååšæç¡ã®ç¢ºèªâ â âãªããã°SSOãã°ã€ã³â ããããããšã§ã aws sso login ã®äºåå®è¡ãæèããªããŠãè¯ãããã«ããŸããã # äžéšæç² function get_caller_identity () { set +eu for i in { 1..3} ; do command "aws sts get-caller-identity --profile $1 " if [[ $? = 0 ]]; then break else echo "Not logged in" command "aws sso login --profile $1 " fi done set -eu } ææ°ã®Packerã¯aws ssoã«å¯Ÿå¿ããŠãããšåè¿°ããŸãããããªãã ãç°å¢ã«ãã sso-session ãå¹ããã«ãšã©ãŒã«ãªãå ŽåããããŸããããã®å Žåã¯ã¬ã¬ã·ãŒãªèšè¿°æ¹æ³ã§åé¿ã§ããŸãã [profile packer] credential_process = a ws --profile default configure export-credentials --format process region = a p-northeast-1 output = j son 察å¿ããŠè¯ãã£ãã㚠管çè
ç®ç·ã§è¯ãã£ãã㚠管çè
ç®ç·ã§ã¯ãAWSã®ãŠãŒã¶ç®¡çã倧忥œã«ãªããŸããã ãããŸã§éçºã¡ã³ããŒãå¢ããéã«ã¯ãè€æ°ã®AWSã¢ã«ãŠã³ãã«å¯Ÿãããããã«ãIAMãŠãŒã¶ã®äœæãã¢ã¯ã»ã¹ããŒã®çæããããã®åŸåæãã°ã€ã³ãã¹ã¯ãŒããšã¢ã¯ã»ã¹ããŒãã¡ã³ããŒã«é
åžããªããã°ãªããªãã£ããããäœæ¥ã倧åç
©éã§ããã IAM Identity Centerå°å
¥åŸã¯ã 1ã€ã®AWSã¢ã«ãŠã³ãã§SSOãŠãŒã¶ãäœæããã ãã§ã ãæåŸ
ã¡ãŒã«ãåæã«éãããŸãã ãŸããäžããŠããæš©éã®ç®¡çãæ¥œã«ãªããŸããã IAM Identity Centerã®ç»é¢ãèŠãã°ã誰ãã©ã®AWSã¢ã«ãŠã³ãã«ã©ããªæš©éãæã£ãŠãããå
šãŠããããŸãããèšå®ããã®ãããã ããªã®ã§ ãããããªAWSã¢ã«ãŠã³ããåºå
¥ãããŠç¢ºèªã»èšå®ããå¿
èŠããªããªããŸããã å©çšè
ç®ç·ã§è¯ãã£ãããš å©çšè
ç®ç·ã§ã¯ãåAWSã¢ã«ãŠã³ããžã®ãã°ã€ã³ãããŒã¿ã«ç»é¢ã®ãªã³ã¯ããè¡ãããšãã§ããã®ã§ã AWSã¢ã«ãŠã³ãããšã«ãã°ã€ã³ã®äœæ¥ãå¿
èŠãªããªã£ãã®ã楜ã§ãããåAWSã¢ã«ãŠã³ãæ¯ã«ãã°ã€ã³æ
å ±ãMFAæ
å ±ãä¿æããªããŠãè¯ããªã£ãã®ã管çãæ°æ¥œã«ãªããŸãã ã 察å¿ããŠå°ã£ãããš 12æéã®å£ SSOãŠãŒã¶ã®ã»ãã·ã§ã³æéã®äžéã12æéã®ãããæ9æã«ãã°ã€ã³ãããšå€9æã«ã»ãã·ã§ã³ãåããŠããŸããŸãããã®ããšãå¿ããŠ12æéåŸã«æ¥ã«éçºç°å¢ã§ãšã©ãŒãåºå§ããŠããªãããããããããïŒããšããŸã«é©ããããŸãïŒ12æé以äžåãããšãã»ãšãã©ãªãã®ã§ãã£ãã«ééããŸããããã ããããå¿ããŸãïŒã æ·±å€ã¡ã³ãã®éã«ãããèµ·ãããšãã©ãã«ã«ãªããŸãã®ã§ããã®éã¯äœæ¥åã«å¿
ããã°ã€ã³ãçŽãããã«ããŠããŸãã å人çã«ã¯ã»ãã·ã§ã³æéã®äžéã®æéããå°ãäžããŠæ¬²ããã§ãã å©çšã§ããªããµãŒãããŒãã£ãŒããŒã«ã®ååš AWSã«ã¢ã¯ã»ã¹ããããã®ãµãŒãããŒãã£ãŒããŒã«ã¯æ§ã
ãããŸããã AWS_ACCESS_KEY_ID ã AWS_SECRET_ACCESS_KEY ã®2é
ç®ããèšå®ã§ããªããã®ããããŸãã SSOãŠãŒã¶ã§ãã°ã€ã³ããã«ã¯ããããã«å ã AWS_SESSION_TOKEN ã®å€ãå¿
èŠã§ãããããèšå®ã§ããªãããŒã«ã¯SSOãŠãŒã¶ã§ã¯å©çšã§ããªãããšã«ãªããŸãã æè¿ã§ã¯SSOãŠãŒã¶ã§ãå©çšã§ããããã«ã¢ããã°ã¬ãŒããããŠããããŒã«ãå¢ããŠããŠããŸãã®ã§ãä»ãŸã§äœ¿ã£ãŠããããŒã«ã䜿ããªããªã£ãå Žåã¯ä»£æ¿ã®ããŒã«ã䜿ããŸãããã ãŸãšã ããã¯çµ¶å¯Ÿåã§ã¯ãªããŠãIAM Identity Centerãå°å
¥ããããšã§ããã€ã«ã®åæžããæ
å ±æŒæŽ©ãªã¹ã¯ã®åæžããäž¡æ¹å®çŸããããšãã§ããŸããã ãã¡ããç§ãã¡ã®ææŠã¯ããã§çµããã§ã¯ãªãããµãŒãã¹ã®å質ãäžãããããéçºã¡ã³ããŒãéçºã«éäžã§ããç°å¢ãäœãããã 俺ãã¡ã®æŠãã¯ãŸã å§ãŸã£ãã°ãã ãã§ãã ãããŠãææ¥12æ4æ¥ã¯ @shigerisa ãããäœãããã£ãšé¢çœãèšäºãæžããŠãããŠããããã§ãïŒã楜ãã¿ã«ïŒ Weâre hiring! ã¡ãã¬ãŒã§ã¯åçš®ãšã³ãžãã¢ãçµ¶è³åéäžã§ãïŒ ã«ãžã¥ã¢ã«é¢è«ãã€ã§ãWelcomeã§ãã®ã§ãã話ãã ãã§ãèããŠã¿ããããããç§ã®æšãã®è©±ãèããŠæ¬²ããããªã©ãªãã§ãããŸããŸããã®ã§ããæ°è»œã«ãåãåãããã ããïŒ https://www.medley.jp/jobs/
ãã¡ãã®èšäºã¯ MedleyïŒã¡ãã¬ãŒïŒ Advent Calendar 2024 ã®3æ¥ç®ã®èšäºã§ãã Who are you? ã¡ãã¬ãŒã§äž»ã«SRE掻åãè¡ã£ãŠãã人æãã©ãããã©ãŒã æ¬éš 第åéçºã°ã«ãŒãã®çäºã§ãã æåã«ç°¡åã«FAQ圢åŒã§èªå·±ç޹ä»ãããŠããã ãããšæããŸãã ïŒæšæ¥ã¯äœãé£ã¹ãŸãããïŒ ïŒ éººç³»ãã¡ã¹ãããŒãã§ã¯äžçªå¥œããªå°è«žãã°ã ïŒå¥œããªæ¬ã¯äœã§ããïŒ ïŒ æ³äºæ£ããã®èªäŒæžãäžå乿ãã¯å¿ã«æ®ã£ãŠããŸãã ïŒéã³ã«è¡ããªãã©ãã«è¡ããŸããïŒ ïŒ ã¢ãŠããã¢ã奜ããªã®ã§ãã£ã³ããªã©ã ä»åã¯å©çšããŠããAWSç°å¢ã« IAM Identity Center ãå°å
¥ãã話ããããŠããã ãããšæããŸãã ã»ãã¥ãªãã£ãšç®¡çã³ã¹ãã®å€©ç§€ ã¡ãã¬ãŒã§ã¯ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã¯å³éã«ç®¡çãããå¹³æã§å€éšããŒã«ã«ä¿åãããããšã¯ãããŸãããAWSã®IAMãŠãŒã¶ã®ã¢ã¯ã»ã¹ããŒã«é¢ããŠãåãã§ãã ãã ãããã§ãå¿é
ã«ãªãã®ã¯ PCã®äžã«å¹³æã§æ®ãæ
å ± ãPCãå³éã«ç®¡çãããŠããã®ã§ããããæŒæŽ©ãããã®ã§ã¯ãããŸããããããã§ãå¯èœæ§ã¯ãŒãã§ã¯ãããŸããã äžæã¯AssumeRoleã䜿ãããšã§æŒæŽ©æã®ãªã¹ã¯ãæžãããŸããã æåã®èªèšŒã§ã¯äœãã§ããªãåŒ±ãæš©éã§ãAssumeRoleã§æš©éã®åŒ·ãããŒã«ã«å€èº«ããæ¹åŒãå°å
¥ããŸããã ãã®è©±ãèããŠãè
ã«å
垯ãå·»ããåŠçæã®å°å¹Žã倩çã®ãé¢ã被ãããããšãæµ®ããã ããªãã¯AWSããããããŒã銎æã¿ã®ãã®ããã°ã®æ¬èãªèªè
ã§ãã AssumeRoleæŠèŠå³ ããã§ããŸã 課é¡ã¯ãããŸããã IAMãŠãŒã¶ãšAssumeRoleã®ç®¡çã³ã¹ã ã§ãã AWSã¢ã«ãŠã³ãã¯ãµãŒãã¹ããšã«è€æ°ååšããããã«æ¬çªç°å¢ãã¹ããŒãžã³ã°ç°å¢ã§ãåããŠãããŸããããããã®AWSã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããç°å¢ãéçºã¡ã³ããŒã«æäŸããå¿
èŠããããŸãã AssumeRoleã¯å€èº«ããå
ãšå€èº«ããå
ã®èšå®ãããå¿
èŠããããAWSã¢ã«ãŠã³ããè·šãå Žåã¯ããããã®AWSã¢ã«ãŠã³ãã«èšå®ãå¿
èŠã«ãªããŸããéçºã¡ã³ããŒã®ç°åããã床ã«ãã¡ããã¡ãã®AWSã¢ã«ãŠã³ãã«ãã®èšå®ãããããšããé¢åãªãã€ã«ã«ãªã£ãŠããŸããã ã»ãã¥ã¢ãªç°å¢ãç¶æãããŸãŸã管çã³ã¹ãããªãã¹ãäžãããã ããã§å°å
¥ã決ããã®ã IAM Identity Center ã§ããã IAM Identity Centerã®å°å
¥æ€èš çµè«ãå
ã«ç³ãäžããŸããšãIAM Identity Centerãå°å
¥ããããšã§ ã»ãã¥ã¢ãªç°å¢ãç¶æããªãããã€ã«ã®åæžãå®çŸããããšãã§ããŸãã ã å®ç§ã§ç©¶æ¥µãšããã»ã©ã§ã¯ãããŸãããã誰ããç®ã奪ãããŠããçæ³ã®ç°å¢ã«äžæ©è¿ã¥ãããšããŸããã IAM Identity Centerãããã«ç®¡çããAWS Control Towerã®å°å
¥ãæ€èšããŸããããæ¢ã«ããç°å¢ã«å°å
¥ããããšã®äºæãã¬å¶éããããããšã®ãªã¹ã¯ããAWS Configãå€çšãããããšã§æãã¬ã³ã¹ãå¢ãçºçãããšã®æ
å ±ããããä»åã¯èŠéãããšã«ããŸããã IAM Identity Centerãšã¯ å
㯠AWS Single Sign-On ïŒAWS SSOïŒ ãšãããµãŒãã¹åã§ããã ããã¯IAMãŠãŒã¶ãšã¯å
šãå¥ç©ã®ãŠãŒã¶ïŒãããSSOãŠãŒã¶ãšããŸãïŒãäœæããSSOãŠãŒã¶ãåAWSã¢ã«ãŠã³ãã®åIAMããŒã«ãæã£ããŠãŒã¶ã«å€èº«ããããšãã§ããæ©èœã§ãã IAM Identity CenteræŠèŠå³ IAM Identity Centerãå°å
¥ããæ±ºãæ SSOãŠãŒã¶ãšæš©éã®ç®¡çã¯äžã€ã®AWSã¢ã«ãŠã³ãã®IAM Identity Centerã§ç®¡çããããšãã§ããŸãã ããã¯AWS Organizationsã®æ©èœã®äžã«ä¹ãæ©èœã§ããã幞ãå
ã
ãããå°å
¥ããŠããããšã§ãããã«çµã¿èŸŒãããšãã§ããŸããïŒã¡ãªã¿ã«çŸåšã¯IdPãèšå®ããããšã§AWS OrganizationsããªããŠããã®æ©èœã䜿ãããšãã§ããŸãïŒã ã€ãŸãã è€æ°ã®AWSã¢ã«ãŠã³ãã®è€æ°ã®ãŠãŒã¶ã®è€æ°ã®ããŒã«ãäžã€ã®IAM Identity Centerã§å
šãŠç®¡çããããšãã§ããã®ã§ã ã ã§ã¯ãåAWSã¢ã«ãŠã³ãã§æ¢ã«äœæããŠããŸã£ãIAMããªã·ãŒããIAM Identity Centerã§åãå
容ã§äœãçŽããªããšãããªãããšãããšãããªããšããªããã«ã¹ã¿ã ããŒã«ãšããèšå®ã§ãIAMããªã·ãŒåã ãå®çŸ©ããããšã§æ¢åã®IAMããªã·ãŒããã®ãŸãŸæŽ»ããããšãã§ããŸãã ãããŠãSSOãŠãŒã¶ã¯æä¹
çãªã¢ã¯ã»ã¹ããŒãæã€ããšãã§ãããæå€§ã§12æéã®æéä»ãã¢ã¯ã»ã¹ããŒããæã€ããšãã§ããŸãããåŸã£ãŠã ä»®ã«äžãäžã¢ã¯ã»ã¹ããŒãæŒæŽ©ããŠã12æéåŸã«ã¯äœ¿ããªããªããŸã ã ãŸãã«æåŒ·ã§ç¡æµã®IAM Identity Centerã§ãã IAM Identity Centerã®å°å
¥ ããã§ã¯IAM Identity Centerã®å°å
¥ã®æµããç°¡åã«èª¬æããããŸãã äžçªæåã¯IAM Identity Centerãæå¹ã«ããããšã§ãããããã¯å²æããŠæå¹åããåŸã®æé ãèšèŒããŠãããŸãã IAM Identity Centerå
šäœå³ SSOãŠãŒã¶ã®äœæ SSOãŠãŒã¶ã¯åè¿°ããéãIAMãŠãŒã¶ãšã¯å
šãå¥ç©ãªã®ã§ãæ°ãã«å
šå¡åäœæããå¿
èŠããããŸãã æäœéå¿
èŠãªã®ã¯ååãšã¡ãŒã«ã¢ãã¬ã¹ã®ã¿ã§ãã äœæç»é¢ã«ä»»æé
ç®ã§äœæãé»è©±çªå·ãªã©ãã£ããããã®ã§ãããã·ã¹ãã çã«ã¯å
šãé¢ä¿ãªãããã§ããIAM Identity CenterãIdPãšããŠäœ¿ããšãã®ããã®èšå®ã§ããããã SSOãŠãŒã¶äœæç»é¢ SSOã°ã«ãŒãã®äœæ SSOã°ã«ãŒããšã¯ãSSOãŠãŒã¶ãšåŸè¿°ããèš±å¯ã»ããããŸãšããããã®ãã®ã§ãã æ°ããSSOãŠãŒã¶ãå¢ããå Žåã¯ã該åœã®ã°ã«ãŒãã«è¿œå ããŠãããã ãã§OKã§ãã SSOã°ã«ãŒãäœæç»é¢ èš±å¯ã»ããã®äœæ èš±å¯ã»ããã¯ãIAMããŒã«ã®çŽ ã«ãªããã®ã§ãã ããã§èšå®ããããªã·ãŒãåAWSã¢ã«ãŠã³ãã«IAMããŒã«ãIAMããªã·ãŒãšããŠããããžã§ãã³ã°ãããŸãã ããããžã§ãã³ã°å
ã®AWSã¢ã«ãŠã³ãã«æ¢ã«ããIAMããªã·ãŒã䜿ãããå Žåã¯ãã«ã¹ã¿ããŒãããŒãžãããªã·ãŒã§ãã®ååãèšå®ããã°å²ãåœãŠãããšãã§ããŸãã ååãééã£ãŠããŠååšããªãIAMããªã·ãŒãèšå®ããŠããŸã£ãå Žåã¯ãããããžã§ãã³ã°æã«ãšã©ãŒã«ãªããŸãã èš±å¯ã»ããäœæç»é¢ ããããžã§ãã³ã° âSSOãŠãŒã¶ãŸãã¯ã°ã«ãŒãâ ãš âèš±å¯ã»ããâ ãé©çšãããAWSã¢ã«ãŠã³ãã«ããããžã§ãã³ã°ããããšã§ã察象SSOãŠãŒã¶ã§è©²åœAWSã¢ã«ãŠã³ãã«ãã°ã€ã³å¯èœã«ãªããŸãã ããããžã§ãã³ã°æŠèŠå³ SSOã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ SSOãŠãŒã¶ã§ãã°ã€ã³ããAWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ã«ãAWSã¢ã«ãŠã³ããžã®ãªã³ã¯ã®äžèЧã衚瀺ãããŸãã ãã®ãªã³ã¯ããåAWSã¢ã«ãŠã³ãã«ãä»»æã®ããŒã«ã§ãã°ã€ã³ããããšãã§ããŸãã䟿å©ã§ããïŒ AWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ äžæçãªã¢ã¯ã»ã¹ããŒã¯CLIã§ãååŸã§ããŸããããã®ç»é¢ããã ã¢ã¯ã»ã¹ã㌠ã®ãªã³ã¯ãã¯ãªãã¯ãããšäžèЧç»é¢ã衚瀺ãããŸãã AWSã¢ã¯ã»ã¹ããŒã¿ã« ã¢ã¯ã»ã¹ããŒç¢ºèªç»é¢ å°å
¥åŸã«å¯Ÿå¿ããããš ãããŸã§ã®æé ã§ãããžã¡ã³ãã³ã³ãœãŒã«ã®ã§ãã°ã€ã³ã¯ã§ããããã«ãªã£ãŠããŸããããã以å€ã®ããŒã«çã§å©çšããããã«ããããšãããã§ã¯èª¬æããŸãã ~/.aws/configã®ä¿®æ£ ã¿ãŒããã«ã§AWS CLIãå©çšããããã«ããããŸã§ã¢ã¯ã»ã¹ããŒãçŽæ¥æå®ããŠããã®ããSSOãŠãŒã¶å¯Ÿå¿ã®èšè¿°ã«å€æŽããå¿
èŠããããŸãã ã¢ã¯ã»ã¹ããŒãªã©ã®ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã®èšèŒãäžèŠã«ãªãããã®å
å®¹ãæŒæŽ©ããŠããã¡ãŒãžãå°ãªãã§ãã [default] sso_session = m y-sso sso_account_id = 999999999999 sso_role_name = x xxxxxxxxxxx [sso-session my-sso] sso_start_url = h ttps://xxxxxxxxxxxx.awsapps.com/start sso_registration_scopes = s so:account:access sso_sessionã®èšå®ãå€ãaws_sdkã ãšå¯Ÿå¿ããŠããªãã£ããããã®ã§ãææ°ã®aws_sdkã䜿ãããã« mise (éçºããŒã«ç®¡ççšããŒã«)ã«èšå®ããŸããã [tools] awscli = "latest" ãã®èšå®ãããç¶æ
ã§ aws sso login ãå®è¡ãããšèªèšŒç»é¢ã®ãã©ãŠã¶ãèªåã§ç«ã¡äžããããã©ãŠã¶ã§ã®èªèšŒå®äºåŸã«ã¿ãŒããã«ã§CLIã䜿ããããã«ãªããŸãã ã¿ãŒããã«ã§sso login ãã©ãŠã¶ã§èªèšŒ éçºç°å¢ãžã®ã¢ã¯ã»ã¹ããŒã®æž¡ãæ¹ éçºç°å¢ã«ãããŠã¢ã¯ã»ã¹ããŒã®èšå®ãå¿
èŠãªç®æãããããããæ¯æ¥ããŒã¿ã«ç»é¢ããã³ããã§æŽæ°ããŠãã ãããšããã®ã¯é¢åãããã®ã§ãæ¯æ¥1åæåã«ã·ã§ã«ãå®è¡ããŠãããããã«ããŸããïŒãããé¢åãªã®ã§ãããªãã§ã©ãã«ãã§ããã°è¯ãã£ãã®ã§ããã»ã»ã»ç¡å¿µïŒã ãã®å®è¡ã«ã¯SSOã®èªèšŒæ
å ±ãã·ã§ã«å
ã®åŠçã§å©çšãããã aws2-wrap ãå©çšãã.envãã¡ã€ã«ã®æŽæ°ã«ã¯ python-dotenv ãå©çšããŸããã ãããmiseã§å®çŸ©ããããšã§ãå
šéçºã¡ã³ããŒã«ãããªã察å¿ã§ããŸããã # äžéšæç² if ! $(aws2-wrap --profile " $profile " --export ); then aws sso login --profile= " $profile " eval "$( aws2-wrap --profile " $profile " --export )" fi # äžéšæç² from dotenv import set_key def update_env_file ( env_file , key_value_pairs ): try : for key in key_value_pairs: value = key_value_pairs[key] set_key(env_file, key, value, quote_mode = 'never' ) except Exception as e: print (e) Terraform, Packerã®å¯Ÿå¿ ææ°ã®TerraformãPackerã§ã¯aws ssoã«å¯Ÿå¿ããŠããã®ã§ãssoã®profileããã®ãŸãŸäœ¿ãããšãã§ããŸãïŒAssumeRoleã«ã¯å¯Ÿå¿ããŠããªãã£ãã®ã§ãããã察å¿ãããæã¯å€§å€ã§ããã»ã»ã»ïŒã Terraformã¯ç°å¢äŸåããªããããå®è¡ç°å¢ãã³ã³ããåãã³ã³ããå
ã§å®è¡ããŠããã®ã§ãããâãã°ã€ã³æã«SSOã»ãã·ã§ã³ã®ååšæç¡ã®ç¢ºèªâ â âãªããã°SSOãã°ã€ã³â ããããããšã§ã aws sso login ã®äºåå®è¡ãæèããªããŠãè¯ãããã«ããŸããã # äžéšæç² function get_caller_identity () { set +eu for i in { 1..3} ; do command "aws sts get-caller-identity --profile $1 " if [[ $? = 0 ]]; then break else echo "Not logged in" command "aws sso login --profile $1 " fi done set -eu } ææ°ã®Packerã¯aws ssoã«å¯Ÿå¿ããŠãããšåè¿°ããŸãããããªãã ãç°å¢ã«ãã sso-session ãå¹ããã«ãšã©ãŒã«ãªãå ŽåããããŸããããã®å Žåã¯ã¬ã¬ã·ãŒãªèšè¿°æ¹æ³ã§åé¿ã§ããŸãã [profile packer] credential_process = a ws --profile default configure export-credentials --format process region = a p-northeast-1 output = j son 察å¿ããŠè¯ãã£ãã㚠管çè
ç®ç·ã§è¯ãã£ãã㚠管çè
ç®ç·ã§ã¯ãAWSã®ãŠãŒã¶ç®¡çã倧忥œã«ãªããŸããã ãããŸã§éçºã¡ã³ããŒãå¢ããéã«ã¯ãè€æ°ã®AWSã¢ã«ãŠã³ãã«å¯Ÿãããããã«ãIAMãŠãŒã¶ã®äœæãã¢ã¯ã»ã¹ããŒã®çæããããã®åŸåæãã°ã€ã³ãã¹ã¯ãŒããšã¢ã¯ã»ã¹ããŒãã¡ã³ããŒã«é
åžããªããã°ãªããªãã£ããããäœæ¥ã倧åç
©éã§ããã IAM Identity Centerå°å
¥åŸã¯ã 1ã€ã®AWSã¢ã«ãŠã³ãã§SSOãŠãŒã¶ãäœæããã ãã§ã ãæåŸ
ã¡ãŒã«ãåæã«éãããŸãã ãŸããäžããŠããæš©éã®ç®¡çãæ¥œã«ãªããŸããã IAM Identity Centerã®ç»é¢ãèŠãã°ã誰ãã©ã®AWSã¢ã«ãŠã³ãã«ã©ããªæš©éãæã£ãŠãããå
šãŠããããŸãããèšå®ããã®ãããã ããªã®ã§ ãããããªAWSã¢ã«ãŠã³ããåºå
¥ãããŠç¢ºèªã»èšå®ããå¿
èŠããªããªããŸããã å©çšè
ç®ç·ã§è¯ãã£ãããš å©çšè
ç®ç·ã§ã¯ãåAWSã¢ã«ãŠã³ããžã®ãã°ã€ã³ãããŒã¿ã«ç»é¢ã®ãªã³ã¯ããè¡ãããšãã§ããã®ã§ã AWSã¢ã«ãŠã³ãããšã«ãã°ã€ã³ã®äœæ¥ãå¿
èŠãªããªã£ãã®ã楜ã§ãããåAWSã¢ã«ãŠã³ãæ¯ã«ãã°ã€ã³æ
å ±ãMFAæ
å ±ãä¿æããªããŠãè¯ããªã£ãã®ã管çãæ°æ¥œã«ãªããŸãã ã 察å¿ããŠå°ã£ãããš 12æéã®å£ SSOãŠãŒã¶ã®ã»ãã·ã§ã³æéã®äžéã12æéã®ãããæ9æã«ãã°ã€ã³ãããšå€9æã«ã»ãã·ã§ã³ãåããŠããŸããŸãããã®ããšãå¿ããŠ12æéåŸã«æ¥ã«éçºç°å¢ã§ãšã©ãŒãåºå§ããŠããªãããããããããïŒããšããŸã«é©ããããŸãïŒ12æé以äžåãããšãã»ãšãã©ãªãã®ã§ãã£ãã«ééããŸããããã ããããå¿ããŸãïŒã æ·±å€ã¡ã³ãã®éã«ãããèµ·ãããšãã©ãã«ã«ãªããŸãã®ã§ããã®éã¯äœæ¥åã«å¿
ããã°ã€ã³ãçŽãããã«ããŠããŸãã å人çã«ã¯ã»ãã·ã§ã³æéã®äžéã®æéããå°ãäžããŠæ¬²ããã§ãã å©çšã§ããªããµãŒãããŒãã£ãŒããŒã«ã®ååš AWSã«ã¢ã¯ã»ã¹ããããã®ãµãŒãããŒãã£ãŒããŒã«ã¯æ§ã
ãããŸããã AWS_ACCESS_KEY_ID ã AWS_SECRET_ACCESS_KEY ã®2é
ç®ããèšå®ã§ããªããã®ããããŸãã SSOãŠãŒã¶ã§ãã°ã€ã³ããã«ã¯ããããã«å ã AWS_SESSION_TOKEN ã®å€ãå¿
èŠã§ãããããèšå®ã§ããªãããŒã«ã¯SSOãŠãŒã¶ã§ã¯å©çšã§ããªãããšã«ãªããŸãã æè¿ã§ã¯SSOãŠãŒã¶ã§ãå©çšã§ããããã«ã¢ããã°ã¬ãŒããããŠããããŒã«ãå¢ããŠããŠããŸãã®ã§ãä»ãŸã§äœ¿ã£ãŠããããŒã«ã䜿ããªããªã£ãå Žåã¯ä»£æ¿ã®ããŒã«ã䜿ããŸãããã ãŸãšã ããã¯çµ¶å¯Ÿåã§ã¯ãªããŠãIAM Identity Centerãå°å
¥ããããšã§ããã€ã«ã®åæžããæ
å ±æŒæŽ©ãªã¹ã¯ã®åæžããäž¡æ¹å®çŸããããšãã§ããŸããã ãã¡ããç§ãã¡ã®ææŠã¯ããã§çµããã§ã¯ãªãããµãŒãã¹ã®å質ãäžãããããéçºã¡ã³ããŒãéçºã«éäžã§ããç°å¢ãäœãããã 俺ãã¡ã®æŠãã¯ãŸã å§ãŸã£ãã°ãã ãã§ãã ãããŠãææ¥12æ4æ¥ã¯ @shigerisa ãããäœãããã£ãšé¢çœãèšäºãæžããŠãããŠããããã§ãïŒã楜ãã¿ã«ïŒ Weâre hiring! ã¡ãã¬ãŒã§ã¯åçš®ãšã³ãžãã¢ãçµ¶è³åéäžã§ãïŒ ã«ãžã¥ã¢ã«é¢è«ãã€ã§ãWelcomeã§ãã®ã§ãã話ãã ãã§ãèããŠã¿ããããããç§ã®æšãã®è©±ãèããŠæ¬²ããããªã©ãªãã§ãããŸããŸããã®ã§ããæ°è»œã«ãåãåãããã ããïŒ åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ãã¡ãã®èšäºã¯ MedleyïŒã¡ãã¬ãŒïŒ Advent Calendar 2024 ã®3æ¥ç®ã®èšäºã§ãã Who are you? ã¡ãã¬ãŒã§äž»ã«SRE掻åãè¡ã£ãŠãã人æãã©ãããã©ãŒã æ¬éš 第åéçºã°ã«ãŒãã®çäºã§ãã æåã«ç°¡åã«FAQ圢åŒã§èªå·±ç޹ä»ãããŠããã ãããšæããŸãã ïŒæšæ¥ã¯äœãé£ã¹ãŸãããïŒ ïŒ éººç³»ãã¡ã¹ãããŒãã§ã¯äžçªå¥œããªå°è«žãã°ã ïŒå¥œããªæ¬ã¯äœã§ããïŒ ïŒ æ³äºæ£ããã®èªäŒæžãäžå乿ãã¯å¿ã«æ®ã£ãŠããŸãã ïŒéã³ã«è¡ããªãã©ãã«è¡ããŸããïŒ ïŒ ã¢ãŠããã¢ã奜ããªã®ã§ãã£ã³ããªã©ã ä»åã¯å©çšããŠããAWSç°å¢ã« IAM Identity Center ãå°å
¥ãã話ããããŠããã ãããšæããŸãã ã»ãã¥ãªãã£ãšç®¡çã³ã¹ãã®å€©ç§€ ã¡ãã¬ãŒã§ã¯ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã¯å³éã«ç®¡çãããå¹³æã§å€éšããŒã«ã«ä¿åãããããšã¯ãããŸãããAWSã®IAMãŠãŒã¶ã®ã¢ã¯ã»ã¹ããŒã«é¢ããŠãåãã§ãã ãã ãããã§ãå¿é
ã«ãªãã®ã¯ PCã®äžã«å¹³æã§æ®ãæ
å ± ãPCãå³éã«ç®¡çãããŠããã®ã§ããããæŒæŽ©ãããã®ã§ã¯ãããŸããããããã§ãå¯èœæ§ã¯ãŒãã§ã¯ãããŸããã äžæã¯AssumeRoleã䜿ãããšã§æŒæŽ©æã®ãªã¹ã¯ãæžãããŸããã æåã®èªèšŒã§ã¯äœãã§ããªãåŒ±ãæš©éã§ãAssumeRoleã§æš©éã®åŒ·ãããŒã«ã«å€èº«ããæ¹åŒãå°å
¥ããŸããã ãã®è©±ãèããŠãè
ã«å
垯ãå·»ããåŠçæã®å°å¹Žã倩çã®ãé¢ã被ãããããšãæµ®ããã ããªãã¯AWSããããããŒã銎æã¿ã®ãã®ããã°ã®æ¬èãªèªè
ã§ãã AssumeRoleæŠèŠå³ ããã§ããŸã 課é¡ã¯ãããŸããã IAMãŠãŒã¶ãšAssumeRoleã®ç®¡çã³ã¹ã ã§ãã AWSã¢ã«ãŠã³ãã¯ãµãŒãã¹ããšã«è€æ°ååšããããã«æ¬çªç°å¢ãã¹ããŒãžã³ã°ç°å¢ã§ãåããŠãããŸããããããã®AWSã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããç°å¢ãéçºã¡ã³ããŒã«æäŸããå¿
èŠããããŸãã AssumeRoleã¯å€èº«ããå
ãšå€èº«ããå
ã®èšå®ãããå¿
èŠããããAWSã¢ã«ãŠã³ããè·šãå Žåã¯ããããã®AWSã¢ã«ãŠã³ãã«èšå®ãå¿
èŠã«ãªããŸããéçºã¡ã³ããŒã®ç°åããã床ã«ãã¡ããã¡ãã®AWSã¢ã«ãŠã³ãã«ãã®èšå®ãããããšããé¢åãªãã€ã«ã«ãªã£ãŠããŸããã ã»ãã¥ã¢ãªç°å¢ãç¶æãããŸãŸã管çã³ã¹ãããªãã¹ãäžãããã ããã§å°å
¥ã決ããã®ã IAM Identity Center ã§ããã IAM Identity Centerã®å°å
¥æ€èš çµè«ãå
ã«ç³ãäžããŸããšãIAM Identity Centerãå°å
¥ããããšã§ ã»ãã¥ã¢ãªç°å¢ãç¶æããªãããã€ã«ã®åæžãå®çŸããããšãã§ããŸãã ã å®ç§ã§ç©¶æ¥µãšããã»ã©ã§ã¯ãããŸãããã誰ããç®ã奪ãããŠããçæ³ã®ç°å¢ã«äžæ©è¿ã¥ãããšããŸããã IAM Identity Centerãããã«ç®¡çããAWS Control Towerã®å°å
¥ãæ€èšããŸããããæ¢ã«ããç°å¢ã«å°å
¥ããããšã®äºæãã¬å¶éããããããšã®ãªã¹ã¯ããAWS Configãå€çšãããããšã§æãã¬ã³ã¹ãå¢ãçºçãããšã®æ
å ±ããããä»åã¯èŠéãããšã«ããŸããã IAM Identity Centerãšã¯ å
㯠AWS Single Sign-On ïŒAWS SSOïŒ ãšãããµãŒãã¹åã§ããã ããã¯IAMãŠãŒã¶ãšã¯å
šãå¥ç©ã®ãŠãŒã¶ïŒãããSSOãŠãŒã¶ãšããŸãïŒãäœæããSSOãŠãŒã¶ãåAWSã¢ã«ãŠã³ãã®åIAMããŒã«ãæã£ããŠãŒã¶ã«å€èº«ããããšãã§ããæ©èœã§ãã IAM Identity CenteræŠèŠå³ IAM Identity Centerãå°å
¥ããæ±ºãæ SSOãŠãŒã¶ãšæš©éã®ç®¡çã¯äžã€ã®AWSã¢ã«ãŠã³ãã®IAM Identity Centerã§ç®¡çããããšãã§ããŸãã ããã¯AWS Organizationsã®æ©èœã®äžã«ä¹ãæ©èœã§ããã幞ãå
ã
ãããå°å
¥ããŠããããšã§ãããã«çµã¿èŸŒãããšãã§ããŸããïŒã¡ãªã¿ã«çŸåšã¯IdPãèšå®ããããšã§AWS OrganizationsããªããŠããã®æ©èœã䜿ãããšãã§ããŸãïŒã ã€ãŸãã è€æ°ã®AWSã¢ã«ãŠã³ãã®è€æ°ã®ãŠãŒã¶ã®è€æ°ã®ããŒã«ãäžã€ã®IAM Identity Centerã§å
šãŠç®¡çããããšãã§ããã®ã§ã ã ã§ã¯ãåAWSã¢ã«ãŠã³ãã§æ¢ã«äœæããŠããŸã£ãIAMããªã·ãŒããIAM Identity Centerã§åãå
容ã§äœãçŽããªããšãããªãããšãããšãããªããšããªããã«ã¹ã¿ã ããŒã«ãšããèšå®ã§ãIAMããªã·ãŒåã ãå®çŸ©ããããšã§æ¢åã®IAMããªã·ãŒããã®ãŸãŸæŽ»ããããšãã§ããŸãã ãããŠãSSOãŠãŒã¶ã¯æä¹
çãªã¢ã¯ã»ã¹ããŒãæã€ããšãã§ãããæå€§ã§12æéã®æéä»ãã¢ã¯ã»ã¹ããŒããæã€ããšãã§ããŸãããåŸã£ãŠã ä»®ã«äžãäžã¢ã¯ã»ã¹ããŒãæŒæŽ©ããŠã12æéåŸã«ã¯äœ¿ããªããªããŸã ã ãŸãã«æåŒ·ã§ç¡æµã®IAM Identity Centerã§ãã IAM Identity Centerã®å°å
¥ ããã§ã¯IAM Identity Centerã®å°å
¥ã®æµããç°¡åã«èª¬æããããŸãã äžçªæåã¯IAM Identity Centerãæå¹ã«ããããšã§ãããããã¯å²æããŠæå¹åããåŸã®æé ãèšèŒããŠãããŸãã IAM Identity Centerå
šäœå³ SSOãŠãŒã¶ã®äœæ SSOãŠãŒã¶ã¯åè¿°ããéãIAMãŠãŒã¶ãšã¯å
šãå¥ç©ãªã®ã§ãæ°ãã«å
šå¡åäœæããå¿
èŠããããŸãã æäœéå¿
èŠãªã®ã¯ååãšã¡ãŒã«ã¢ãã¬ã¹ã®ã¿ã§ãã äœæç»é¢ã«ä»»æé
ç®ã§äœæãé»è©±çªå·ãªã©ãã£ããããã®ã§ãããã·ã¹ãã çã«ã¯å
šãé¢ä¿ãªãããã§ããIAM Identity CenterãIdPãšããŠäœ¿ããšãã®ããã®èšå®ã§ããããã SSOãŠãŒã¶äœæç»é¢ SSOã°ã«ãŒãã®äœæ SSOã°ã«ãŒããšã¯ãSSOãŠãŒã¶ãšåŸè¿°ããèš±å¯ã»ããããŸãšããããã®ãã®ã§ãã æ°ããSSOãŠãŒã¶ãå¢ããå Žåã¯ã該åœã®ã°ã«ãŒãã«è¿œå ããŠãããã ãã§OKã§ãã SSOã°ã«ãŒãäœæç»é¢ èš±å¯ã»ããã®äœæ èš±å¯ã»ããã¯ãIAMããŒã«ã®çŽ ã«ãªããã®ã§ãã ããã§èšå®ããããªã·ãŒãåAWSã¢ã«ãŠã³ãã«IAMããŒã«ãIAMããªã·ãŒãšããŠããããžã§ãã³ã°ãããŸãã ããããžã§ãã³ã°å
ã®AWSã¢ã«ãŠã³ãã«æ¢ã«ããIAMããªã·ãŒã䜿ãããå Žåã¯ãã«ã¹ã¿ããŒãããŒãžãããªã·ãŒã§ãã®ååãèšå®ããã°å²ãåœãŠãããšãã§ããŸãã ååãééã£ãŠããŠååšããªãIAMããªã·ãŒãèšå®ããŠããŸã£ãå Žåã¯ãããããžã§ãã³ã°æã«ãšã©ãŒã«ãªããŸãã èš±å¯ã»ããäœæç»é¢ ããããžã§ãã³ã° âSSOãŠãŒã¶ãŸãã¯ã°ã«ãŒãâ ãš âèš±å¯ã»ããâ ãé©çšãããAWSã¢ã«ãŠã³ãã«ããããžã§ãã³ã°ããããšã§ã察象SSOãŠãŒã¶ã§è©²åœAWSã¢ã«ãŠã³ãã«ãã°ã€ã³å¯èœã«ãªããŸãã ããããžã§ãã³ã°æŠèŠå³ SSOã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ SSOãŠãŒã¶ã§ãã°ã€ã³ããAWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ã«ãAWSã¢ã«ãŠã³ããžã®ãªã³ã¯ã®äžèЧã衚瀺ãããŸãã ãã®ãªã³ã¯ããåAWSã¢ã«ãŠã³ãã«ãä»»æã®ããŒã«ã§ãã°ã€ã³ããããšãã§ããŸãã䟿å©ã§ããïŒ AWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ äžæçãªã¢ã¯ã»ã¹ããŒã¯CLIã§ãååŸã§ããŸããããã®ç»é¢ããã ã¢ã¯ã»ã¹ã㌠ã®ãªã³ã¯ãã¯ãªãã¯ãããšäžèЧç»é¢ã衚瀺ãããŸãã AWSã¢ã¯ã»ã¹ããŒã¿ã« ã¢ã¯ã»ã¹ããŒç¢ºèªç»é¢ å°å
¥åŸã«å¯Ÿå¿ããããš ãããŸã§ã®æé ã§ãããžã¡ã³ãã³ã³ãœãŒã«ã®ã§ãã°ã€ã³ã¯ã§ããããã«ãªã£ãŠããŸããããã以å€ã®ããŒã«çã§å©çšããããã«ããããšãããã§ã¯èª¬æããŸãã ~/.aws/configã®ä¿®æ£ ã¿ãŒããã«ã§AWS CLIãå©çšããããã«ããããŸã§ã¢ã¯ã»ã¹ããŒãçŽæ¥æå®ããŠããã®ããSSOãŠãŒã¶å¯Ÿå¿ã®èšè¿°ã«å€æŽããå¿
èŠããããŸãã ã¢ã¯ã»ã¹ããŒãªã©ã®ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã®èšèŒãäžèŠã«ãªãããã®å
å®¹ãæŒæŽ©ããŠããã¡ãŒãžãå°ãªãã§ãã [default] sso_session = m y-sso sso_account_id = 999999999999 sso_role_name = x xxxxxxxxxxx [sso-session my-sso] sso_start_url = h ttps://xxxxxxxxxxxx.awsapps.com/start sso_registration_scopes = s so:account:access sso_sessionã®èšå®ãå€ãaws_sdkã ãšå¯Ÿå¿ããŠããªãã£ããããã®ã§ãææ°ã®aws_sdkã䜿ãããã« mise (éçºããŒã«ç®¡ççšããŒã«)ã«èšå®ããŸããã [tools] awscli = "latest" ãã®èšå®ãããç¶æ
ã§ aws sso login ãå®è¡ãããšèªèšŒç»é¢ã®ãã©ãŠã¶ãèªåã§ç«ã¡äžããããã©ãŠã¶ã§ã®èªèšŒå®äºåŸã«ã¿ãŒããã«ã§CLIã䜿ããããã«ãªããŸãã ã¿ãŒããã«ã§sso login ãã©ãŠã¶ã§èªèšŒ éçºç°å¢ãžã®ã¢ã¯ã»ã¹ããŒã®æž¡ãæ¹ éçºç°å¢ã«ãããŠã¢ã¯ã»ã¹ããŒã®èšå®ãå¿
èŠãªç®æãããããããæ¯æ¥ããŒã¿ã«ç»é¢ããã³ããã§æŽæ°ããŠãã ãããšããã®ã¯é¢åãããã®ã§ãæ¯æ¥1åæåã«ã·ã§ã«ãå®è¡ããŠãããããã«ããŸããïŒãããé¢åãªã®ã§ãããªãã§ã©ãã«ãã§ããã°è¯ãã£ãã®ã§ããã»ã»ã»ç¡å¿µïŒã ãã®å®è¡ã«ã¯SSOã®èªèšŒæ
å ±ãã·ã§ã«å
ã®åŠçã§å©çšãããã aws2-wrap ãå©çšãã.envãã¡ã€ã«ã®æŽæ°ã«ã¯ python-dotenv ãå©çšããŸããã ãããmiseã§å®çŸ©ããããšã§ãå
šéçºã¡ã³ããŒã«ãããªã察å¿ã§ããŸããã # äžéšæç² if ! $(aws2-wrap --profile " $profile " --export ); then aws sso login --profile= " $profile " eval "$( aws2-wrap --profile " $profile " --export )" fi # äžéšæç² from dotenv import set_key def update_env_file ( env_file , key_value_pairs ): try : for key in key_value_pairs: value = key_value_pairs[key] set_key(env_file, key, value, quote_mode = 'never' ) except Exception as e: print (e) Terraform, Packerã®å¯Ÿå¿ ææ°ã®TerraformãPackerã§ã¯aws ssoã«å¯Ÿå¿ããŠããã®ã§ãssoã®profileããã®ãŸãŸäœ¿ãããšãã§ããŸãïŒAssumeRoleã«ã¯å¯Ÿå¿ããŠããªãã£ãã®ã§ãããã察å¿ãããæã¯å€§å€ã§ããã»ã»ã»ïŒã Terraformã¯ç°å¢äŸåããªããããå®è¡ç°å¢ãã³ã³ããåãã³ã³ããå
ã§å®è¡ããŠããã®ã§ãããâãã°ã€ã³æã«SSOã»ãã·ã§ã³ã®ååšæç¡ã®ç¢ºèªâ â âãªããã°SSOãã°ã€ã³â ããããããšã§ã aws sso login ã®äºåå®è¡ãæèããªããŠãè¯ãããã«ããŸããã # äžéšæç² function get_caller_identity () { set +eu for i in { 1..3} ; do command "aws sts get-caller-identity --profile $1 " if [[ $? = 0 ]]; then break else echo "Not logged in" command "aws sso login --profile $1 " fi done set -eu } ææ°ã®Packerã¯aws ssoã«å¯Ÿå¿ããŠãããšåè¿°ããŸãããããªãã ãç°å¢ã«ãã sso-session ãå¹ããã«ãšã©ãŒã«ãªãå ŽåããããŸããããã®å Žåã¯ã¬ã¬ã·ãŒãªèšè¿°æ¹æ³ã§åé¿ã§ããŸãã [profile packer] credential_process = a ws --profile default configure export-credentials --format process region = a p-northeast-1 output = j son 察å¿ããŠè¯ãã£ãã㚠管çè
ç®ç·ã§è¯ãã£ãã㚠管çè
ç®ç·ã§ã¯ãAWSã®ãŠãŒã¶ç®¡çã倧忥œã«ãªããŸããã ãããŸã§éçºã¡ã³ããŒãå¢ããéã«ã¯ãè€æ°ã®AWSã¢ã«ãŠã³ãã«å¯Ÿãããããã«ãIAMãŠãŒã¶ã®äœæãã¢ã¯ã»ã¹ããŒã®çæããããã®åŸåæãã°ã€ã³ãã¹ã¯ãŒããšã¢ã¯ã»ã¹ããŒãã¡ã³ããŒã«é
åžããªããã°ãªããªãã£ããããäœæ¥ã倧åç
©éã§ããã IAM Identity Centerå°å
¥åŸã¯ã 1ã€ã®AWSã¢ã«ãŠã³ãã§SSOãŠãŒã¶ãäœæããã ãã§ã ãæåŸ
ã¡ãŒã«ãåæã«éãããŸãã ãŸããäžããŠããæš©éã®ç®¡çãæ¥œã«ãªããŸããã IAM Identity Centerã®ç»é¢ãèŠãã°ã誰ãã©ã®AWSã¢ã«ãŠã³ãã«ã©ããªæš©éãæã£ãŠãããå
šãŠããããŸãããèšå®ããã®ãããã ããªã®ã§ ãããããªAWSã¢ã«ãŠã³ããåºå
¥ãããŠç¢ºèªã»èšå®ããå¿
èŠããªããªããŸããã å©çšè
ç®ç·ã§è¯ãã£ãããš å©çšè
ç®ç·ã§ã¯ãåAWSã¢ã«ãŠã³ããžã®ãã°ã€ã³ãããŒã¿ã«ç»é¢ã®ãªã³ã¯ããè¡ãããšãã§ããã®ã§ã AWSã¢ã«ãŠã³ãããšã«ãã°ã€ã³ã®äœæ¥ãå¿
èŠãªããªã£ãã®ã楜ã§ãããåAWSã¢ã«ãŠã³ãæ¯ã«ãã°ã€ã³æ
å ±ãMFAæ
å ±ãä¿æããªããŠãè¯ããªã£ãã®ã管çãæ°æ¥œã«ãªããŸãã ã 察å¿ããŠå°ã£ãããš 12æéã®å£ SSOãŠãŒã¶ã®ã»ãã·ã§ã³æéã®äžéã12æéã®ãããæ9æã«ãã°ã€ã³ãããšå€9æã«ã»ãã·ã§ã³ãåããŠããŸããŸãããã®ããšãå¿ããŠ12æéåŸã«æ¥ã«éçºç°å¢ã§ãšã©ãŒãåºå§ããŠããªãããããããããïŒããšããŸã«é©ããããŸãïŒ12æé以äžåãããšãã»ãšãã©ãªãã®ã§ãã£ãã«ééããŸããããã ããããå¿ããŸãïŒã æ·±å€ã¡ã³ãã®éã«ãããèµ·ãããšãã©ãã«ã«ãªããŸãã®ã§ããã®éã¯äœæ¥åã«å¿
ããã°ã€ã³ãçŽãããã«ããŠããŸãã å人çã«ã¯ã»ãã·ã§ã³æéã®äžéã®æéããå°ãäžããŠæ¬²ããã§ãã å©çšã§ããªããµãŒãããŒãã£ãŒããŒã«ã®ååš AWSã«ã¢ã¯ã»ã¹ããããã®ãµãŒãããŒãã£ãŒããŒã«ã¯æ§ã
ãããŸããã AWS_ACCESS_KEY_ID ã AWS_SECRET_ACCESS_KEY ã®2é
ç®ããèšå®ã§ããªããã®ããããŸãã SSOãŠãŒã¶ã§ãã°ã€ã³ããã«ã¯ããããã«å ã AWS_SESSION_TOKEN ã®å€ãå¿
èŠã§ãããããèšå®ã§ããªãããŒã«ã¯SSOãŠãŒã¶ã§ã¯å©çšã§ããªãããšã«ãªããŸãã æè¿ã§ã¯SSOãŠãŒã¶ã§ãå©çšã§ããããã«ã¢ããã°ã¬ãŒããããŠããããŒã«ãå¢ããŠããŠããŸãã®ã§ãä»ãŸã§äœ¿ã£ãŠããããŒã«ã䜿ããªããªã£ãå Žåã¯ä»£æ¿ã®ããŒã«ã䜿ããŸãããã ãŸãšã ããã¯çµ¶å¯Ÿåã§ã¯ãªããŠãIAM Identity Centerãå°å
¥ããããšã§ããã€ã«ã®åæžããæ
å ±æŒæŽ©ãªã¹ã¯ã®åæžããäž¡æ¹å®çŸããããšãã§ããŸããã ãã¡ããç§ãã¡ã®ææŠã¯ããã§çµããã§ã¯ãªãããµãŒãã¹ã®å質ãäžãããããéçºã¡ã³ããŒãéçºã«éäžã§ããç°å¢ãäœãããã 俺ãã¡ã®æŠãã¯ãŸã å§ãŸã£ãã°ãã ãã§ãã ãããŠãææ¥12æ4æ¥ã¯ @shigerisa ãããäœãããã£ãšé¢çœãèšäºãæžããŠãããŠããããã§ãïŒã楜ãã¿ã«ïŒ Weâre hiring! ã¡ãã¬ãŒã§ã¯åçš®ãšã³ãžãã¢ãçµ¶è³åéäžã§ãïŒ ã«ãžã¥ã¢ã«é¢è«ãã€ã§ãWelcomeã§ãã®ã§ãã話ãã ãã§ãèããŠã¿ããããããç§ã®æšãã®è©±ãèããŠæ¬²ããããªã©ãªãã§ãããŸããŸããã®ã§ããæ°è»œã«ãåãåãããã ããïŒ åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ãã¡ãã®èšäºã¯ MedleyïŒã¡ãã¬ãŒïŒ Advent Calendar 2024 ã®3æ¥ç®ã®èšäºã§ãã Who are you? ã¡ãã¬ãŒã§äž»ã«SRE掻åãè¡ã£ãŠãã人æãã©ãããã©ãŒã æ¬éš 第åéçºã°ã«ãŒãã®çäºã§ãã æåã«ç°¡åã«FAQ圢åŒã§èªå·±ç޹ä»ãããŠããã ãããšæããŸãã ïŒæšæ¥ã¯äœãé£ã¹ãŸãããïŒ ïŒ éººç³»ãã¡ã¹ãããŒãã§ã¯äžçªå¥œããªå°è«žãã°ã ïŒå¥œããªæ¬ã¯äœã§ããïŒ ïŒ æ³äºæ£ããã®èªäŒæžãäžå乿ãã¯å¿ã«æ®ã£ãŠããŸãã ïŒéã³ã«è¡ããªãã©ãã«è¡ããŸããïŒ ïŒ ã¢ãŠããã¢ã奜ããªã®ã§ãã£ã³ããªã©ã ä»åã¯å©çšããŠããAWSç°å¢ã« IAM Identity Center ãå°å
¥ãã話ããããŠããã ãããšæããŸãã ã»ãã¥ãªãã£ãšç®¡çã³ã¹ãã®å€©ç§€ ã¡ãã¬ãŒã§ã¯ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã¯å³éã«ç®¡çãããå¹³æã§å€éšããŒã«ã«ä¿åãããããšã¯ãããŸãããAWSã®IAMãŠãŒã¶ã®ã¢ã¯ã»ã¹ããŒã«é¢ããŠãåãã§ãã ãã ãããã§ãå¿é
ã«ãªãã®ã¯ PCã®äžã«å¹³æã§æ®ãæ
å ± ãPCãå³éã«ç®¡çãããŠããã®ã§ããããæŒæŽ©ãããã®ã§ã¯ãããŸããããããã§ãå¯èœæ§ã¯ãŒãã§ã¯ãããŸããã äžæã¯AssumeRoleã䜿ãããšã§æŒæŽ©æã®ãªã¹ã¯ãæžãããŸããã æåã®èªèšŒã§ã¯äœãã§ããªãåŒ±ãæš©éã§ãAssumeRoleã§æš©éã®åŒ·ãããŒã«ã«å€èº«ããæ¹åŒãå°å
¥ããŸããã ãã®è©±ãèããŠãè
ã«å
垯ãå·»ããåŠçæã®å°å¹Žã倩çã®ãé¢ã被ãããããšãæµ®ããã ããªãã¯AWSããããããŒã銎æã¿ã®ãã®ããã°ã®æ¬èãªèªè
ã§ãã AssumeRoleæŠèŠå³ ããã§ããŸã 課é¡ã¯ãããŸããã IAMãŠãŒã¶ãšAssumeRoleã®ç®¡çã³ã¹ã ã§ãã AWSã¢ã«ãŠã³ãã¯ãµãŒãã¹ããšã«è€æ°ååšããããã«æ¬çªç°å¢ãã¹ããŒãžã³ã°ç°å¢ã§ãåããŠãããŸããããããã®AWSã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããç°å¢ãéçºã¡ã³ããŒã«æäŸããå¿
èŠããããŸãã AssumeRoleã¯å€èº«ããå
ãšå€èº«ããå
ã®èšå®ãããå¿
èŠããããAWSã¢ã«ãŠã³ããè·šãå Žåã¯ããããã®AWSã¢ã«ãŠã³ãã«èšå®ãå¿
èŠã«ãªããŸããéçºã¡ã³ããŒã®ç°åããã床ã«ãã¡ããã¡ãã®AWSã¢ã«ãŠã³ãã«ãã®èšå®ãããããšããé¢åãªãã€ã«ã«ãªã£ãŠããŸããã ã»ãã¥ã¢ãªç°å¢ãç¶æãããŸãŸã管çã³ã¹ãããªãã¹ãäžãããã ããã§å°å
¥ã決ããã®ã IAM Identity Center ã§ããã IAM Identity Centerã®å°å
¥æ€èš çµè«ãå
ã«ç³ãäžããŸããšãIAM Identity Centerãå°å
¥ããããšã§ ã»ãã¥ã¢ãªç°å¢ãç¶æããªãããã€ã«ã®åæžãå®çŸããããšãã§ããŸãã ã å®ç§ã§ç©¶æ¥µãšããã»ã©ã§ã¯ãããŸãããã誰ããç®ã奪ãããŠããçæ³ã®ç°å¢ã«äžæ©è¿ã¥ãããšããŸããã IAM Identity Centerãããã«ç®¡çããAWS Control Towerã®å°å
¥ãæ€èšããŸããããæ¢ã«ããç°å¢ã«å°å
¥ããããšã®äºæãã¬å¶éããããããšã®ãªã¹ã¯ããAWS Configãå€çšãããããšã§æãã¬ã³ã¹ãå¢ãçºçãããšã®æ
å ±ããããä»åã¯èŠéãããšã«ããŸããã IAM Identity Centerãšã¯ å
㯠AWS Single Sign-On ïŒAWS SSOïŒ ãšãããµãŒãã¹åã§ããã ããã¯IAMãŠãŒã¶ãšã¯å
šãå¥ç©ã®ãŠãŒã¶ïŒãããSSOãŠãŒã¶ãšããŸãïŒãäœæããSSOãŠãŒã¶ãåAWSã¢ã«ãŠã³ãã®åIAMããŒã«ãæã£ããŠãŒã¶ã«å€èº«ããããšãã§ããæ©èœã§ãã IAM Identity CenteræŠèŠå³ IAM Identity Centerãå°å
¥ããæ±ºãæ SSOãŠãŒã¶ãšæš©éã®ç®¡çã¯äžã€ã®AWSã¢ã«ãŠã³ãã®IAM Identity Centerã§ç®¡çããããšãã§ããŸãã ããã¯AWS Organizationsã®æ©èœã®äžã«ä¹ãæ©èœã§ããã幞ãå
ã
ãããå°å
¥ããŠããããšã§ãããã«çµã¿èŸŒãããšãã§ããŸããïŒã¡ãªã¿ã«çŸåšã¯IdPãèšå®ããããšã§AWS OrganizationsããªããŠããã®æ©èœã䜿ãããšãã§ããŸãïŒã ã€ãŸãã è€æ°ã®AWSã¢ã«ãŠã³ãã®è€æ°ã®ãŠãŒã¶ã®è€æ°ã®ããŒã«ãäžã€ã®IAM Identity Centerã§å
šãŠç®¡çããããšãã§ããã®ã§ã ã ã§ã¯ãåAWSã¢ã«ãŠã³ãã§æ¢ã«äœæããŠããŸã£ãIAMããªã·ãŒããIAM Identity Centerã§åãå
容ã§äœãçŽããªããšãããªãããšãããšãããªããšããªããã«ã¹ã¿ã ããŒã«ãšããèšå®ã§ãIAMããªã·ãŒåã ãå®çŸ©ããããšã§æ¢åã®IAMããªã·ãŒããã®ãŸãŸæŽ»ããããšãã§ããŸãã ãããŠãSSOãŠãŒã¶ã¯æä¹
çãªã¢ã¯ã»ã¹ããŒãæã€ããšãã§ãããæå€§ã§12æéã®æéä»ãã¢ã¯ã»ã¹ããŒããæã€ããšãã§ããŸãããåŸã£ãŠã ä»®ã«äžãäžã¢ã¯ã»ã¹ããŒãæŒæŽ©ããŠã12æéåŸã«ã¯äœ¿ããªããªããŸã ã ãŸãã«æåŒ·ã§ç¡æµã®IAM Identity Centerã§ãã IAM Identity Centerã®å°å
¥ ããã§ã¯IAM Identity Centerã®å°å
¥ã®æµããç°¡åã«èª¬æããããŸãã äžçªæåã¯IAM Identity Centerãæå¹ã«ããããšã§ãããããã¯å²æããŠæå¹åããåŸã®æé ãèšèŒããŠãããŸãã IAM Identity Centerå
šäœå³ SSOãŠãŒã¶ã®äœæ SSOãŠãŒã¶ã¯åè¿°ããéãIAMãŠãŒã¶ãšã¯å
šãå¥ç©ãªã®ã§ãæ°ãã«å
šå¡åäœæããå¿
èŠããããŸãã æäœéå¿
èŠãªã®ã¯ååãšã¡ãŒã«ã¢ãã¬ã¹ã®ã¿ã§ãã äœæç»é¢ã«ä»»æé
ç®ã§äœæãé»è©±çªå·ãªã©ãã£ããããã®ã§ãããã·ã¹ãã çã«ã¯å
šãé¢ä¿ãªãããã§ããIAM Identity CenterãIdPãšããŠäœ¿ããšãã®ããã®èšå®ã§ããããã SSOãŠãŒã¶äœæç»é¢ SSOã°ã«ãŒãã®äœæ SSOã°ã«ãŒããšã¯ãSSOãŠãŒã¶ãšåŸè¿°ããèš±å¯ã»ããããŸãšããããã®ãã®ã§ãã æ°ããSSOãŠãŒã¶ãå¢ããå Žåã¯ã該åœã®ã°ã«ãŒãã«è¿œå ããŠãããã ãã§OKã§ãã SSOã°ã«ãŒãäœæç»é¢ èš±å¯ã»ããã®äœæ èš±å¯ã»ããã¯ãIAMããŒã«ã®çŽ ã«ãªããã®ã§ãã ããã§èšå®ããããªã·ãŒãåAWSã¢ã«ãŠã³ãã«IAMããŒã«ãIAMããªã·ãŒãšããŠããããžã§ãã³ã°ãããŸãã ããããžã§ãã³ã°å
ã®AWSã¢ã«ãŠã³ãã«æ¢ã«ããIAMããªã·ãŒã䜿ãããå Žåã¯ãã«ã¹ã¿ããŒãããŒãžãããªã·ãŒã§ãã®ååãèšå®ããã°å²ãåœãŠãããšãã§ããŸãã ååãééã£ãŠããŠååšããªãIAMããªã·ãŒãèšå®ããŠããŸã£ãå Žåã¯ãããããžã§ãã³ã°æã«ãšã©ãŒã«ãªããŸãã èš±å¯ã»ããäœæç»é¢ ããããžã§ãã³ã° âSSOãŠãŒã¶ãŸãã¯ã°ã«ãŒãâ ãš âèš±å¯ã»ããâ ãé©çšãããAWSã¢ã«ãŠã³ãã«ããããžã§ãã³ã°ããããšã§ã察象SSOãŠãŒã¶ã§è©²åœAWSã¢ã«ãŠã³ãã«ãã°ã€ã³å¯èœã«ãªããŸãã ããããžã§ãã³ã°æŠèŠå³ SSOã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ SSOãŠãŒã¶ã§ãã°ã€ã³ããAWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ã«ãAWSã¢ã«ãŠã³ããžã®ãªã³ã¯ã®äžèЧã衚瀺ãããŸãã ãã®ãªã³ã¯ããåAWSã¢ã«ãŠã³ãã«ãä»»æã®ããŒã«ã§ãã°ã€ã³ããããšãã§ããŸãã䟿å©ã§ããïŒ AWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ äžæçãªã¢ã¯ã»ã¹ããŒã¯CLIã§ãååŸã§ããŸããããã®ç»é¢ããã ã¢ã¯ã»ã¹ã㌠ã®ãªã³ã¯ãã¯ãªãã¯ãããšäžèЧç»é¢ã衚瀺ãããŸãã AWSã¢ã¯ã»ã¹ããŒã¿ã« ã¢ã¯ã»ã¹ããŒç¢ºèªç»é¢ å°å
¥åŸã«å¯Ÿå¿ããããš ãããŸã§ã®æé ã§ãããžã¡ã³ãã³ã³ãœãŒã«ã®ã§ãã°ã€ã³ã¯ã§ããããã«ãªã£ãŠããŸããããã以å€ã®ããŒã«çã§å©çšããããã«ããããšãããã§ã¯èª¬æããŸãã ~/.aws/configã®ä¿®æ£ ã¿ãŒããã«ã§AWS CLIãå©çšããããã«ããããŸã§ã¢ã¯ã»ã¹ããŒãçŽæ¥æå®ããŠããã®ããSSOãŠãŒã¶å¯Ÿå¿ã®èšè¿°ã«å€æŽããå¿
èŠããããŸãã ã¢ã¯ã»ã¹ããŒãªã©ã®ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã®èšèŒãäžèŠã«ãªãããã®å
å®¹ãæŒæŽ©ããŠããã¡ãŒãžãå°ãªãã§ãã [default] sso_session = m y-sso sso_account_id = 999999999999 sso_role_name = x xxxxxxxxxxx [sso-session my-sso] sso_start_url = h ttps://xxxxxxxxxxxx.awsapps.com/start sso_registration_scopes = s so:account:access sso_sessionã®èšå®ãå€ãaws_sdkã ãšå¯Ÿå¿ããŠããªãã£ããããã®ã§ãææ°ã®aws_sdkã䜿ãããã« mise (éçºããŒã«ç®¡ççšããŒã«)ã«èšå®ããŸããã [tools] awscli = "latest" ãã®èšå®ãããç¶æ
ã§ aws sso login ãå®è¡ãããšèªèšŒç»é¢ã®ãã©ãŠã¶ãèªåã§ç«ã¡äžããããã©ãŠã¶ã§ã®èªèšŒå®äºåŸã«ã¿ãŒããã«ã§CLIã䜿ããããã«ãªããŸãã ã¿ãŒããã«ã§sso login ãã©ãŠã¶ã§èªèšŒ éçºç°å¢ãžã®ã¢ã¯ã»ã¹ããŒã®æž¡ãæ¹ éçºç°å¢ã«ãããŠã¢ã¯ã»ã¹ããŒã®èšå®ãå¿
èŠãªç®æãããããããæ¯æ¥ããŒã¿ã«ç»é¢ããã³ããã§æŽæ°ããŠãã ãããšããã®ã¯é¢åãããã®ã§ãæ¯æ¥1åæåã«ã·ã§ã«ãå®è¡ããŠãããããã«ããŸããïŒãããé¢åãªã®ã§ãããªãã§ã©ãã«ãã§ããã°è¯ãã£ãã®ã§ããã»ã»ã»ç¡å¿µïŒã ãã®å®è¡ã«ã¯SSOã®èªèšŒæ
å ±ãã·ã§ã«å
ã®åŠçã§å©çšãããã aws2-wrap ãå©çšãã.envãã¡ã€ã«ã®æŽæ°ã«ã¯ python-dotenv ãå©çšããŸããã ãããmiseã§å®çŸ©ããããšã§ãå
šéçºã¡ã³ããŒã«ãããªã察å¿ã§ããŸããã # äžéšæç² if ! $(aws2-wrap --profile " $profile " --export ); then aws sso login --profile= " $profile " eval "$( aws2-wrap --profile " $profile " --export )" fi # äžéšæç² from dotenv import set_key def update_env_file ( env_file , key_value_pairs ): try : for key in key_value_pairs: value = key_value_pairs[key] set_key(env_file, key, value, quote_mode = 'never' ) except Exception as e: print (e) Terraform, Packerã®å¯Ÿå¿ ææ°ã®TerraformãPackerã§ã¯aws ssoã«å¯Ÿå¿ããŠããã®ã§ãssoã®profileããã®ãŸãŸäœ¿ãããšãã§ããŸãïŒAssumeRoleã«ã¯å¯Ÿå¿ããŠããªãã£ãã®ã§ãããã察å¿ãããæã¯å€§å€ã§ããã»ã»ã»ïŒã Terraformã¯ç°å¢äŸåããªããããå®è¡ç°å¢ãã³ã³ããåãã³ã³ããå
ã§å®è¡ããŠããã®ã§ãããâãã°ã€ã³æã«SSOã»ãã·ã§ã³ã®ååšæç¡ã®ç¢ºèªâ â âãªããã°SSOãã°ã€ã³â ããããããšã§ã aws sso login ã®äºåå®è¡ãæèããªããŠãè¯ãããã«ããŸããã # äžéšæç² function get_caller_identity () { set +eu for i in { 1..3} ; do command "aws sts get-caller-identity --profile $1 " if [[ $? = 0 ]]; then break else echo "Not logged in" command "aws sso login --profile $1 " fi done set -eu } ææ°ã®Packerã¯aws ssoã«å¯Ÿå¿ããŠãããšåè¿°ããŸãããããªãã ãç°å¢ã«ãã sso-session ãå¹ããã«ãšã©ãŒã«ãªãå ŽåããããŸããããã®å Žåã¯ã¬ã¬ã·ãŒãªèšè¿°æ¹æ³ã§åé¿ã§ããŸãã [profile packer] credential_process = a ws --profile default configure export-credentials --format process region = a p-northeast-1 output = j son 察å¿ããŠè¯ãã£ãã㚠管çè
ç®ç·ã§è¯ãã£ãã㚠管çè
ç®ç·ã§ã¯ãAWSã®ãŠãŒã¶ç®¡çã倧忥œã«ãªããŸããã ãããŸã§éçºã¡ã³ããŒãå¢ããéã«ã¯ãè€æ°ã®AWSã¢ã«ãŠã³ãã«å¯Ÿãããããã«ãIAMãŠãŒã¶ã®äœæãã¢ã¯ã»ã¹ããŒã®çæããããã®åŸåæãã°ã€ã³ãã¹ã¯ãŒããšã¢ã¯ã»ã¹ããŒãã¡ã³ããŒã«é
åžããªããã°ãªããªãã£ããããäœæ¥ã倧åç
©éã§ããã IAM Identity Centerå°å
¥åŸã¯ã 1ã€ã®AWSã¢ã«ãŠã³ãã§SSOãŠãŒã¶ãäœæããã ãã§ã ãæåŸ
ã¡ãŒã«ãåæã«éãããŸãã ãŸããäžããŠããæš©éã®ç®¡çãæ¥œã«ãªããŸããã IAM Identity Centerã®ç»é¢ãèŠãã°ã誰ãã©ã®AWSã¢ã«ãŠã³ãã«ã©ããªæš©éãæã£ãŠãããå
šãŠããããŸãããèšå®ããã®ãããã ããªã®ã§ ãããããªAWSã¢ã«ãŠã³ããåºå
¥ãããŠç¢ºèªã»èšå®ããå¿
èŠããªããªããŸããã å©çšè
ç®ç·ã§è¯ãã£ãããš å©çšè
ç®ç·ã§ã¯ãåAWSã¢ã«ãŠã³ããžã®ãã°ã€ã³ãããŒã¿ã«ç»é¢ã®ãªã³ã¯ããè¡ãããšãã§ããã®ã§ã AWSã¢ã«ãŠã³ãããšã«ãã°ã€ã³ã®äœæ¥ãå¿
èŠãªããªã£ãã®ã楜ã§ãããåAWSã¢ã«ãŠã³ãæ¯ã«ãã°ã€ã³æ
å ±ãMFAæ
å ±ãä¿æããªããŠãè¯ããªã£ãã®ã管çãæ°æ¥œã«ãªããŸãã ã 察å¿ããŠå°ã£ãããš 12æéã®å£ SSOãŠãŒã¶ã®ã»ãã·ã§ã³æéã®äžéã12æéã®ãããæ9æã«ãã°ã€ã³ãããšå€9æã«ã»ãã·ã§ã³ãåããŠããŸããŸãããã®ããšãå¿ããŠ12æéåŸã«æ¥ã«éçºç°å¢ã§ãšã©ãŒãåºå§ããŠããªãããããããããïŒããšããŸã«é©ããããŸãïŒ12æé以äžåãããšãã»ãšãã©ãªãã®ã§ãã£ãã«ééããŸããããã ããããå¿ããŸãïŒã æ·±å€ã¡ã³ãã®éã«ãããèµ·ãããšãã©ãã«ã«ãªããŸãã®ã§ããã®éã¯äœæ¥åã«å¿
ããã°ã€ã³ãçŽãããã«ããŠããŸãã å人çã«ã¯ã»ãã·ã§ã³æéã®äžéã®æéããå°ãäžããŠæ¬²ããã§ãã å©çšã§ããªããµãŒãããŒãã£ãŒããŒã«ã®ååš AWSã«ã¢ã¯ã»ã¹ããããã®ãµãŒãããŒãã£ãŒããŒã«ã¯æ§ã
ãããŸããã AWS_ACCESS_KEY_ID ã AWS_SECRET_ACCESS_KEY ã®2é
ç®ããèšå®ã§ããªããã®ããããŸãã SSOãŠãŒã¶ã§ãã°ã€ã³ããã«ã¯ããããã«å ã AWS_SESSION_TOKEN ã®å€ãå¿
èŠã§ãããããèšå®ã§ããªãããŒã«ã¯SSOãŠãŒã¶ã§ã¯å©çšã§ããªãããšã«ãªããŸãã æè¿ã§ã¯SSOãŠãŒã¶ã§ãå©çšã§ããããã«ã¢ããã°ã¬ãŒããããŠããããŒã«ãå¢ããŠããŠããŸãã®ã§ãä»ãŸã§äœ¿ã£ãŠããããŒã«ã䜿ããªããªã£ãå Žåã¯ä»£æ¿ã®ããŒã«ã䜿ããŸãããã ãŸãšã ããã¯çµ¶å¯Ÿåã§ã¯ãªããŠãIAM Identity Centerãå°å
¥ããããšã§ããã€ã«ã®åæžããæ
å ±æŒæŽ©ãªã¹ã¯ã®åæžããäž¡æ¹å®çŸããããšãã§ããŸããã ãã¡ããç§ãã¡ã®ææŠã¯ããã§çµããã§ã¯ãªãããµãŒãã¹ã®å質ãäžãããããéçºã¡ã³ããŒãéçºã«éäžã§ããç°å¢ãäœãããã 俺ãã¡ã®æŠãã¯ãŸã å§ãŸã£ãã°ãã ãã§ãã ãããŠãææ¥12æ4æ¥ã¯ @shigerisa ãããäœãããã£ãšé¢çœãèšäºãæžããŠãããŠããããã§ãïŒã楜ãã¿ã«ïŒ Weâre hiring! ã¡ãã¬ãŒã§ã¯åçš®ãšã³ãžãã¢ãçµ¶è³åéäžã§ãïŒ ã«ãžã¥ã¢ã«é¢è«ãã€ã§ãWelcomeã§ãã®ã§ãã話ãã ãã§ãèããŠã¿ããããããç§ã®æšãã®è©±ãèããŠæ¬²ããããªã©ãªãã§ãããŸããŸããã®ã§ããæ°è»œã«ãåãåãããã ããïŒ åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ãã¡ãã®èšäºã¯ MedleyïŒã¡ãã¬ãŒïŒ Advent Calendar 2024 ã®3æ¥ç®ã®èšäºã§ãã Who are you? ã¡ãã¬ãŒã§äž»ã«SRE掻åãè¡ã£ãŠãã人æãã©ãããã©ãŒã æ¬éš 第åéçºã°ã«ãŒãã®çäºã§ãã æåã«ç°¡åã«FAQ圢åŒã§èªå·±ç޹ä»ãããŠããã ãããšæããŸãã ïŒæšæ¥ã¯äœãé£ã¹ãŸãããïŒ ïŒ éººç³»ãã¡ã¹ãããŒãã§ã¯äžçªå¥œããªå°è«žãã°ã ïŒå¥œããªæ¬ã¯äœã§ããïŒ ïŒ æ³äºæ£ããã®èªäŒæžãäžå乿ãã¯å¿ã«æ®ã£ãŠããŸãã ïŒéã³ã«è¡ããªãã©ãã«è¡ããŸããïŒ ïŒ ã¢ãŠããã¢ã奜ããªã®ã§ãã£ã³ããªã©ã ä»åã¯å©çšããŠããAWSç°å¢ã« IAM Identity Center ãå°å
¥ãã話ããããŠããã ãããšæããŸãã ã»ãã¥ãªãã£ãšç®¡çã³ã¹ãã®å€©ç§€ ã¡ãã¬ãŒã§ã¯ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã¯å³éã«ç®¡çãããå¹³æã§å€éšããŒã«ã«ä¿åãããããšã¯ãããŸãããAWSã®IAMãŠãŒã¶ã®ã¢ã¯ã»ã¹ããŒã«é¢ããŠãåãã§ãã ãã ãããã§ãå¿é
ã«ãªãã®ã¯ PCã®äžã«å¹³æã§æ®ãæ
å ± ãPCãå³éã«ç®¡çãããŠããã®ã§ããããæŒæŽ©ãããã®ã§ã¯ãããŸããããããã§ãå¯èœæ§ã¯ãŒãã§ã¯ãããŸããã äžæã¯AssumeRoleã䜿ãããšã§æŒæŽ©æã®ãªã¹ã¯ãæžãããŸããã æåã®èªèšŒã§ã¯äœãã§ããªãåŒ±ãæš©éã§ãAssumeRoleã§æš©éã®åŒ·ãããŒã«ã«å€èº«ããæ¹åŒãå°å
¥ããŸããã ãã®è©±ãèããŠãè
ã«å
垯ãå·»ããåŠçæã®å°å¹Žã倩çã®ãé¢ã被ãããããšãæµ®ããã ããªãã¯AWSããããããŒã銎æã¿ã®ãã®ããã°ã®æ¬èãªèªè
ã§ãã AssumeRoleæŠèŠå³ ããã§ããŸã 課é¡ã¯ãããŸããã IAMãŠãŒã¶ãšAssumeRoleã®ç®¡çã³ã¹ã ã§ãã AWSã¢ã«ãŠã³ãã¯ãµãŒãã¹ããšã«è€æ°ååšããããã«æ¬çªç°å¢ãã¹ããŒãžã³ã°ç°å¢ã§ãåããŠãããŸããããããã®AWSã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããç°å¢ãéçºã¡ã³ããŒã«æäŸããå¿
èŠããããŸãã AssumeRoleã¯å€èº«ããå
ãšå€èº«ããå
ã®èšå®ãããå¿
èŠããããAWSã¢ã«ãŠã³ããè·šãå Žåã¯ããããã®AWSã¢ã«ãŠã³ãã«èšå®ãå¿
èŠã«ãªããŸããéçºã¡ã³ããŒã®ç°åããã床ã«ãã¡ããã¡ãã®AWSã¢ã«ãŠã³ãã«ãã®èšå®ãããããšããé¢åãªãã€ã«ã«ãªã£ãŠããŸããã ã»ãã¥ã¢ãªç°å¢ãç¶æãããŸãŸã管çã³ã¹ãããªãã¹ãäžãããã ããã§å°å
¥ã決ããã®ã IAM Identity Center ã§ããã IAM Identity Centerã®å°å
¥æ€èš çµè«ãå
ã«ç³ãäžããŸããšãIAM Identity Centerãå°å
¥ããããšã§ ã»ãã¥ã¢ãªç°å¢ãç¶æããªãããã€ã«ã®åæžãå®çŸããããšãã§ããŸãã ã å®ç§ã§ç©¶æ¥µãšããã»ã©ã§ã¯ãããŸãããã誰ããç®ã奪ãããŠããçæ³ã®ç°å¢ã«äžæ©è¿ã¥ãããšããŸããã IAM Identity Centerãããã«ç®¡çããAWS Control Towerã®å°å
¥ãæ€èšããŸããããæ¢ã«ããç°å¢ã«å°å
¥ããããšã®äºæãã¬å¶éããããããšã®ãªã¹ã¯ããAWS Configãå€çšãããããšã§æãã¬ã³ã¹ãå¢ãçºçãããšã®æ
å ±ããããä»åã¯èŠéãããšã«ããŸããã IAM Identity Centerãšã¯ å
㯠AWS Single Sign-On ïŒAWS SSOïŒ ãšãããµãŒãã¹åã§ããã ããã¯IAMãŠãŒã¶ãšã¯å
šãå¥ç©ã®ãŠãŒã¶ïŒãããSSOãŠãŒã¶ãšããŸãïŒãäœæããSSOãŠãŒã¶ãåAWSã¢ã«ãŠã³ãã®åIAMããŒã«ãæã£ããŠãŒã¶ã«å€èº«ããããšãã§ããæ©èœã§ãã IAM Identity CenteræŠèŠå³ IAM Identity Centerãå°å
¥ããæ±ºãæ SSOãŠãŒã¶ãšæš©éã®ç®¡çã¯äžã€ã®AWSã¢ã«ãŠã³ãã®IAM Identity Centerã§ç®¡çããããšãã§ããŸãã ããã¯AWS Organizationsã®æ©èœã®äžã«ä¹ãæ©èœã§ããã幞ãå
ã
ãããå°å
¥ããŠããããšã§ãããã«çµã¿èŸŒãããšãã§ããŸããïŒã¡ãªã¿ã«çŸåšã¯IdPãèšå®ããããšã§AWS OrganizationsããªããŠããã®æ©èœã䜿ãããšãã§ããŸãïŒã ã€ãŸãã è€æ°ã®AWSã¢ã«ãŠã³ãã®è€æ°ã®ãŠãŒã¶ã®è€æ°ã®ããŒã«ãäžã€ã®IAM Identity Centerã§å
šãŠç®¡çããããšãã§ããã®ã§ã ã ã§ã¯ãåAWSã¢ã«ãŠã³ãã§æ¢ã«äœæããŠããŸã£ãIAMããªã·ãŒããIAM Identity Centerã§åãå
容ã§äœãçŽããªããšãããªãããšãããšãããªããšããªããã«ã¹ã¿ã ããŒã«ãšããèšå®ã§ãIAMããªã·ãŒåã ãå®çŸ©ããããšã§æ¢åã®IAMããªã·ãŒããã®ãŸãŸæŽ»ããããšãã§ããŸãã ãããŠãSSOãŠãŒã¶ã¯æä¹
çãªã¢ã¯ã»ã¹ããŒãæã€ããšãã§ãããæå€§ã§12æéã®æéä»ãã¢ã¯ã»ã¹ããŒããæã€ããšãã§ããŸãããåŸã£ãŠã ä»®ã«äžãäžã¢ã¯ã»ã¹ããŒãæŒæŽ©ããŠã12æéåŸã«ã¯äœ¿ããªããªããŸã ã ãŸãã«æåŒ·ã§ç¡æµã®IAM Identity Centerã§ãã IAM Identity Centerã®å°å
¥ ããã§ã¯IAM Identity Centerã®å°å
¥ã®æµããç°¡åã«èª¬æããããŸãã äžçªæåã¯IAM Identity Centerãæå¹ã«ããããšã§ãããããã¯å²æããŠæå¹åããåŸã®æé ãèšèŒããŠãããŸãã IAM Identity Centerå
šäœå³ SSOãŠãŒã¶ã®äœæ SSOãŠãŒã¶ã¯åè¿°ããéãIAMãŠãŒã¶ãšã¯å
šãå¥ç©ãªã®ã§ãæ°ãã«å
šå¡åäœæããå¿
èŠããããŸãã æäœéå¿
èŠãªã®ã¯ååãšã¡ãŒã«ã¢ãã¬ã¹ã®ã¿ã§ãã äœæç»é¢ã«ä»»æé
ç®ã§äœæãé»è©±çªå·ãªã©ãã£ããããã®ã§ãããã·ã¹ãã çã«ã¯å
šãé¢ä¿ãªãããã§ããIAM Identity CenterãIdPãšããŠäœ¿ããšãã®ããã®èšå®ã§ããããã SSOãŠãŒã¶äœæç»é¢ SSOã°ã«ãŒãã®äœæ SSOã°ã«ãŒããšã¯ãSSOãŠãŒã¶ãšåŸè¿°ããèš±å¯ã»ããããŸãšããããã®ãã®ã§ãã æ°ããSSOãŠãŒã¶ãå¢ããå Žåã¯ã該åœã®ã°ã«ãŒãã«è¿œå ããŠãããã ãã§OKã§ãã SSOã°ã«ãŒãäœæç»é¢ èš±å¯ã»ããã®äœæ èš±å¯ã»ããã¯ãIAMããŒã«ã®çŽ ã«ãªããã®ã§ãã ããã§èšå®ããããªã·ãŒãåAWSã¢ã«ãŠã³ãã«IAMããŒã«ãIAMããªã·ãŒãšããŠããããžã§ãã³ã°ãããŸãã ããããžã§ãã³ã°å
ã®AWSã¢ã«ãŠã³ãã«æ¢ã«ããIAMããªã·ãŒã䜿ãããå Žåã¯ãã«ã¹ã¿ããŒãããŒãžãããªã·ãŒã§ãã®ååãèšå®ããã°å²ãåœãŠãããšãã§ããŸãã ååãééã£ãŠããŠååšããªãIAMããªã·ãŒãèšå®ããŠããŸã£ãå Žåã¯ãããããžã§ãã³ã°æã«ãšã©ãŒã«ãªããŸãã èš±å¯ã»ããäœæç»é¢ ããããžã§ãã³ã° âSSOãŠãŒã¶ãŸãã¯ã°ã«ãŒãâ ãš âèš±å¯ã»ããâ ãé©çšãããAWSã¢ã«ãŠã³ãã«ããããžã§ãã³ã°ããããšã§ã察象SSOãŠãŒã¶ã§è©²åœAWSã¢ã«ãŠã³ãã«ãã°ã€ã³å¯èœã«ãªããŸãã ããããžã§ãã³ã°æŠèŠå³ SSOã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ SSOãŠãŒã¶ã§ãã°ã€ã³ããAWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ã«ãAWSã¢ã«ãŠã³ããžã®ãªã³ã¯ã®äžèЧã衚瀺ãããŸãã ãã®ãªã³ã¯ããåAWSã¢ã«ãŠã³ãã«ãä»»æã®ããŒã«ã§ãã°ã€ã³ããããšãã§ããŸãã䟿å©ã§ããïŒ AWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ äžæçãªã¢ã¯ã»ã¹ããŒã¯CLIã§ãååŸã§ããŸããããã®ç»é¢ããã ã¢ã¯ã»ã¹ã㌠ã®ãªã³ã¯ãã¯ãªãã¯ãããšäžèЧç»é¢ã衚瀺ãããŸãã AWSã¢ã¯ã»ã¹ããŒã¿ã« ã¢ã¯ã»ã¹ããŒç¢ºèªç»é¢ å°å
¥åŸã«å¯Ÿå¿ããããš ãããŸã§ã®æé ã§ãããžã¡ã³ãã³ã³ãœãŒã«ã®ã§ãã°ã€ã³ã¯ã§ããããã«ãªã£ãŠããŸããããã以å€ã®ããŒã«çã§å©çšããããã«ããããšãããã§ã¯èª¬æããŸãã ~/.aws/configã®ä¿®æ£ ã¿ãŒããã«ã§AWS CLIãå©çšããããã«ããããŸã§ã¢ã¯ã»ã¹ããŒãçŽæ¥æå®ããŠããã®ããSSOãŠãŒã¶å¯Ÿå¿ã®èšè¿°ã«å€æŽããå¿
èŠããããŸãã ã¢ã¯ã»ã¹ããŒãªã©ã®ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã®èšèŒãäžèŠã«ãªãããã®å
å®¹ãæŒæŽ©ããŠããã¡ãŒãžãå°ãªãã§ãã [default] sso_session = m y-sso sso_account_id = 999999999999 sso_role_name = x xxxxxxxxxxx [sso-session my-sso] sso_start_url = h ttps://xxxxxxxxxxxx.awsapps.com/start sso_registration_scopes = s so:account:access sso_sessionã®èšå®ãå€ãaws_sdkã ãšå¯Ÿå¿ããŠããªãã£ããããã®ã§ãææ°ã®aws_sdkã䜿ãããã« mise (éçºããŒã«ç®¡ççšããŒã«)ã«èšå®ããŸããã [tools] awscli = "latest" ãã®èšå®ãããç¶æ
ã§ aws sso login ãå®è¡ãããšèªèšŒç»é¢ã®ãã©ãŠã¶ãèªåã§ç«ã¡äžããããã©ãŠã¶ã§ã®èªèšŒå®äºåŸã«ã¿ãŒããã«ã§CLIã䜿ããããã«ãªããŸãã ã¿ãŒããã«ã§sso login ãã©ãŠã¶ã§èªèšŒ éçºç°å¢ãžã®ã¢ã¯ã»ã¹ããŒã®æž¡ãæ¹ éçºç°å¢ã«ãããŠã¢ã¯ã»ã¹ããŒã®èšå®ãå¿
èŠãªç®æãããããããæ¯æ¥ããŒã¿ã«ç»é¢ããã³ããã§æŽæ°ããŠãã ãããšããã®ã¯é¢åãããã®ã§ãæ¯æ¥1åæåã«ã·ã§ã«ãå®è¡ããŠãããããã«ããŸããïŒãããé¢åãªã®ã§ãããªãã§ã©ãã«ãã§ããã°è¯ãã£ãã®ã§ããã»ã»ã»ç¡å¿µïŒã ãã®å®è¡ã«ã¯SSOã®èªèšŒæ
å ±ãã·ã§ã«å
ã®åŠçã§å©çšãããã aws2-wrap ãå©çšãã.envãã¡ã€ã«ã®æŽæ°ã«ã¯ python-dotenv ãå©çšããŸããã ãããmiseã§å®çŸ©ããããšã§ãå
šéçºã¡ã³ããŒã«ãããªã察å¿ã§ããŸããã # äžéšæç² if ! $(aws2-wrap --profile " $profile " --export ); then aws sso login --profile= " $profile " eval "$( aws2-wrap --profile " $profile " --export )" fi # äžéšæç² from dotenv import set_key def update_env_file ( env_file , key_value_pairs ): try : for key in key_value_pairs: value = key_value_pairs[key] set_key(env_file, key, value, quote_mode = 'never' ) except Exception as e: print (e) Terraform, Packerã®å¯Ÿå¿ ææ°ã®TerraformãPackerã§ã¯aws ssoã«å¯Ÿå¿ããŠããã®ã§ãssoã®profileããã®ãŸãŸäœ¿ãããšãã§ããŸãïŒAssumeRoleã«ã¯å¯Ÿå¿ããŠããªãã£ãã®ã§ãããã察å¿ãããæã¯å€§å€ã§ããã»ã»ã»ïŒã Terraformã¯ç°å¢äŸåããªããããå®è¡ç°å¢ãã³ã³ããåãã³ã³ããå
ã§å®è¡ããŠããã®ã§ãããâãã°ã€ã³æã«SSOã»ãã·ã§ã³ã®ååšæç¡ã®ç¢ºèªâ â âãªããã°SSOãã°ã€ã³â ããããããšã§ã aws sso login ã®äºåå®è¡ãæèããªããŠãè¯ãããã«ããŸããã # äžéšæç² function get_caller_identity () { set +eu for i in { 1..3} ; do command "aws sts get-caller-identity --profile $1 " if [[ $? = 0 ]]; then break else echo "Not logged in" command "aws sso login --profile $1 " fi done set -eu } ææ°ã®Packerã¯aws ssoã«å¯Ÿå¿ããŠãããšåè¿°ããŸãããããªãã ãç°å¢ã«ãã sso-session ãå¹ããã«ãšã©ãŒã«ãªãå ŽåããããŸããããã®å Žåã¯ã¬ã¬ã·ãŒãªèšè¿°æ¹æ³ã§åé¿ã§ããŸãã [profile packer] credential_process = a ws --profile default configure export-credentials --format process region = a p-northeast-1 output = j son 察å¿ããŠè¯ãã£ãã㚠管çè
ç®ç·ã§è¯ãã£ãã㚠管çè
ç®ç·ã§ã¯ãAWSã®ãŠãŒã¶ç®¡çã倧忥œã«ãªããŸããã ãããŸã§éçºã¡ã³ããŒãå¢ããéã«ã¯ãè€æ°ã®AWSã¢ã«ãŠã³ãã«å¯Ÿãããããã«ãIAMãŠãŒã¶ã®äœæãã¢ã¯ã»ã¹ããŒã®çæããããã®åŸåæãã°ã€ã³ãã¹ã¯ãŒããšã¢ã¯ã»ã¹ããŒãã¡ã³ããŒã«é
åžããªããã°ãªããªãã£ããããäœæ¥ã倧åç
©éã§ããã IAM Identity Centerå°å
¥åŸã¯ã 1ã€ã®AWSã¢ã«ãŠã³ãã§SSOãŠãŒã¶ãäœæããã ãã§ã ãæåŸ
ã¡ãŒã«ãåæã«éãããŸãã ãŸããäžããŠããæš©éã®ç®¡çãæ¥œã«ãªããŸããã IAM Identity Centerã®ç»é¢ãèŠãã°ã誰ãã©ã®AWSã¢ã«ãŠã³ãã«ã©ããªæš©éãæã£ãŠãããå
šãŠããããŸãããèšå®ããã®ãããã ããªã®ã§ ãããããªAWSã¢ã«ãŠã³ããåºå
¥ãããŠç¢ºèªã»èšå®ããå¿
èŠããªããªããŸããã å©çšè
ç®ç·ã§è¯ãã£ãããš å©çšè
ç®ç·ã§ã¯ãåAWSã¢ã«ãŠã³ããžã®ãã°ã€ã³ãããŒã¿ã«ç»é¢ã®ãªã³ã¯ããè¡ãããšãã§ããã®ã§ã AWSã¢ã«ãŠã³ãããšã«ãã°ã€ã³ã®äœæ¥ãå¿
èŠãªããªã£ãã®ã楜ã§ãããåAWSã¢ã«ãŠã³ãæ¯ã«ãã°ã€ã³æ
å ±ãMFAæ
å ±ãä¿æããªããŠãè¯ããªã£ãã®ã管çãæ°æ¥œã«ãªããŸãã ã 察å¿ããŠå°ã£ãããš 12æéã®å£ SSOãŠãŒã¶ã®ã»ãã·ã§ã³æéã®äžéã12æéã®ãããæ9æã«ãã°ã€ã³ãããšå€9æã«ã»ãã·ã§ã³ãåããŠããŸããŸãããã®ããšãå¿ããŠ12æéåŸã«æ¥ã«éçºç°å¢ã§ãšã©ãŒãåºå§ããŠããªãããããããããïŒããšããŸã«é©ããããŸãïŒ12æé以äžåãããšãã»ãšãã©ãªãã®ã§ãã£ãã«ééããŸããããã ããããå¿ããŸãïŒã æ·±å€ã¡ã³ãã®éã«ãããèµ·ãããšãã©ãã«ã«ãªããŸãã®ã§ããã®éã¯äœæ¥åã«å¿
ããã°ã€ã³ãçŽãããã«ããŠããŸãã å人çã«ã¯ã»ãã·ã§ã³æéã®äžéã®æéããå°ãäžããŠæ¬²ããã§ãã å©çšã§ããªããµãŒãããŒãã£ãŒããŒã«ã®ååš AWSã«ã¢ã¯ã»ã¹ããããã®ãµãŒãããŒãã£ãŒããŒã«ã¯æ§ã
ãããŸããã AWS_ACCESS_KEY_ID ã AWS_SECRET_ACCESS_KEY ã®2é
ç®ããèšå®ã§ããªããã®ããããŸãã SSOãŠãŒã¶ã§ãã°ã€ã³ããã«ã¯ããããã«å ã AWS_SESSION_TOKEN ã®å€ãå¿
èŠã§ãããããèšå®ã§ããªãããŒã«ã¯SSOãŠãŒã¶ã§ã¯å©çšã§ããªãããšã«ãªããŸãã æè¿ã§ã¯SSOãŠãŒã¶ã§ãå©çšã§ããããã«ã¢ããã°ã¬ãŒããããŠããããŒã«ãå¢ããŠããŠããŸãã®ã§ãä»ãŸã§äœ¿ã£ãŠããããŒã«ã䜿ããªããªã£ãå Žåã¯ä»£æ¿ã®ããŒã«ã䜿ããŸãããã ãŸãšã ããã¯çµ¶å¯Ÿåã§ã¯ãªããŠãIAM Identity Centerãå°å
¥ããããšã§ããã€ã«ã®åæžããæ
å ±æŒæŽ©ãªã¹ã¯ã®åæžããäž¡æ¹å®çŸããããšãã§ããŸããã ãã¡ããç§ãã¡ã®ææŠã¯ããã§çµããã§ã¯ãªãããµãŒãã¹ã®å質ãäžãããããéçºã¡ã³ããŒãéçºã«éäžã§ããç°å¢ãäœãããã 俺ãã¡ã®æŠãã¯ãŸã å§ãŸã£ãã°ãã ãã§ãã ãããŠãææ¥12æ4æ¥ã¯ @shigerisa ãããäœãããã£ãšé¢çœãèšäºãæžããŠãããŠããããã§ãïŒã楜ãã¿ã«ïŒ Weâre hiring! ã¡ãã¬ãŒã§ã¯åçš®ãšã³ãžãã¢ãçµ¶è³åéäžã§ãïŒ ã«ãžã¥ã¢ã«é¢è«ãã€ã§ãWelcomeã§ãã®ã§ãã話ãã ãã§ãèããŠã¿ããããããç§ã®æšãã®è©±ãèããŠæ¬²ããããªã©ãªãã§ãããŸããŸããã®ã§ããæ°è»œã«ãåãåãããã ããïŒ åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ãã¡ãã®èšäºã¯ MedleyïŒã¡ãã¬ãŒïŒ Advent Calendar 2024 ã®3æ¥ç®ã®èšäºã§ãã Who are you? ã¡ãã¬ãŒã§äž»ã«SRE掻åãè¡ã£ãŠãã人æãã©ãããã©ãŒã æ¬éš 第åéçºã°ã«ãŒãã®çäºã§ãã æåã«ç°¡åã«FAQ圢åŒã§èªå·±ç޹ä»ãããŠããã ãããšæããŸãã ïŒæšæ¥ã¯äœãé£ã¹ãŸãããïŒ ïŒ éººç³»ãã¡ã¹ãããŒãã§ã¯äžçªå¥œããªå°è«žãã°ã ïŒå¥œããªæ¬ã¯äœã§ããïŒ ïŒ æ³äºæ£ããã®èªäŒæžãäžå乿ãã¯å¿ã«æ®ã£ãŠããŸãã ïŒéã³ã«è¡ããªãã©ãã«è¡ããŸããïŒ ïŒ ã¢ãŠããã¢ã奜ããªã®ã§ãã£ã³ããªã©ã ä»åã¯å©çšããŠããAWSç°å¢ã« IAM Identity Center ãå°å
¥ãã話ããããŠããã ãããšæããŸãã ã»ãã¥ãªãã£ãšç®¡çã³ã¹ãã®å€©ç§€ ã¡ãã¬ãŒã§ã¯ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã¯å³éã«ç®¡çãããå¹³æã§å€éšããŒã«ã«ä¿åãããããšã¯ãããŸãããAWSã®IAMãŠãŒã¶ã®ã¢ã¯ã»ã¹ããŒã«é¢ããŠãåãã§ãã ãã ãããã§ãå¿é
ã«ãªãã®ã¯ PCã®äžã«å¹³æã§æ®ãæ
å ± ãPCãå³éã«ç®¡çãããŠããã®ã§ããããæŒæŽ©ãããã®ã§ã¯ãããŸããããããã§ãå¯èœæ§ã¯ãŒãã§ã¯ãããŸããã äžæã¯AssumeRoleã䜿ãããšã§æŒæŽ©æã®ãªã¹ã¯ãæžãããŸããã æåã®èªèšŒã§ã¯äœãã§ããªãåŒ±ãæš©éã§ãAssumeRoleã§æš©éã®åŒ·ãããŒã«ã«å€èº«ããæ¹åŒãå°å
¥ããŸããã ãã®è©±ãèããŠãè
ã«å
垯ãå·»ããåŠçæã®å°å¹Žã倩çã®ãé¢ã被ãããããšãæµ®ããã ããªãã¯AWSããããããŒã銎æã¿ã®ãã®ããã°ã®æ¬èãªèªè
ã§ãã AssumeRoleæŠèŠå³ ããã§ããŸã 課é¡ã¯ãããŸããã IAMãŠãŒã¶ãšAssumeRoleã®ç®¡çã³ã¹ã ã§ãã AWSã¢ã«ãŠã³ãã¯ãµãŒãã¹ããšã«è€æ°ååšããããã«æ¬çªç°å¢ãã¹ããŒãžã³ã°ç°å¢ã§ãåããŠãããŸããããããã®AWSã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããç°å¢ãéçºã¡ã³ããŒã«æäŸããå¿
èŠããããŸãã AssumeRoleã¯å€èº«ããå
ãšå€èº«ããå
ã®èšå®ãããå¿
èŠããããAWSã¢ã«ãŠã³ããè·šãå Žåã¯ããããã®AWSã¢ã«ãŠã³ãã«èšå®ãå¿
èŠã«ãªããŸããéçºã¡ã³ããŒã®ç°åããã床ã«ãã¡ããã¡ãã®AWSã¢ã«ãŠã³ãã«ãã®èšå®ãããããšããé¢åãªãã€ã«ã«ãªã£ãŠããŸããã ã»ãã¥ã¢ãªç°å¢ãç¶æãããŸãŸã管çã³ã¹ãããªãã¹ãäžãããã ããã§å°å
¥ã決ããã®ã IAM Identity Center ã§ããã IAM Identity Centerã®å°å
¥æ€èš çµè«ãå
ã«ç³ãäžããŸããšãIAM Identity Centerãå°å
¥ããããšã§ ã»ãã¥ã¢ãªç°å¢ãç¶æããªãããã€ã«ã®åæžãå®çŸããããšãã§ããŸãã ã å®ç§ã§ç©¶æ¥µãšããã»ã©ã§ã¯ãããŸãããã誰ããç®ã奪ãããŠããçæ³ã®ç°å¢ã«äžæ©è¿ã¥ãããšããŸããã IAM Identity Centerãããã«ç®¡çããAWS Control Towerã®å°å
¥ãæ€èšããŸããããæ¢ã«ããç°å¢ã«å°å
¥ããããšã®äºæãã¬å¶éããããããšã®ãªã¹ã¯ããAWS Configãå€çšãããããšã§æãã¬ã³ã¹ãå¢ãçºçãããšã®æ
å ±ããããä»åã¯èŠéãããšã«ããŸããã IAM Identity Centerãšã¯ å
㯠AWS Single Sign-On ïŒAWS SSOïŒ ãšãããµãŒãã¹åã§ããã ããã¯IAMãŠãŒã¶ãšã¯å
šãå¥ç©ã®ãŠãŒã¶ïŒãããSSOãŠãŒã¶ãšããŸãïŒãäœæããSSOãŠãŒã¶ãåAWSã¢ã«ãŠã³ãã®åIAMããŒã«ãæã£ããŠãŒã¶ã«å€èº«ããããšãã§ããæ©èœã§ãã IAM Identity CenteræŠèŠå³ IAM Identity Centerãå°å
¥ããæ±ºãæ SSOãŠãŒã¶ãšæš©éã®ç®¡çã¯äžã€ã®AWSã¢ã«ãŠã³ãã®IAM Identity Centerã§ç®¡çããããšãã§ããŸãã ããã¯AWS Organizationsã®æ©èœã®äžã«ä¹ãæ©èœã§ããã幞ãå
ã
ãããå°å
¥ããŠããããšã§ãããã«çµã¿èŸŒãããšãã§ããŸããïŒã¡ãªã¿ã«çŸåšã¯IdPãèšå®ããããšã§AWS OrganizationsããªããŠããã®æ©èœã䜿ãããšãã§ããŸãïŒã ã€ãŸãã è€æ°ã®AWSã¢ã«ãŠã³ãã®è€æ°ã®ãŠãŒã¶ã®è€æ°ã®ããŒã«ãäžã€ã®IAM Identity Centerã§å
šãŠç®¡çããããšãã§ããã®ã§ã ã ã§ã¯ãåAWSã¢ã«ãŠã³ãã§æ¢ã«äœæããŠããŸã£ãIAMããªã·ãŒããIAM Identity Centerã§åãå
容ã§äœãçŽããªããšãããªãããšãããšãããªããšããªããã«ã¹ã¿ã ããŒã«ãšããèšå®ã§ãIAMããªã·ãŒåã ãå®çŸ©ããããšã§æ¢åã®IAMããªã·ãŒããã®ãŸãŸæŽ»ããããšãã§ããŸãã ãããŠãSSOãŠãŒã¶ã¯æä¹
çãªã¢ã¯ã»ã¹ããŒãæã€ããšãã§ãããæå€§ã§12æéã®æéä»ãã¢ã¯ã»ã¹ããŒããæã€ããšãã§ããŸãããåŸã£ãŠã ä»®ã«äžãäžã¢ã¯ã»ã¹ããŒãæŒæŽ©ããŠã12æéåŸã«ã¯äœ¿ããªããªããŸã ã ãŸãã«æåŒ·ã§ç¡æµã®IAM Identity Centerã§ãã IAM Identity Centerã®å°å
¥ ããã§ã¯IAM Identity Centerã®å°å
¥ã®æµããç°¡åã«èª¬æããããŸãã äžçªæåã¯IAM Identity Centerãæå¹ã«ããããšã§ãããããã¯å²æããŠæå¹åããåŸã®æé ãèšèŒããŠãããŸãã IAM Identity Centerå
šäœå³ SSOãŠãŒã¶ã®äœæ SSOãŠãŒã¶ã¯åè¿°ããéãIAMãŠãŒã¶ãšã¯å
šãå¥ç©ãªã®ã§ãæ°ãã«å
šå¡åäœæããå¿
èŠããããŸãã æäœéå¿
èŠãªã®ã¯ååãšã¡ãŒã«ã¢ãã¬ã¹ã®ã¿ã§ãã äœæç»é¢ã«ä»»æé
ç®ã§äœæãé»è©±çªå·ãªã©ãã£ããããã®ã§ãããã·ã¹ãã çã«ã¯å
šãé¢ä¿ãªãããã§ããIAM Identity CenterãIdPãšããŠäœ¿ããšãã®ããã®èšå®ã§ããããã SSOãŠãŒã¶äœæç»é¢ SSOã°ã«ãŒãã®äœæ SSOã°ã«ãŒããšã¯ãSSOãŠãŒã¶ãšåŸè¿°ããèš±å¯ã»ããããŸãšããããã®ãã®ã§ãã æ°ããSSOãŠãŒã¶ãå¢ããå Žåã¯ã該åœã®ã°ã«ãŒãã«è¿œå ããŠãããã ãã§OKã§ãã SSOã°ã«ãŒãäœæç»é¢ èš±å¯ã»ããã®äœæ èš±å¯ã»ããã¯ãIAMããŒã«ã®çŽ ã«ãªããã®ã§ãã ããã§èšå®ããããªã·ãŒãåAWSã¢ã«ãŠã³ãã«IAMããŒã«ãIAMããªã·ãŒãšããŠããããžã§ãã³ã°ãããŸãã ããããžã§ãã³ã°å
ã®AWSã¢ã«ãŠã³ãã«æ¢ã«ããIAMããªã·ãŒã䜿ãããå Žåã¯ãã«ã¹ã¿ããŒãããŒãžãããªã·ãŒã§ãã®ååãèšå®ããã°å²ãåœãŠãããšãã§ããŸãã ååãééã£ãŠããŠååšããªãIAMããªã·ãŒãèšå®ããŠããŸã£ãå Žåã¯ãããããžã§ãã³ã°æã«ãšã©ãŒã«ãªããŸãã èš±å¯ã»ããäœæç»é¢ ããããžã§ãã³ã° âSSOãŠãŒã¶ãŸãã¯ã°ã«ãŒãâ ãš âèš±å¯ã»ããâ ãé©çšãããAWSã¢ã«ãŠã³ãã«ããããžã§ãã³ã°ããããšã§ã察象SSOãŠãŒã¶ã§è©²åœAWSã¢ã«ãŠã³ãã«ãã°ã€ã³å¯èœã«ãªããŸãã ããããžã§ãã³ã°æŠèŠå³ SSOã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ SSOãŠãŒã¶ã§ãã°ã€ã³ããAWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ã«ãAWSã¢ã«ãŠã³ããžã®ãªã³ã¯ã®äžèЧã衚瀺ãããŸãã ãã®ãªã³ã¯ããåAWSã¢ã«ãŠã³ãã«ãä»»æã®ããŒã«ã§ãã°ã€ã³ããããšãã§ããŸãã䟿å©ã§ããïŒ AWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ äžæçãªã¢ã¯ã»ã¹ããŒã¯CLIã§ãååŸã§ããŸããããã®ç»é¢ããã ã¢ã¯ã»ã¹ã㌠ã®ãªã³ã¯ãã¯ãªãã¯ãããšäžèЧç»é¢ã衚瀺ãããŸãã AWSã¢ã¯ã»ã¹ããŒã¿ã« ã¢ã¯ã»ã¹ããŒç¢ºèªç»é¢ å°å
¥åŸã«å¯Ÿå¿ããããš ãããŸã§ã®æé ã§ãããžã¡ã³ãã³ã³ãœãŒã«ã®ã§ãã°ã€ã³ã¯ã§ããããã«ãªã£ãŠããŸããããã以å€ã®ããŒã«çã§å©çšããããã«ããããšãããã§ã¯èª¬æããŸãã ~/.aws/configã®ä¿®æ£ ã¿ãŒããã«ã§AWS CLIãå©çšããããã«ããããŸã§ã¢ã¯ã»ã¹ããŒãçŽæ¥æå®ããŠããã®ããSSOãŠãŒã¶å¯Ÿå¿ã®èšè¿°ã«å€æŽããå¿
èŠããããŸãã ã¢ã¯ã»ã¹ããŒãªã©ã®ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã®èšèŒãäžèŠã«ãªãããã®å
å®¹ãæŒæŽ©ããŠããã¡ãŒãžãå°ãªãã§ãã [default] sso_session = m y-sso sso_account_id = 999999999999 sso_role_name = x xxxxxxxxxxx [sso-session my-sso] sso_start_url = h ttps://xxxxxxxxxxxx.awsapps.com/start sso_registration_scopes = s so:account:access sso_sessionã®èšå®ãå€ãaws_sdkã ãšå¯Ÿå¿ããŠããªãã£ããããã®ã§ãææ°ã®aws_sdkã䜿ãããã« mise (éçºããŒã«ç®¡ççšããŒã«)ã«èšå®ããŸããã [tools] awscli = "latest" ãã®èšå®ãããç¶æ
ã§ aws sso login ãå®è¡ãããšèªèšŒç»é¢ã®ãã©ãŠã¶ãèªåã§ç«ã¡äžããããã©ãŠã¶ã§ã®èªèšŒå®äºåŸã«ã¿ãŒããã«ã§CLIã䜿ããããã«ãªããŸãã ã¿ãŒããã«ã§sso login ãã©ãŠã¶ã§èªèšŒ éçºç°å¢ãžã®ã¢ã¯ã»ã¹ããŒã®æž¡ãæ¹ éçºç°å¢ã«ãããŠã¢ã¯ã»ã¹ããŒã®èšå®ãå¿
èŠãªç®æãããããããæ¯æ¥ããŒã¿ã«ç»é¢ããã³ããã§æŽæ°ããŠãã ãããšããã®ã¯é¢åãããã®ã§ãæ¯æ¥1åæåã«ã·ã§ã«ãå®è¡ããŠãããããã«ããŸããïŒãããé¢åãªã®ã§ãããªãã§ã©ãã«ãã§ããã°è¯ãã£ãã®ã§ããã»ã»ã»ç¡å¿µïŒã ãã®å®è¡ã«ã¯SSOã®èªèšŒæ
å ±ãã·ã§ã«å
ã®åŠçã§å©çšãããã aws2-wrap ãå©çšãã.envãã¡ã€ã«ã®æŽæ°ã«ã¯ python-dotenv ãå©çšããŸããã ãããmiseã§å®çŸ©ããããšã§ãå
šéçºã¡ã³ããŒã«ãããªã察å¿ã§ããŸããã # äžéšæç² if ! $(aws2-wrap --profile " $profile " --export ); then aws sso login --profile= " $profile " eval "$( aws2-wrap --profile " $profile " --export )" fi # äžéšæç² from dotenv import set_key def update_env_file ( env_file , key_value_pairs ): try : for key in key_value_pairs: value = key_value_pairs[key] set_key(env_file, key, value, quote_mode = 'never' ) except Exception as e: print (e) Terraform, Packerã®å¯Ÿå¿ ææ°ã®TerraformãPackerã§ã¯aws ssoã«å¯Ÿå¿ããŠããã®ã§ãssoã®profileããã®ãŸãŸäœ¿ãããšãã§ããŸãïŒAssumeRoleã«ã¯å¯Ÿå¿ããŠããªãã£ãã®ã§ãããã察å¿ãããæã¯å€§å€ã§ããã»ã»ã»ïŒã Terraformã¯ç°å¢äŸåããªããããå®è¡ç°å¢ãã³ã³ããåãã³ã³ããå
ã§å®è¡ããŠããã®ã§ãããâãã°ã€ã³æã«SSOã»ãã·ã§ã³ã®ååšæç¡ã®ç¢ºèªâ â âãªããã°SSOãã°ã€ã³â ããããããšã§ã aws sso login ã®äºåå®è¡ãæèããªããŠãè¯ãããã«ããŸããã # äžéšæç² function get_caller_identity () { set +eu for i in { 1..3} ; do command "aws sts get-caller-identity --profile $1 " if [[ $? = 0 ]]; then break else echo "Not logged in" command "aws sso login --profile $1 " fi done set -eu } ææ°ã®Packerã¯aws ssoã«å¯Ÿå¿ããŠãããšåè¿°ããŸãããããªãã ãç°å¢ã«ãã sso-session ãå¹ããã«ãšã©ãŒã«ãªãå ŽåããããŸããããã®å Žåã¯ã¬ã¬ã·ãŒãªèšè¿°æ¹æ³ã§åé¿ã§ããŸãã [profile packer] credential_process = a ws --profile default configure export-credentials --format process region = a p-northeast-1 output = j son 察å¿ããŠè¯ãã£ãã㚠管çè
ç®ç·ã§è¯ãã£ãã㚠管çè
ç®ç·ã§ã¯ãAWSã®ãŠãŒã¶ç®¡çã倧忥œã«ãªããŸããã ãããŸã§éçºã¡ã³ããŒãå¢ããéã«ã¯ãè€æ°ã®AWSã¢ã«ãŠã³ãã«å¯Ÿãããããã«ãIAMãŠãŒã¶ã®äœæãã¢ã¯ã»ã¹ããŒã®çæããããã®åŸåæãã°ã€ã³ãã¹ã¯ãŒããšã¢ã¯ã»ã¹ããŒãã¡ã³ããŒã«é
åžããªããã°ãªããªãã£ããããäœæ¥ã倧åç
©éã§ããã IAM Identity Centerå°å
¥åŸã¯ã 1ã€ã®AWSã¢ã«ãŠã³ãã§SSOãŠãŒã¶ãäœæããã ãã§ã ãæåŸ
ã¡ãŒã«ãåæã«éãããŸãã ãŸããäžããŠããæš©éã®ç®¡çãæ¥œã«ãªããŸããã IAM Identity Centerã®ç»é¢ãèŠãã°ã誰ãã©ã®AWSã¢ã«ãŠã³ãã«ã©ããªæš©éãæã£ãŠãããå
šãŠããããŸãããèšå®ããã®ãããã ããªã®ã§ ãããããªAWSã¢ã«ãŠã³ããåºå
¥ãããŠç¢ºèªã»èšå®ããå¿
èŠããªããªããŸããã å©çšè
ç®ç·ã§è¯ãã£ãããš å©çšè
ç®ç·ã§ã¯ãåAWSã¢ã«ãŠã³ããžã®ãã°ã€ã³ãããŒã¿ã«ç»é¢ã®ãªã³ã¯ããè¡ãããšãã§ããã®ã§ã AWSã¢ã«ãŠã³ãããšã«ãã°ã€ã³ã®äœæ¥ãå¿
èŠãªããªã£ãã®ã楜ã§ãããåAWSã¢ã«ãŠã³ãæ¯ã«ãã°ã€ã³æ
å ±ãMFAæ
å ±ãä¿æããªããŠãè¯ããªã£ãã®ã管çãæ°æ¥œã«ãªããŸãã ã 察å¿ããŠå°ã£ãããš 12æéã®å£ SSOãŠãŒã¶ã®ã»ãã·ã§ã³æéã®äžéã12æéã®ãããæ9æã«ãã°ã€ã³ãããšå€9æã«ã»ãã·ã§ã³ãåããŠããŸããŸãããã®ããšãå¿ããŠ12æéåŸã«æ¥ã«éçºç°å¢ã§ãšã©ãŒãåºå§ããŠããªãããããããããïŒããšããŸã«é©ããããŸãïŒ12æé以äžåãããšãã»ãšãã©ãªãã®ã§ãã£ãã«ééããŸããããã ããããå¿ããŸãïŒã æ·±å€ã¡ã³ãã®éã«ãããèµ·ãããšãã©ãã«ã«ãªããŸãã®ã§ããã®éã¯äœæ¥åã«å¿
ããã°ã€ã³ãçŽãããã«ããŠããŸãã å人çã«ã¯ã»ãã·ã§ã³æéã®äžéã®æéããå°ãäžããŠæ¬²ããã§ãã å©çšã§ããªããµãŒãããŒãã£ãŒããŒã«ã®ååš AWSã«ã¢ã¯ã»ã¹ããããã®ãµãŒãããŒãã£ãŒããŒã«ã¯æ§ã
ãããŸããã AWS_ACCESS_KEY_ID ã AWS_SECRET_ACCESS_KEY ã®2é
ç®ããèšå®ã§ããªããã®ããããŸãã SSOãŠãŒã¶ã§ãã°ã€ã³ããã«ã¯ããããã«å ã AWS_SESSION_TOKEN ã®å€ãå¿
èŠã§ãããããèšå®ã§ããªãããŒã«ã¯SSOãŠãŒã¶ã§ã¯å©çšã§ããªãããšã«ãªããŸãã æè¿ã§ã¯SSOãŠãŒã¶ã§ãå©çšã§ããããã«ã¢ããã°ã¬ãŒããããŠããããŒã«ãå¢ããŠããŠããŸãã®ã§ãä»ãŸã§äœ¿ã£ãŠããããŒã«ã䜿ããªããªã£ãå Žåã¯ä»£æ¿ã®ããŒã«ã䜿ããŸãããã ãŸãšã ããã¯çµ¶å¯Ÿåã§ã¯ãªããŠãIAM Identity Centerãå°å
¥ããããšã§ããã€ã«ã®åæžããæ
å ±æŒæŽ©ãªã¹ã¯ã®åæžããäž¡æ¹å®çŸããããšãã§ããŸããã ãã¡ããç§ãã¡ã®ææŠã¯ããã§çµããã§ã¯ãªãããµãŒãã¹ã®å質ãäžãããããéçºã¡ã³ããŒãéçºã«éäžã§ããç°å¢ãäœãããã 俺ãã¡ã®æŠãã¯ãŸã å§ãŸã£ãã°ãã ãã§ãã ãããŠãææ¥12æ4æ¥ã¯ @shigerisa ãããäœãããã£ãšé¢çœãèšäºãæžããŠãããŠããããã§ãïŒã楜ãã¿ã«ïŒ Weâre hiring! ã¡ãã¬ãŒã§ã¯åçš®ãšã³ãžãã¢ãçµ¶è³åéäžã§ãïŒ ã«ãžã¥ã¢ã«é¢è«ãã€ã§ãWelcomeã§ãã®ã§ãã話ãã ãã§ãèããŠã¿ããããããç§ã®æšãã®è©±ãèããŠæ¬²ããããªã©ãªãã§ãããŸããŸããã®ã§ããæ°è»œã«ãåãåãããã ããïŒ åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ãã¡ãã®èšäºã¯ MedleyïŒã¡ãã¬ãŒïŒ Advent Calendar 2024 ã®3æ¥ç®ã®èšäºã§ãã Who are you? ã¡ãã¬ãŒã§äž»ã«SRE掻åãè¡ã£ãŠãã人æãã©ãããã©ãŒã æ¬éš 第åéçºã°ã«ãŒãã®çäºã§ãã æåã«ç°¡åã«FAQ圢åŒã§èªå·±ç޹ä»ãããŠããã ãããšæããŸãã ïŒæšæ¥ã¯äœãé£ã¹ãŸãããïŒ ïŒ éººç³»ãã¡ã¹ãããŒãã§ã¯äžçªå¥œããªå°è«žãã°ã ïŒå¥œããªæ¬ã¯äœã§ããïŒ ïŒ æ³äºæ£ããã®èªäŒæžãäžå乿ãã¯å¿ã«æ®ã£ãŠããŸãã ïŒéã³ã«è¡ããªãã©ãã«è¡ããŸããïŒ ïŒ ã¢ãŠããã¢ã奜ããªã®ã§ãã£ã³ããªã©ã ä»åã¯å©çšããŠããAWSç°å¢ã« IAM Identity Center ãå°å
¥ãã話ããããŠããã ãããšæããŸãã ã»ãã¥ãªãã£ãšç®¡çã³ã¹ãã®å€©ç§€ ã¡ãã¬ãŒã§ã¯ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã¯å³éã«ç®¡çãããå¹³æã§å€éšããŒã«ã«ä¿åãããããšã¯ãããŸãããAWSã®IAMãŠãŒã¶ã®ã¢ã¯ã»ã¹ããŒã«é¢ããŠãåãã§ãã ãã ãããã§ãå¿é
ã«ãªãã®ã¯ PCã®äžã«å¹³æã§æ®ãæ
å ± ãPCãå³éã«ç®¡çãããŠããã®ã§ããããæŒæŽ©ãããã®ã§ã¯ãããŸããããããã§ãå¯èœæ§ã¯ãŒãã§ã¯ãããŸããã äžæã¯AssumeRoleã䜿ãããšã§æŒæŽ©æã®ãªã¹ã¯ãæžãããŸããã æåã®èªèšŒã§ã¯äœãã§ããªãåŒ±ãæš©éã§ãAssumeRoleã§æš©éã®åŒ·ãããŒã«ã«å€èº«ããæ¹åŒãå°å
¥ããŸããã ãã®è©±ãèããŠãè
ã«å
垯ãå·»ããåŠçæã®å°å¹Žã倩çã®ãé¢ã被ãããããšãæµ®ããã ããªãã¯AWSããããããŒã銎æã¿ã®ãã®ããã°ã®æ¬èãªèªè
ã§ãã AssumeRoleæŠèŠå³ ããã§ããŸã 課é¡ã¯ãããŸããã IAMãŠãŒã¶ãšAssumeRoleã®ç®¡çã³ã¹ã ã§ãã AWSã¢ã«ãŠã³ãã¯ãµãŒãã¹ããšã«è€æ°ååšããããã«æ¬çªç°å¢ãã¹ããŒãžã³ã°ç°å¢ã§ãåããŠãããŸããããããã®AWSã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããç°å¢ãéçºã¡ã³ããŒã«æäŸããå¿
èŠããããŸãã AssumeRoleã¯å€èº«ããå
ãšå€èº«ããå
ã®èšå®ãããå¿
èŠããããAWSã¢ã«ãŠã³ããè·šãå Žåã¯ããããã®AWSã¢ã«ãŠã³ãã«èšå®ãå¿
èŠã«ãªããŸããéçºã¡ã³ããŒã®ç°åããã床ã«ãã¡ããã¡ãã®AWSã¢ã«ãŠã³ãã«ãã®èšå®ãããããšããé¢åãªãã€ã«ã«ãªã£ãŠããŸããã ã»ãã¥ã¢ãªç°å¢ãç¶æãããŸãŸã管çã³ã¹ãããªãã¹ãäžãããã ããã§å°å
¥ã決ããã®ã IAM Identity Center ã§ããã IAM Identity Centerã®å°å
¥æ€èš çµè«ãå
ã«ç³ãäžããŸããšãIAM Identity Centerãå°å
¥ããããšã§ ã»ãã¥ã¢ãªç°å¢ãç¶æããªãããã€ã«ã®åæžãå®çŸããããšãã§ããŸãã ã å®ç§ã§ç©¶æ¥µãšããã»ã©ã§ã¯ãããŸãããã誰ããç®ã奪ãããŠããçæ³ã®ç°å¢ã«äžæ©è¿ã¥ãããšããŸããã IAM Identity Centerãããã«ç®¡çããAWS Control Towerã®å°å
¥ãæ€èšããŸããããæ¢ã«ããç°å¢ã«å°å
¥ããããšã®äºæãã¬å¶éããããããšã®ãªã¹ã¯ããAWS Configãå€çšãããããšã§æãã¬ã³ã¹ãå¢ãçºçãããšã®æ
å ±ããããä»åã¯èŠéãããšã«ããŸããã IAM Identity Centerãšã¯ å
㯠AWS Single Sign-On ïŒAWS SSOïŒ ãšãããµãŒãã¹åã§ããã ããã¯IAMãŠãŒã¶ãšã¯å
šãå¥ç©ã®ãŠãŒã¶ïŒãããSSOãŠãŒã¶ãšããŸãïŒãäœæããSSOãŠãŒã¶ãåAWSã¢ã«ãŠã³ãã®åIAMããŒã«ãæã£ããŠãŒã¶ã«å€èº«ããããšãã§ããæ©èœã§ãã IAM Identity CenteræŠèŠå³ IAM Identity Centerãå°å
¥ããæ±ºãæ SSOãŠãŒã¶ãšæš©éã®ç®¡çã¯äžã€ã®AWSã¢ã«ãŠã³ãã®IAM Identity Centerã§ç®¡çããããšãã§ããŸãã ããã¯AWS Organizationsã®æ©èœã®äžã«ä¹ãæ©èœã§ããã幞ãå
ã
ãããå°å
¥ããŠããããšã§ãããã«çµã¿èŸŒãããšãã§ããŸããïŒã¡ãªã¿ã«çŸåšã¯IdPãèšå®ããããšã§AWS OrganizationsããªããŠããã®æ©èœã䜿ãããšãã§ããŸãïŒã ã€ãŸãã è€æ°ã®AWSã¢ã«ãŠã³ãã®è€æ°ã®ãŠãŒã¶ã®è€æ°ã®ããŒã«ãäžã€ã®IAM Identity Centerã§å
šãŠç®¡çããããšãã§ããã®ã§ã ã ã§ã¯ãåAWSã¢ã«ãŠã³ãã§æ¢ã«äœæããŠããŸã£ãIAMããªã·ãŒããIAM Identity Centerã§åãå
容ã§äœãçŽããªããšãããªãããšãããšãããªããšããªããã«ã¹ã¿ã ããŒã«ãšããèšå®ã§ãIAMããªã·ãŒåã ãå®çŸ©ããããšã§æ¢åã®IAMããªã·ãŒããã®ãŸãŸæŽ»ããããšãã§ããŸãã ãããŠãSSOãŠãŒã¶ã¯æä¹
çãªã¢ã¯ã»ã¹ããŒãæã€ããšãã§ãããæå€§ã§12æéã®æéä»ãã¢ã¯ã»ã¹ããŒããæã€ããšãã§ããŸãããåŸã£ãŠã ä»®ã«äžãäžã¢ã¯ã»ã¹ããŒãæŒæŽ©ããŠã12æéåŸã«ã¯äœ¿ããªããªããŸã ã ãŸãã«æåŒ·ã§ç¡æµã®IAM Identity Centerã§ãã IAM Identity Centerã®å°å
¥ ããã§ã¯IAM Identity Centerã®å°å
¥ã®æµããç°¡åã«èª¬æããããŸãã äžçªæåã¯IAM Identity Centerãæå¹ã«ããããšã§ãããããã¯å²æããŠæå¹åããåŸã®æé ãèšèŒããŠãããŸãã IAM Identity Centerå
šäœå³ SSOãŠãŒã¶ã®äœæ SSOãŠãŒã¶ã¯åè¿°ããéãIAMãŠãŒã¶ãšã¯å
šãå¥ç©ãªã®ã§ãæ°ãã«å
šå¡åäœæããå¿
èŠããããŸãã æäœéå¿
èŠãªã®ã¯ååãšã¡ãŒã«ã¢ãã¬ã¹ã®ã¿ã§ãã äœæç»é¢ã«ä»»æé
ç®ã§äœæãé»è©±çªå·ãªã©ãã£ããããã®ã§ãããã·ã¹ãã çã«ã¯å
šãé¢ä¿ãªãããã§ããIAM Identity CenterãIdPãšããŠäœ¿ããšãã®ããã®èšå®ã§ããããã SSOãŠãŒã¶äœæç»é¢ SSOã°ã«ãŒãã®äœæ SSOã°ã«ãŒããšã¯ãSSOãŠãŒã¶ãšåŸè¿°ããèš±å¯ã»ããããŸãšããããã®ãã®ã§ãã æ°ããSSOãŠãŒã¶ãå¢ããå Žåã¯ã該åœã®ã°ã«ãŒãã«è¿œå ããŠãããã ãã§OKã§ãã SSOã°ã«ãŒãäœæç»é¢ èš±å¯ã»ããã®äœæ èš±å¯ã»ããã¯ãIAMããŒã«ã®çŽ ã«ãªããã®ã§ãã ããã§èšå®ããããªã·ãŒãåAWSã¢ã«ãŠã³ãã«IAMããŒã«ãIAMããªã·ãŒãšããŠããããžã§ãã³ã°ãããŸãã ããããžã§ãã³ã°å
ã®AWSã¢ã«ãŠã³ãã«æ¢ã«ããIAMããªã·ãŒã䜿ãããå Žåã¯ãã«ã¹ã¿ããŒãããŒãžãããªã·ãŒã§ãã®ååãèšå®ããã°å²ãåœãŠãããšãã§ããŸãã ååãééã£ãŠããŠååšããªãIAMããªã·ãŒãèšå®ããŠããŸã£ãå Žåã¯ãããããžã§ãã³ã°æã«ãšã©ãŒã«ãªããŸãã èš±å¯ã»ããäœæç»é¢ ããããžã§ãã³ã° âSSOãŠãŒã¶ãŸãã¯ã°ã«ãŒãâ ãš âèš±å¯ã»ããâ ãé©çšãããAWSã¢ã«ãŠã³ãã«ããããžã§ãã³ã°ããããšã§ã察象SSOãŠãŒã¶ã§è©²åœAWSã¢ã«ãŠã³ãã«ãã°ã€ã³å¯èœã«ãªããŸãã ããããžã§ãã³ã°æŠèŠå³ SSOã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ SSOãŠãŒã¶ã§ãã°ã€ã³ããAWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ã«ãAWSã¢ã«ãŠã³ããžã®ãªã³ã¯ã®äžèЧã衚瀺ãããŸãã ãã®ãªã³ã¯ããåAWSã¢ã«ãŠã³ãã«ãä»»æã®ããŒã«ã§ãã°ã€ã³ããããšãã§ããŸãã䟿å©ã§ããïŒ AWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ äžæçãªã¢ã¯ã»ã¹ããŒã¯CLIã§ãååŸã§ããŸããããã®ç»é¢ããã ã¢ã¯ã»ã¹ã㌠ã®ãªã³ã¯ãã¯ãªãã¯ãããšäžèЧç»é¢ã衚瀺ãããŸãã AWSã¢ã¯ã»ã¹ããŒã¿ã« ã¢ã¯ã»ã¹ããŒç¢ºèªç»é¢ å°å
¥åŸã«å¯Ÿå¿ããããš ãããŸã§ã®æé ã§ãããžã¡ã³ãã³ã³ãœãŒã«ã®ã§ãã°ã€ã³ã¯ã§ããããã«ãªã£ãŠããŸããããã以å€ã®ããŒã«çã§å©çšããããã«ããããšãããã§ã¯èª¬æããŸãã ~/.aws/configã®ä¿®æ£ ã¿ãŒããã«ã§AWS CLIãå©çšããããã«ããããŸã§ã¢ã¯ã»ã¹ããŒãçŽæ¥æå®ããŠããã®ããSSOãŠãŒã¶å¯Ÿå¿ã®èšè¿°ã«å€æŽããå¿
èŠããããŸãã ã¢ã¯ã»ã¹ããŒãªã©ã®ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã®èšèŒãäžèŠã«ãªãããã®å
å®¹ãæŒæŽ©ããŠããã¡ãŒãžãå°ãªãã§ãã [default] sso_session = m y-sso sso_account_id = 999999999999 sso_role_name = x xxxxxxxxxxx [sso-session my-sso] sso_start_url = h ttps://xxxxxxxxxxxx.awsapps.com/start sso_registration_scopes = s so:account:access sso_sessionã®èšå®ãå€ãaws_sdkã ãšå¯Ÿå¿ããŠããªãã£ããããã®ã§ãææ°ã®aws_sdkã䜿ãããã« mise (éçºããŒã«ç®¡ççšããŒã«)ã«èšå®ããŸããã [tools] awscli = "latest" ãã®èšå®ãããç¶æ
ã§ aws sso login ãå®è¡ãããšèªèšŒç»é¢ã®ãã©ãŠã¶ãèªåã§ç«ã¡äžããããã©ãŠã¶ã§ã®èªèšŒå®äºåŸã«ã¿ãŒããã«ã§CLIã䜿ããããã«ãªããŸãã ã¿ãŒããã«ã§sso login ãã©ãŠã¶ã§èªèšŒ éçºç°å¢ãžã®ã¢ã¯ã»ã¹ããŒã®æž¡ãæ¹ éçºç°å¢ã«ãããŠã¢ã¯ã»ã¹ããŒã®èšå®ãå¿
èŠãªç®æãããããããæ¯æ¥ããŒã¿ã«ç»é¢ããã³ããã§æŽæ°ããŠãã ãããšããã®ã¯é¢åãããã®ã§ãæ¯æ¥1åæåã«ã·ã§ã«ãå®è¡ããŠãããããã«ããŸããïŒãããé¢åãªã®ã§ãããªãã§ã©ãã«ãã§ããã°è¯ãã£ãã®ã§ããã»ã»ã»ç¡å¿µïŒã ãã®å®è¡ã«ã¯SSOã®èªèšŒæ
å ±ãã·ã§ã«å
ã®åŠçã§å©çšãããã aws2-wrap ãå©çšãã.envãã¡ã€ã«ã®æŽæ°ã«ã¯ python-dotenv ãå©çšããŸããã ãããmiseã§å®çŸ©ããããšã§ãå
šéçºã¡ã³ããŒã«ãããªã察å¿ã§ããŸããã # äžéšæç² if ! $(aws2-wrap --profile " $profile " --export ); then aws sso login --profile= " $profile " eval "$( aws2-wrap --profile " $profile " --export )" fi # äžéšæç² from dotenv import set_key def update_env_file ( env_file , key_value_pairs ): try : for key in key_value_pairs: value = key_value_pairs[key] set_key(env_file, key, value, quote_mode = 'never' ) except Exception as e: print (e) Terraform, Packerã®å¯Ÿå¿ ææ°ã®TerraformãPackerã§ã¯aws ssoã«å¯Ÿå¿ããŠããã®ã§ãssoã®profileããã®ãŸãŸäœ¿ãããšãã§ããŸãïŒAssumeRoleã«ã¯å¯Ÿå¿ããŠããªãã£ãã®ã§ãããã察å¿ãããæã¯å€§å€ã§ããã»ã»ã»ïŒã Terraformã¯ç°å¢äŸåããªããããå®è¡ç°å¢ãã³ã³ããåãã³ã³ããå
ã§å®è¡ããŠããã®ã§ãããâãã°ã€ã³æã«SSOã»ãã·ã§ã³ã®ååšæç¡ã®ç¢ºèªâ â âãªããã°SSOãã°ã€ã³â ããããããšã§ã aws sso login ã®äºåå®è¡ãæèããªããŠãè¯ãããã«ããŸããã # äžéšæç² function get_caller_identity () { set +eu for i in { 1..3} ; do command "aws sts get-caller-identity --profile $1 " if [[ $? = 0 ]]; then break else echo "Not logged in" command "aws sso login --profile $1 " fi done set -eu } ææ°ã®Packerã¯aws ssoã«å¯Ÿå¿ããŠãããšåè¿°ããŸãããããªãã ãç°å¢ã«ãã sso-session ãå¹ããã«ãšã©ãŒã«ãªãå ŽåããããŸããããã®å Žåã¯ã¬ã¬ã·ãŒãªèšè¿°æ¹æ³ã§åé¿ã§ããŸãã [profile packer] credential_process = a ws --profile default configure export-credentials --format process region = a p-northeast-1 output = j son 察å¿ããŠè¯ãã£ãã㚠管çè
ç®ç·ã§è¯ãã£ãã㚠管çè
ç®ç·ã§ã¯ãAWSã®ãŠãŒã¶ç®¡çã倧忥œã«ãªããŸããã ãããŸã§éçºã¡ã³ããŒãå¢ããéã«ã¯ãè€æ°ã®AWSã¢ã«ãŠã³ãã«å¯Ÿãããããã«ãIAMãŠãŒã¶ã®äœæãã¢ã¯ã»ã¹ããŒã®çæããããã®åŸåæãã°ã€ã³ãã¹ã¯ãŒããšã¢ã¯ã»ã¹ããŒãã¡ã³ããŒã«é
åžããªããã°ãªããªãã£ããããäœæ¥ã倧åç
©éã§ããã IAM Identity Centerå°å
¥åŸã¯ã 1ã€ã®AWSã¢ã«ãŠã³ãã§SSOãŠãŒã¶ãäœæããã ãã§ã ãæåŸ
ã¡ãŒã«ãåæã«éãããŸãã ãŸããäžããŠããæš©éã®ç®¡çãæ¥œã«ãªããŸããã IAM Identity Centerã®ç»é¢ãèŠãã°ã誰ãã©ã®AWSã¢ã«ãŠã³ãã«ã©ããªæš©éãæã£ãŠãããå
šãŠããããŸãããèšå®ããã®ãããã ããªã®ã§ ãããããªAWSã¢ã«ãŠã³ããåºå
¥ãããŠç¢ºèªã»èšå®ããå¿
èŠããªããªããŸããã å©çšè
ç®ç·ã§è¯ãã£ãããš å©çšè
ç®ç·ã§ã¯ãåAWSã¢ã«ãŠã³ããžã®ãã°ã€ã³ãããŒã¿ã«ç»é¢ã®ãªã³ã¯ããè¡ãããšãã§ããã®ã§ã AWSã¢ã«ãŠã³ãããšã«ãã°ã€ã³ã®äœæ¥ãå¿
èŠãªããªã£ãã®ã楜ã§ãããåAWSã¢ã«ãŠã³ãæ¯ã«ãã°ã€ã³æ
å ±ãMFAæ
å ±ãä¿æããªããŠãè¯ããªã£ãã®ã管çãæ°æ¥œã«ãªããŸãã ã 察å¿ããŠå°ã£ãããš 12æéã®å£ SSOãŠãŒã¶ã®ã»ãã·ã§ã³æéã®äžéã12æéã®ãããæ9æã«ãã°ã€ã³ãããšå€9æã«ã»ãã·ã§ã³ãåããŠããŸããŸãããã®ããšãå¿ããŠ12æéåŸã«æ¥ã«éçºç°å¢ã§ãšã©ãŒãåºå§ããŠããªãããããããããïŒããšããŸã«é©ããããŸãïŒ12æé以äžåãããšãã»ãšãã©ãªãã®ã§ãã£ãã«ééããŸããããã ããããå¿ããŸãïŒã æ·±å€ã¡ã³ãã®éã«ãããèµ·ãããšãã©ãã«ã«ãªããŸãã®ã§ããã®éã¯äœæ¥åã«å¿
ããã°ã€ã³ãçŽãããã«ããŠããŸãã å人çã«ã¯ã»ãã·ã§ã³æéã®äžéã®æéããå°ãäžããŠæ¬²ããã§ãã å©çšã§ããªããµãŒãããŒãã£ãŒããŒã«ã®ååš AWSã«ã¢ã¯ã»ã¹ããããã®ãµãŒãããŒãã£ãŒããŒã«ã¯æ§ã
ãããŸããã AWS_ACCESS_KEY_ID ã AWS_SECRET_ACCESS_KEY ã®2é
ç®ããèšå®ã§ããªããã®ããããŸãã SSOãŠãŒã¶ã§ãã°ã€ã³ããã«ã¯ããããã«å ã AWS_SESSION_TOKEN ã®å€ãå¿
èŠã§ãããããèšå®ã§ããªãããŒã«ã¯SSOãŠãŒã¶ã§ã¯å©çšã§ããªãããšã«ãªããŸãã æè¿ã§ã¯SSOãŠãŒã¶ã§ãå©çšã§ããããã«ã¢ããã°ã¬ãŒããããŠããããŒã«ãå¢ããŠããŠããŸãã®ã§ãä»ãŸã§äœ¿ã£ãŠããããŒã«ã䜿ããªããªã£ãå Žåã¯ä»£æ¿ã®ããŒã«ã䜿ããŸãããã ãŸãšã ããã¯çµ¶å¯Ÿåã§ã¯ãªããŠãIAM Identity Centerãå°å
¥ããããšã§ããã€ã«ã®åæžããæ
å ±æŒæŽ©ãªã¹ã¯ã®åæžããäž¡æ¹å®çŸããããšãã§ããŸããã ãã¡ããç§ãã¡ã®ææŠã¯ããã§çµããã§ã¯ãªãããµãŒãã¹ã®å質ãäžãããããéçºã¡ã³ããŒãéçºã«éäžã§ããç°å¢ãäœãããã 俺ãã¡ã®æŠãã¯ãŸã å§ãŸã£ãã°ãã ãã§ãã ãããŠãææ¥12æ4æ¥ã¯ @shigerisa ãããäœãããã£ãšé¢çœãèšäºãæžããŠãããŠããããã§ãïŒã楜ãã¿ã«ïŒ Weâre hiring! ã¡ãã¬ãŒã§ã¯åçš®ãšã³ãžãã¢ãçµ¶è³åéäžã§ãïŒ ã«ãžã¥ã¢ã«é¢è«ãã€ã§ãWelcomeã§ãã®ã§ãã話ãã ãã§ãèããŠã¿ããããããç§ã®æšãã®è©±ãèããŠæ¬²ããããªã©ãªãã§ãããŸããŸããã®ã§ããæ°è»œã«ãåãåãããã ããïŒ åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ãã¡ãã®èšäºã¯ MedleyïŒã¡ãã¬ãŒïŒ Advent Calendar 2024 ã®3æ¥ç®ã®èšäºã§ãã Who are you? ã¡ãã¬ãŒã§äž»ã«SRE掻åãè¡ã£ãŠãã人æãã©ãããã©ãŒã æ¬éš 第åéçºã°ã«ãŒãã®çäºã§ãã æåã«ç°¡åã«FAQ圢åŒã§èªå·±ç޹ä»ãããŠããã ãããšæããŸãã ïŒæšæ¥ã¯äœãé£ã¹ãŸãããïŒ ïŒ éººç³»ãã¡ã¹ãããŒãã§ã¯äžçªå¥œããªå°è«žãã°ã ïŒå¥œããªæ¬ã¯äœã§ããïŒ ïŒ æ³äºæ£ããã®èªäŒæžãäžå乿ãã¯å¿ã«æ®ã£ãŠããŸãã ïŒéã³ã«è¡ããªãã©ãã«è¡ããŸããïŒ ïŒ ã¢ãŠããã¢ã奜ããªã®ã§ãã£ã³ããªã©ã ä»åã¯å©çšããŠããAWSç°å¢ã« IAM Identity Center ãå°å
¥ãã話ããããŠããã ãããšæããŸãã ã»ãã¥ãªãã£ãšç®¡çã³ã¹ãã®å€©ç§€ ã¡ãã¬ãŒã§ã¯ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã¯å³éã«ç®¡çãããå¹³æã§å€éšããŒã«ã«ä¿åãããããšã¯ãããŸãããAWSã®IAMãŠãŒã¶ã®ã¢ã¯ã»ã¹ããŒã«é¢ããŠãåãã§ãã ãã ãããã§ãå¿é
ã«ãªãã®ã¯ PCã®äžã«å¹³æã§æ®ãæ
å ± ãPCãå³éã«ç®¡çãããŠããã®ã§ããããæŒæŽ©ãããã®ã§ã¯ãããŸããããããã§ãå¯èœæ§ã¯ãŒãã§ã¯ãããŸããã äžæã¯AssumeRoleã䜿ãããšã§æŒæŽ©æã®ãªã¹ã¯ãæžãããŸããã æåã®èªèšŒã§ã¯äœãã§ããªãåŒ±ãæš©éã§ãAssumeRoleã§æš©éã®åŒ·ãããŒã«ã«å€èº«ããæ¹åŒãå°å
¥ããŸããã ãã®è©±ãèããŠãè
ã«å
垯ãå·»ããåŠçæã®å°å¹Žã倩çã®ãé¢ã被ãããããšãæµ®ããã ããªãã¯AWSããããããŒã銎æã¿ã®ãã®ããã°ã®æ¬èãªèªè
ã§ãã AssumeRoleæŠèŠå³ ããã§ããŸã 課é¡ã¯ãããŸããã IAMãŠãŒã¶ãšAssumeRoleã®ç®¡çã³ã¹ã ã§ãã AWSã¢ã«ãŠã³ãã¯ãµãŒãã¹ããšã«è€æ°ååšããããã«æ¬çªç°å¢ãã¹ããŒãžã³ã°ç°å¢ã§ãåããŠãããŸããããããã®AWSã¢ã«ãŠã³ãã«ã¢ã¯ã»ã¹ã§ããç°å¢ãéçºã¡ã³ããŒã«æäŸããå¿
èŠããããŸãã AssumeRoleã¯å€èº«ããå
ãšå€èº«ããå
ã®èšå®ãããå¿
èŠããããAWSã¢ã«ãŠã³ããè·šãå Žåã¯ããããã®AWSã¢ã«ãŠã³ãã«èšå®ãå¿
èŠã«ãªããŸããéçºã¡ã³ããŒã®ç°åããã床ã«ãã¡ããã¡ãã®AWSã¢ã«ãŠã³ãã«ãã®èšå®ãããããšããé¢åãªãã€ã«ã«ãªã£ãŠããŸããã ã»ãã¥ã¢ãªç°å¢ãç¶æãããŸãŸã管çã³ã¹ãããªãã¹ãäžãããã ããã§å°å
¥ã決ããã®ã IAM Identity Center ã§ããã IAM Identity Centerã®å°å
¥æ€èš çµè«ãå
ã«ç³ãäžããŸããšãIAM Identity Centerãå°å
¥ããããšã§ ã»ãã¥ã¢ãªç°å¢ãç¶æããªãããã€ã«ã®åæžãå®çŸããããšãã§ããŸãã ã å®ç§ã§ç©¶æ¥µãšããã»ã©ã§ã¯ãããŸãããã誰ããç®ã奪ãããŠããçæ³ã®ç°å¢ã«äžæ©è¿ã¥ãããšããŸããã IAM Identity Centerãããã«ç®¡çããAWS Control Towerã®å°å
¥ãæ€èšããŸããããæ¢ã«ããç°å¢ã«å°å
¥ããããšã®äºæãã¬å¶éããããããšã®ãªã¹ã¯ããAWS Configãå€çšãããããšã§æãã¬ã³ã¹ãå¢ãçºçãããšã®æ
å ±ããããä»åã¯èŠéãããšã«ããŸããã IAM Identity Centerãšã¯ å
㯠AWS Single Sign-On ïŒAWS SSOïŒ ãšãããµãŒãã¹åã§ããã ããã¯IAMãŠãŒã¶ãšã¯å
šãå¥ç©ã®ãŠãŒã¶ïŒãããSSOãŠãŒã¶ãšããŸãïŒãäœæããSSOãŠãŒã¶ãåAWSã¢ã«ãŠã³ãã®åIAMããŒã«ãæã£ããŠãŒã¶ã«å€èº«ããããšãã§ããæ©èœã§ãã IAM Identity CenteræŠèŠå³ IAM Identity Centerãå°å
¥ããæ±ºãæ SSOãŠãŒã¶ãšæš©éã®ç®¡çã¯äžã€ã®AWSã¢ã«ãŠã³ãã®IAM Identity Centerã§ç®¡çããããšãã§ããŸãã ããã¯AWS Organizationsã®æ©èœã®äžã«ä¹ãæ©èœã§ããã幞ãå
ã
ãããå°å
¥ããŠããããšã§ãããã«çµã¿èŸŒãããšãã§ããŸããïŒã¡ãªã¿ã«çŸåšã¯IdPãèšå®ããããšã§AWS OrganizationsããªããŠããã®æ©èœã䜿ãããšãã§ããŸãïŒã ã€ãŸãã è€æ°ã®AWSã¢ã«ãŠã³ãã®è€æ°ã®ãŠãŒã¶ã®è€æ°ã®ããŒã«ãäžã€ã®IAM Identity Centerã§å
šãŠç®¡çããããšãã§ããã®ã§ã ã ã§ã¯ãåAWSã¢ã«ãŠã³ãã§æ¢ã«äœæããŠããŸã£ãIAMããªã·ãŒããIAM Identity Centerã§åãå
容ã§äœãçŽããªããšãããªãããšãããšãããªããšããªããã«ã¹ã¿ã ããŒã«ãšããèšå®ã§ãIAMããªã·ãŒåã ãå®çŸ©ããããšã§æ¢åã®IAMããªã·ãŒããã®ãŸãŸæŽ»ããããšãã§ããŸãã ãããŠãSSOãŠãŒã¶ã¯æä¹
çãªã¢ã¯ã»ã¹ããŒãæã€ããšãã§ãããæå€§ã§12æéã®æéä»ãã¢ã¯ã»ã¹ããŒããæã€ããšãã§ããŸãããåŸã£ãŠã ä»®ã«äžãäžã¢ã¯ã»ã¹ããŒãæŒæŽ©ããŠã12æéåŸã«ã¯äœ¿ããªããªããŸã ã ãŸãã«æåŒ·ã§ç¡æµã®IAM Identity Centerã§ãã IAM Identity Centerã®å°å
¥ ããã§ã¯IAM Identity Centerã®å°å
¥ã®æµããç°¡åã«èª¬æããããŸãã äžçªæåã¯IAM Identity Centerãæå¹ã«ããããšã§ãããããã¯å²æããŠæå¹åããåŸã®æé ãèšèŒããŠãããŸãã IAM Identity Centerå
šäœå³ SSOãŠãŒã¶ã®äœæ SSOãŠãŒã¶ã¯åè¿°ããéãIAMãŠãŒã¶ãšã¯å
šãå¥ç©ãªã®ã§ãæ°ãã«å
šå¡åäœæããå¿
èŠããããŸãã æäœéå¿
èŠãªã®ã¯ååãšã¡ãŒã«ã¢ãã¬ã¹ã®ã¿ã§ãã äœæç»é¢ã«ä»»æé
ç®ã§äœæãé»è©±çªå·ãªã©ãã£ããããã®ã§ãããã·ã¹ãã çã«ã¯å
šãé¢ä¿ãªãããã§ããIAM Identity CenterãIdPãšããŠäœ¿ããšãã®ããã®èšå®ã§ããããã SSOãŠãŒã¶äœæç»é¢ SSOã°ã«ãŒãã®äœæ SSOã°ã«ãŒããšã¯ãSSOãŠãŒã¶ãšåŸè¿°ããèš±å¯ã»ããããŸãšããããã®ãã®ã§ãã æ°ããSSOãŠãŒã¶ãå¢ããå Žåã¯ã該åœã®ã°ã«ãŒãã«è¿œå ããŠãããã ãã§OKã§ãã SSOã°ã«ãŒãäœæç»é¢ èš±å¯ã»ããã®äœæ èš±å¯ã»ããã¯ãIAMããŒã«ã®çŽ ã«ãªããã®ã§ãã ããã§èšå®ããããªã·ãŒãåAWSã¢ã«ãŠã³ãã«IAMããŒã«ãIAMããªã·ãŒãšããŠããããžã§ãã³ã°ãããŸãã ããããžã§ãã³ã°å
ã®AWSã¢ã«ãŠã³ãã«æ¢ã«ããIAMããªã·ãŒã䜿ãããå Žåã¯ãã«ã¹ã¿ããŒãããŒãžãããªã·ãŒã§ãã®ååãèšå®ããã°å²ãåœãŠãããšãã§ããŸãã ååãééã£ãŠããŠååšããªãIAMããªã·ãŒãèšå®ããŠããŸã£ãå Žåã¯ãããããžã§ãã³ã°æã«ãšã©ãŒã«ãªããŸãã èš±å¯ã»ããäœæç»é¢ ããããžã§ãã³ã° âSSOãŠãŒã¶ãŸãã¯ã°ã«ãŒãâ ãš âèš±å¯ã»ããâ ãé©çšãããAWSã¢ã«ãŠã³ãã«ããããžã§ãã³ã°ããããšã§ã察象SSOãŠãŒã¶ã§è©²åœAWSã¢ã«ãŠã³ãã«ãã°ã€ã³å¯èœã«ãªããŸãã ããããžã§ãã³ã°æŠèŠå³ SSOã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ SSOãŠãŒã¶ã§ãã°ã€ã³ããAWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ã«ãAWSã¢ã«ãŠã³ããžã®ãªã³ã¯ã®äžèЧã衚瀺ãããŸãã ãã®ãªã³ã¯ããåAWSã¢ã«ãŠã³ãã«ãä»»æã®ããŒã«ã§ãã°ã€ã³ããããšãã§ããŸãã䟿å©ã§ããïŒ AWSã¢ã¯ã»ã¹ããŒã¿ã«ç»é¢ äžæçãªã¢ã¯ã»ã¹ããŒã¯CLIã§ãååŸã§ããŸããããã®ç»é¢ããã ã¢ã¯ã»ã¹ã㌠ã®ãªã³ã¯ãã¯ãªãã¯ãããšäžèЧç»é¢ã衚瀺ãããŸãã AWSã¢ã¯ã»ã¹ããŒã¿ã« ã¢ã¯ã»ã¹ããŒç¢ºèªç»é¢ å°å
¥åŸã«å¯Ÿå¿ããããš ãããŸã§ã®æé ã§ãããžã¡ã³ãã³ã³ãœãŒã«ã®ã§ãã°ã€ã³ã¯ã§ããããã«ãªã£ãŠããŸããããã以å€ã®ããŒã«çã§å©çšããããã«ããããšãããã§ã¯èª¬æããŸãã ~/.aws/configã®ä¿®æ£ ã¿ãŒããã«ã§AWS CLIãå©çšããããã«ããããŸã§ã¢ã¯ã»ã¹ããŒãçŽæ¥æå®ããŠããã®ããSSOãŠãŒã¶å¯Ÿå¿ã®èšè¿°ã«å€æŽããå¿
èŠããããŸãã ã¢ã¯ã»ã¹ããŒãªã©ã®ã¯ã¬ãã³ã·ã£ã«ãªæ
å ±ã®èšèŒãäžèŠã«ãªãããã®å
å®¹ãæŒæŽ©ããŠããã¡ãŒãžãå°ãªãã§ãã [default] sso_session = m y-sso sso_account_id = 999999999999 sso_role_name = x xxxxxxxxxxx [sso-session my-sso] sso_start_url = h ttps://xxxxxxxxxxxx.awsapps.com/start sso_registration_scopes = s so:account:access sso_sessionã®èšå®ãå€ãaws_sdkã ãšå¯Ÿå¿ããŠããªãã£ããããã®ã§ãææ°ã®aws_sdkã䜿ãããã« mise (éçºããŒã«ç®¡ççšããŒã«)ã«èšå®ããŸããã [tools] awscli = "latest" ãã®èšå®ãããç¶æ
ã§ aws sso login ãå®è¡ãããšèªèšŒç»é¢ã®ãã©ãŠã¶ãèªåã§ç«ã¡äžããããã©ãŠã¶ã§ã®èªèšŒå®äºåŸã«ã¿ãŒããã«ã§CLIã䜿ããããã«ãªããŸãã ã¿ãŒããã«ã§sso login ãã©ãŠã¶ã§èªèšŒ éçºç°å¢ãžã®ã¢ã¯ã»ã¹ããŒã®æž¡ãæ¹ éçºç°å¢ã«ãããŠã¢ã¯ã»ã¹ããŒã®èšå®ãå¿
èŠãªç®æãããããããæ¯æ¥ããŒã¿ã«ç»é¢ããã³ããã§æŽæ°ããŠãã ãããšããã®ã¯é¢åãããã®ã§ãæ¯æ¥1åæåã«ã·ã§ã«ãå®è¡ããŠãããããã«ããŸããïŒãããé¢åãªã®ã§ãããªãã§ã©ãã«ãã§ããã°è¯ãã£ãã®ã§ããã»ã»ã»ç¡å¿µïŒã ãã®å®è¡ã«ã¯SSOã®èªèšŒæ
å ±ãã·ã§ã«å
ã®åŠçã§å©çšãããã aws2-wrap ãå©çšãã.envãã¡ã€ã«ã®æŽæ°ã«ã¯ python-dotenv ãå©çšããŸããã ãããmiseã§å®çŸ©ããããšã§ãå
šéçºã¡ã³ããŒã«ãããªã察å¿ã§ããŸããã # äžéšæç² if ! $(aws2-wrap --profile " $profile " --export ); then aws sso login --profile= " $profile " eval "$( aws2-wrap --profile " $profile " --export )" fi # äžéšæç² from dotenv import set_key def update_env_file ( env_file , key_value_pairs ): try : for key in key_value_pairs: value = key_value_pairs[key] set_key(env_file, key, value, quote_mode = 'never' ) except Exception as e: print (e) Terraform, Packerã®å¯Ÿå¿ ææ°ã®TerraformãPackerã§ã¯aws ssoã«å¯Ÿå¿ããŠããã®ã§ãssoã®profileããã®ãŸãŸäœ¿ãããšãã§ããŸãïŒAssumeRoleã«ã¯å¯Ÿå¿ããŠããªãã£ãã®ã§ãããã察å¿ãããæã¯å€§å€ã§ããã»ã»ã»ïŒã Terraformã¯ç°å¢äŸåããªããããå®è¡ç°å¢ãã³ã³ããåãã³ã³ããå
ã§å®è¡ããŠããã®ã§ãããâãã°ã€ã³æã«SSOã»ãã·ã§ã³ã®ååšæç¡ã®ç¢ºèªâ â âãªããã°SSOãã°ã€ã³â ããããããšã§ã aws sso login ã®äºåå®è¡ãæèããªããŠãè¯ãããã«ããŸããã # äžéšæç² function get_caller_identity () { set +eu for i in { 1..3} ; do command "aws sts get-caller-identity --profile $1 " if [[ $? = 0 ]]; then break else echo "Not logged in" command "aws sso login --profile $1 " fi done set -eu } ææ°ã®Packerã¯aws ssoã«å¯Ÿå¿ããŠãããšåè¿°ããŸãããããªãã ãç°å¢ã«ãã sso-session ãå¹ããã«ãšã©ãŒã«ãªãå ŽåããããŸããããã®å Žåã¯ã¬ã¬ã·ãŒãªèšè¿°æ¹æ³ã§åé¿ã§ããŸãã [profile packer] credential_process = a ws --profile default configure export-credentials --format process region = a p-northeast-1 output = j son 察å¿ããŠè¯ãã£ãã㚠管çè
ç®ç·ã§è¯ãã£ãã㚠管çè
ç®ç·ã§ã¯ãAWSã®ãŠãŒã¶ç®¡çã倧忥œã«ãªããŸããã ãããŸã§éçºã¡ã³ããŒãå¢ããéã«ã¯ãè€æ°ã®AWSã¢ã«ãŠã³ãã«å¯Ÿãããããã«ãIAMãŠãŒã¶ã®äœæãã¢ã¯ã»ã¹ããŒã®çæããããã®åŸåæãã°ã€ã³ãã¹ã¯ãŒããšã¢ã¯ã»ã¹ããŒãã¡ã³ããŒã«é
åžããªããã°ãªããªãã£ããããäœæ¥ã倧åç
©éã§ããã IAM Identity Centerå°å
¥åŸã¯ã 1ã€ã®AWSã¢ã«ãŠã³ãã§SSOãŠãŒã¶ãäœæããã ãã§ã ãæåŸ
ã¡ãŒã«ãåæã«éãããŸãã ãŸããäžããŠããæš©éã®ç®¡çãæ¥œã«ãªããŸããã IAM Identity Centerã®ç»é¢ãèŠãã°ã誰ãã©ã®AWSã¢ã«ãŠã³ãã«ã©ããªæš©éãæã£ãŠãããå
šãŠããããŸãããèšå®ããã®ãããã ããªã®ã§ ãããããªAWSã¢ã«ãŠã³ããåºå
¥ãããŠç¢ºèªã»èšå®ããå¿
èŠããªããªããŸããã å©çšè
ç®ç·ã§è¯ãã£ãããš å©çšè
ç®ç·ã§ã¯ãåAWSã¢ã«ãŠã³ããžã®ãã°ã€ã³ãããŒã¿ã«ç»é¢ã®ãªã³ã¯ããè¡ãããšãã§ããã®ã§ã AWSã¢ã«ãŠã³ãããšã«ãã°ã€ã³ã®äœæ¥ãå¿
èŠãªããªã£ãã®ã楜ã§ãããåAWSã¢ã«ãŠã³ãæ¯ã«ãã°ã€ã³æ
å ±ãMFAæ
å ±ãä¿æããªããŠãè¯ããªã£ãã®ã管çãæ°æ¥œã«ãªããŸãã ã 察å¿ããŠå°ã£ãããš 12æéã®å£ SSOãŠãŒã¶ã®ã»ãã·ã§ã³æéã®äžéã12æéã®ãããæ9æã«ãã°ã€ã³ãããšå€9æã«ã»ãã·ã§ã³ãåããŠããŸããŸãããã®ããšãå¿ããŠ12æéåŸã«æ¥ã«éçºç°å¢ã§ãšã©ãŒãåºå§ããŠããªãããããããããïŒããšããŸã«é©ããããŸãïŒ12æé以äžåãããšãã»ãšãã©ãªãã®ã§ãã£ãã«ééããŸããããã ããããå¿ããŸãïŒã æ·±å€ã¡ã³ãã®éã«ãããèµ·ãããšãã©ãã«ã«ãªããŸãã®ã§ããã®éã¯äœæ¥åã«å¿
ããã°ã€ã³ãçŽãããã«ããŠããŸãã å人çã«ã¯ã»ãã·ã§ã³æéã®äžéã®æéããå°ãäžããŠæ¬²ããã§ãã å©çšã§ããªããµãŒãããŒãã£ãŒããŒã«ã®ååš AWSã«ã¢ã¯ã»ã¹ããããã®ãµãŒãããŒãã£ãŒããŒã«ã¯æ§ã
ãããŸããã AWS_ACCESS_KEY_ID ã AWS_SECRET_ACCESS_KEY ã®2é
ç®ããèšå®ã§ããªããã®ããããŸãã SSOãŠãŒã¶ã§ãã°ã€ã³ããã«ã¯ããããã«å ã AWS_SESSION_TOKEN ã®å€ãå¿
èŠã§ãããããèšå®ã§ããªãããŒã«ã¯SSOãŠãŒã¶ã§ã¯å©çšã§ããªãããšã«ãªããŸãã æè¿ã§ã¯SSOãŠãŒã¶ã§ãå©çšã§ããããã«ã¢ããã°ã¬ãŒããããŠããããŒã«ãå¢ããŠããŠããŸãã®ã§ãä»ãŸã§äœ¿ã£ãŠããããŒã«ã䜿ããªããªã£ãå Žåã¯ä»£æ¿ã®ããŒã«ã䜿ããŸãããã ãŸãšã ããã¯çµ¶å¯Ÿåã§ã¯ãªããŠãIAM Identity Centerãå°å
¥ããããšã§ããã€ã«ã®åæžããæ
å ±æŒæŽ©ãªã¹ã¯ã®åæžããäž¡æ¹å®çŸããããšãã§ããŸããã ãã¡ããç§ãã¡ã®ææŠã¯ããã§çµããã§ã¯ãªãããµãŒãã¹ã®å質ãäžãããããéçºã¡ã³ããŒãéçºã«éäžã§ããç°å¢ãäœãããã 俺ãã¡ã®æŠãã¯ãŸã å§ãŸã£ãã°ãã ãã§ãã ãããŠãææ¥12æ4æ¥ã¯ @shigerisa ãããäœãããã£ãšé¢çœãèšäºãæžããŠãããŠããããã§ãïŒã楜ãã¿ã«ïŒ Weâre hiring! ã¡ãã¬ãŒã§ã¯åçš®ãšã³ãžãã¢ãçµ¶è³åéäžã§ãïŒ ã«ãžã¥ã¢ã«é¢è«ãã€ã§ãWelcomeã§ãã®ã§ãã話ãã ãã§ãèããŠã¿ããããããç§ã®æšãã®è©±ãèããŠæ¬²ããããªã©ãªãã§ãããŸããŸããã®ã§ããæ°è»œã«ãåãåãããã ããïŒ åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« çãããããã«ã¡ã¯! ãšã³ãžã㢠/ ãšã³ãžãã¢ã»ãã¶ã€ããŒæ¡çšæ
åœã®å¹³æšã§ãã åŒç€Ÿã§ã¯ç€Ÿå
ã®ãšã³ãžãã¢ã宿ã»äžå®æã§å匷äŒãéå¬ããŠããŸãããã®å匷äŒã¯ããããã¯ãéçºã®è©±ã¯ãã¡ããã§ãããåæè¡ã®ææ°æ
å ±ã®å
±æãªã©ããäºæ¥éšã«çãŸããå
šç€Ÿçã«è¡ãäŒãšãªã£ãŠããŸãã 11/15(é)ã«ã瀟å
å匷äŒãéå¬ããã®ã§ããã顿ã Web ããã³ããšã³ãç DX Criteria ã«ã€ããŠãšããŸãããããã§äœæè
ã® 1 人ã§ããæ¥æ¬ CTO åäŒ DX Criteria WG ã®äœè€ æ©( @ahomu )ãã(ä»¥äž ahomu ãã)ãè¬åž«ãšããŠãæãããŠè¬æŒãããŠããã ããŸããã®ã§ããã®ã¬ããŒããšãªããŸãã ä»åã®å匷äŒéå¬ã®èæ¯ ä»å¹Ž 4 æã« Web ããã³ããšã³ãç DX Criteria ã çºè¡š ãããã®ãèŠãŠãå
容çã«ã¡ãã¬ãŒã§ãåèã«ã§ããéšåãéåžžã«å€ããšæããŸããã äœæè
ã® 1 人ã§ãã ahomu ããã¯çè
ã®åè·ååã ã£ããšããããšããããå匷äŒè¬åž«ãæèšºããŠå¿«è«Ÿããã ãããããéå¬ã®éã³ãšãªããŸããã å匷äŒã«ã€ããŠ è¬æŒã®æ§å ä»åã¯ç€Ÿå€ããè¬åž«ããæããããšããããšããããå匷äŒãžã¯ 25 åã»ã©ã®åå ãšãªããŸããã çå£ã«è¬æŒãèãã¡ã³ã㌠瀟å
éå®ã§ã®å匷äŒãšããããšããããahomu ããããããã¡ãã¬ãŒã«åãããŠæ¿ãã話ãããŠããã ããŸããã æŽå²ãèžãŸããæšä»ã®ããã³ããšã³ãã®æè¡çãªå€é· çŸä»£ã®ããã³ããšã³ãã®èšèšã§éèŠããªããã°ãªããªããã€ã³ããšæäŸãããããã¯ãã®ç¹æ§ã®é¢ä¿ éçºæç¶æ§ãå®çŸããããã®ãéçºç°å¢ã«ã€ã㊠Web ããã³ããšã³ãç DX Criteria ã®æãç«ã¡ãç®çããåŒç€Ÿã®ç¶æ³ã亀ãããªãã解説 Web ããã³ããšã³ãç DX Criteria ã®ããããã®é
ç®ã«ã€ããŠãåŒç€Ÿã®ç¶æ³ãèžãŸããŠè§£èª¬ ã¢ã»ã¹ã¡ã³ãåŸã«ãã©ã®ãããªæŽçãããŠæ¹åããŠããã°ãããã®æéã«ã€ã㊠䜳å¢ã«å
¥ã£ãè¬æŒã®æ§å äžè¿°ãããã®ã¯å
容ã®äžäŸã§ãå
šãŠããäŒãã§ããŸãããåå è
ããã Web ããã³ããšã³ãç DX Criteria ããã¡ãã¬ãŒã®ãããã¯ããããŒã¹ã§èãããããããªè¬çŸ©ãè¡ãªã£ãŠããã ããŸããã åå è
ããã Web ããã³ããšã³ãç DX Criteria ã®å
容ãè¶ããããã³ããšã³ãæè¡ã«ã€ããŠã®è³ªåãªã©ãé£ã³åºããŠã倧å€çæ³ã®ãã¡ã«çµäºããŸããã æ¹ããŠãããã¯ãã®ããã³ããšã³ãéçºãäºæ¥çºå±ã«ã©ã®ããã«ç¹ããããšããèŠç¹ã§èããããšãã§ãããéåžžã«ææçŸ©ãªæéãšãªããŸããã å€å¿ã®äžãä»åã®å匷äŒè¬åž«ã快諟ããŠãã ãã£ã ahomu ããã«å€§å€æè¬ããŠãããŸããããããšãããããŸãã! ahomu ãããšèšå¿µæ®åœ± ãããã« ã¡ãã¬ãŒã§ã¯ãããããæ©äŒãããã°ã瀟å
ã®éçºè
åãã«å€éšè¬åž«ãæèããŠå匷äŒãªã©ãéããŠããäºå®ã§ãã èªåã®æè¡ãè²ã
ãªè§åºŠããé«ããŠãããã!ãšèããŠãããšã³ãžãã¢ã»ãã¶ã€ããŒã®æ¹ã¯ãã²ãé£çµ¡ãã ããã https://www.medley.jp/jobs/
ã¯ããã« çãããããã«ã¡ã¯! ãšã³ãžã㢠/ ãšã³ãžãã¢ã»ãã¶ã€ããŒæ¡çšæ
åœã®å¹³æšã§ãã åŒç€Ÿã§ã¯ç€Ÿå
ã®ãšã³ãžãã¢ã宿ã»äžå®æã§å匷äŒãéå¬ããŠããŸãããã®å匷äŒã¯ããããã¯ãéçºã®è©±ã¯ãã¡ããã§ãããåæè¡ã®ææ°æ
å ±ã®å
±æãªã©ããäºæ¥éšã«çãŸããå
šç€Ÿçã«è¡ãäŒãšãªã£ãŠããŸãã 11/15(é)ã«ã瀟å
å匷äŒãéå¬ããã®ã§ããã顿ã Web ããã³ããšã³ãç DX Criteria ã«ã€ããŠãšããŸãããããã§äœæè
ã® 1 人ã§ããæ¥æ¬ CTO åäŒ DX Criteria WG ã®äœè€ æ©( @ahomu )ãã(ä»¥äž ahomu ãã)ãè¬åž«ãšããŠãæãããŠè¬æŒãããŠããã ããŸããã®ã§ããã®ã¬ããŒããšãªããŸãã ä»åã®å匷äŒéå¬ã®èæ¯ ä»å¹Ž 4 æã« Web ããã³ããšã³ãç DX Criteria ã çºè¡š ãããã®ãèŠãŠãå
容çã«ã¡ãã¬ãŒã§ãåèã«ã§ããéšåãéåžžã«å€ããšæããŸããã äœæè
ã® 1 人ã§ãã ahomu ããã¯çè
ã®åè·ååã ã£ããšããããšããããå匷äŒè¬åž«ãæèšºããŠå¿«è«Ÿããã ãããããéå¬ã®éã³ãšãªããŸããã å匷äŒã«ã€ããŠ è¬æŒã®æ§å ä»åã¯ç€Ÿå€ããè¬åž«ããæããããšããããšããããå匷äŒãžã¯ 25 åã»ã©ã®åå ãšãªããŸããã çå£ã«è¬æŒãèãã¡ã³ã㌠瀟å
éå®ã§ã®å匷äŒãšããããšããããahomu ããããããã¡ãã¬ãŒã«åãããŠæ¿ãã話ãããŠããã ããŸããã æŽå²ãèžãŸããæšä»ã®ããã³ããšã³ãã®æè¡çãªå€é· çŸä»£ã®ããã³ããšã³ãã®èšèšã§éèŠããªããã°ãªããªããã€ã³ããšæäŸãããããã¯ãã®ç¹æ§ã®é¢ä¿ éçºæç¶æ§ãå®çŸããããã®ãéçºç°å¢ã«ã€ã㊠Web ããã³ããšã³ãç DX Criteria ã®æãç«ã¡ãç®çããåŒç€Ÿã®ç¶æ³ã亀ãããªãã解説 Web ããã³ããšã³ãç DX Criteria ã®ããããã®é
ç®ã«ã€ããŠãåŒç€Ÿã®ç¶æ³ãèžãŸããŠè§£èª¬ ã¢ã»ã¹ã¡ã³ãåŸã«ãã©ã®ãããªæŽçãããŠæ¹åããŠããã°ãããã®æéã«ã€ã㊠䜳å¢ã«å
¥ã£ãè¬æŒã®æ§å äžè¿°ãããã®ã¯å
容ã®äžäŸã§ãå
šãŠããäŒãã§ããŸãããåå è
ããã Web ããã³ããšã³ãç DX Criteria ããã¡ãã¬ãŒã®ãããã¯ããããŒã¹ã§èãããããããªè¬çŸ©ãè¡ãªã£ãŠããã ããŸããã åå è
ããã Web ããã³ããšã³ãç DX Criteria ã®å
容ãè¶ããããã³ããšã³ãæè¡ã«ã€ããŠã®è³ªåãªã©ãé£ã³åºããŠã倧å€çæ³ã®ãã¡ã«çµäºããŸããã æ¹ããŠãããã¯ãã®ããã³ããšã³ãéçºãäºæ¥çºå±ã«ã©ã®ããã«ç¹ããããšããèŠç¹ã§èããããšãã§ãããéåžžã«ææçŸ©ãªæéãšãªããŸããã å€å¿ã®äžãä»åã®å匷äŒè¬åž«ã快諟ããŠãã ãã£ã ahomu ããã«å€§å€æè¬ããŠãããŸããããããšãããããŸãã! ahomu ãããšèšå¿µæ®åœ± ãããã« ã¡ãã¬ãŒã§ã¯ãããããæ©äŒãããã°ã瀟å
ã®éçºè
åãã«å€éšè¬åž«ãæèããŠå匷äŒãªã©ãéããŠããäºå®ã§ãã èªåã®æè¡ãè²ã
ãªè§åºŠããé«ããŠãããã!ãšèããŠãããšã³ãžãã¢ã»ãã¶ã€ããŒã®æ¹ã¯ãã²ãé£çµ¡ãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« çãããããã«ã¡ã¯! ãšã³ãžã㢠/ ãšã³ãžãã¢ã»ãã¶ã€ããŒæ¡çšæ
åœã®å¹³æšã§ãã åŒç€Ÿã§ã¯ç€Ÿå
ã®ãšã³ãžãã¢ã宿ã»äžå®æã§å匷äŒãéå¬ããŠããŸãããã®å匷äŒã¯ããããã¯ãéçºã®è©±ã¯ãã¡ããã§ãããåæè¡ã®ææ°æ
å ±ã®å
±æãªã©ããäºæ¥éšã«çãŸããå
šç€Ÿçã«è¡ãäŒãšãªã£ãŠããŸãã 11/15(é)ã«ã瀟å
å匷äŒãéå¬ããã®ã§ããã顿ã Web ããã³ããšã³ãç DX Criteria ã«ã€ããŠãšããŸãããããã§äœæè
ã® 1 人ã§ããæ¥æ¬ CTO åäŒ DX Criteria WG ã®äœè€ æ©( @ahomu )ãã(ä»¥äž ahomu ãã)ãè¬åž«ãšããŠãæãããŠè¬æŒãããŠããã ããŸããã®ã§ããã®ã¬ããŒããšãªããŸãã ä»åã®å匷äŒéå¬ã®èæ¯ ä»å¹Ž 4 æã« Web ããã³ããšã³ãç DX Criteria ã çºè¡š ãããã®ãèŠãŠãå
容çã«ã¡ãã¬ãŒã§ãåèã«ã§ããéšåãéåžžã«å€ããšæããŸããã äœæè
ã® 1 人ã§ãã ahomu ããã¯çè
ã®åè·ååã ã£ããšããããšããããå匷äŒè¬åž«ãæèšºããŠå¿«è«Ÿããã ãããããéå¬ã®éã³ãšãªããŸããã å匷äŒã«ã€ããŠ è¬æŒã®æ§å ä»åã¯ç€Ÿå€ããè¬åž«ããæããããšããããšããããå匷äŒãžã¯ 25 åã»ã©ã®åå ãšãªããŸããã çå£ã«è¬æŒãèãã¡ã³ã㌠瀟å
éå®ã§ã®å匷äŒãšããããšããããahomu ããããããã¡ãã¬ãŒã«åãããŠæ¿ãã話ãããŠããã ããŸããã æŽå²ãèžãŸããæšä»ã®ããã³ããšã³ãã®æè¡çãªå€é· çŸä»£ã®ããã³ããšã³ãã®èšèšã§éèŠããªããã°ãªããªããã€ã³ããšæäŸãããããã¯ãã®ç¹æ§ã®é¢ä¿ éçºæç¶æ§ãå®çŸããããã®ãéçºç°å¢ã«ã€ã㊠Web ããã³ããšã³ãç DX Criteria ã®æãç«ã¡ãç®çããåŒç€Ÿã®ç¶æ³ã亀ãããªãã解説 Web ããã³ããšã³ãç DX Criteria ã®ããããã®é
ç®ã«ã€ããŠãåŒç€Ÿã®ç¶æ³ãèžãŸããŠè§£èª¬ ã¢ã»ã¹ã¡ã³ãåŸã«ãã©ã®ãããªæŽçãããŠæ¹åããŠããã°ãããã®æéã«ã€ã㊠䜳å¢ã«å
¥ã£ãè¬æŒã®æ§å äžè¿°ãããã®ã¯å
容ã®äžäŸã§ãå
šãŠããäŒãã§ããŸãããåå è
ããã Web ããã³ããšã³ãç DX Criteria ããã¡ãã¬ãŒã®ãããã¯ããããŒã¹ã§èãããããããªè¬çŸ©ãè¡ãªã£ãŠããã ããŸããã åå è
ããã Web ããã³ããšã³ãç DX Criteria ã®å
容ãè¶ããããã³ããšã³ãæè¡ã«ã€ããŠã®è³ªåãªã©ãé£ã³åºããŠã倧å€çæ³ã®ãã¡ã«çµäºããŸããã æ¹ããŠãããã¯ãã®ããã³ããšã³ãéçºãäºæ¥çºå±ã«ã©ã®ããã«ç¹ããããšããèŠç¹ã§èããããšãã§ãããéåžžã«ææçŸ©ãªæéãšãªããŸããã å€å¿ã®äžãä»åã®å匷äŒè¬åž«ã快諟ããŠãã ãã£ã ahomu ããã«å€§å€æè¬ããŠãããŸããããããšãããããŸãã! ahomu ãããšèšå¿µæ®åœ± ãããã« ã¡ãã¬ãŒã§ã¯ãããããæ©äŒãããã°ã瀟å
ã®éçºè
åãã«å€éšè¬åž«ãæèããŠå匷äŒãªã©ãéããŠããäºå®ã§ãã èªåã®æè¡ãè²ã
ãªè§åºŠããé«ããŠãããã!ãšèããŠãããšã³ãžãã¢ã»ãã¶ã€ããŒã®æ¹ã¯ãã²ãé£çµ¡ãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« çãããããã«ã¡ã¯! ãšã³ãžã㢠/ ãšã³ãžãã¢ã»ãã¶ã€ããŒæ¡çšæ
åœã®å¹³æšã§ãã åŒç€Ÿã§ã¯ç€Ÿå
ã®ãšã³ãžãã¢ã宿ã»äžå®æã§å匷äŒãéå¬ããŠããŸãããã®å匷äŒã¯ããããã¯ãéçºã®è©±ã¯ãã¡ããã§ãããåæè¡ã®ææ°æ
å ±ã®å
±æãªã©ããäºæ¥éšã«çãŸããå
šç€Ÿçã«è¡ãäŒãšãªã£ãŠããŸãã 11/15(é)ã«ã瀟å
å匷äŒãéå¬ããã®ã§ããã顿ã Web ããã³ããšã³ãç DX Criteria ã«ã€ããŠãšããŸãããããã§äœæè
ã® 1 人ã§ããæ¥æ¬ CTO åäŒ DX Criteria WG ã®äœè€ æ©( @ahomu )ãã(ä»¥äž ahomu ãã)ãè¬åž«ãšããŠãæãããŠè¬æŒãããŠããã ããŸããã®ã§ããã®ã¬ããŒããšãªããŸãã ä»åã®å匷äŒéå¬ã®èæ¯ ä»å¹Ž 4 æã« Web ããã³ããšã³ãç DX Criteria ã çºè¡š ãããã®ãèŠãŠãå
容çã«ã¡ãã¬ãŒã§ãåèã«ã§ããéšåãéåžžã«å€ããšæããŸããã äœæè
ã® 1 人ã§ãã ahomu ããã¯çè
ã®åè·ååã ã£ããšããããšããããå匷äŒè¬åž«ãæèšºããŠå¿«è«Ÿããã ãããããéå¬ã®éã³ãšãªããŸããã å匷äŒã«ã€ããŠ è¬æŒã®æ§å ä»åã¯ç€Ÿå€ããè¬åž«ããæããããšããããšããããå匷äŒãžã¯ 25 åã»ã©ã®åå ãšãªããŸããã çå£ã«è¬æŒãèãã¡ã³ã㌠瀟å
éå®ã§ã®å匷äŒãšããããšããããahomu ããããããã¡ãã¬ãŒã«åãããŠæ¿ãã話ãããŠããã ããŸããã æŽå²ãèžãŸããæšä»ã®ããã³ããšã³ãã®æè¡çãªå€é· çŸä»£ã®ããã³ããšã³ãã®èšèšã§éèŠããªããã°ãªããªããã€ã³ããšæäŸãããããã¯ãã®ç¹æ§ã®é¢ä¿ éçºæç¶æ§ãå®çŸããããã®ãéçºç°å¢ã«ã€ã㊠Web ããã³ããšã³ãç DX Criteria ã®æãç«ã¡ãç®çããåŒç€Ÿã®ç¶æ³ã亀ãããªãã解説 Web ããã³ããšã³ãç DX Criteria ã®ããããã®é
ç®ã«ã€ããŠãåŒç€Ÿã®ç¶æ³ãèžãŸããŠè§£èª¬ ã¢ã»ã¹ã¡ã³ãåŸã«ãã©ã®ãããªæŽçãããŠæ¹åããŠããã°ãããã®æéã«ã€ã㊠䜳å¢ã«å
¥ã£ãè¬æŒã®æ§å äžè¿°ãããã®ã¯å
容ã®äžäŸã§ãå
šãŠããäŒãã§ããŸãããåå è
ããã Web ããã³ããšã³ãç DX Criteria ããã¡ãã¬ãŒã®ãããã¯ããããŒã¹ã§èãããããããªè¬çŸ©ãè¡ãªã£ãŠããã ããŸããã åå è
ããã Web ããã³ããšã³ãç DX Criteria ã®å
容ãè¶ããããã³ããšã³ãæè¡ã«ã€ããŠã®è³ªåãªã©ãé£ã³åºããŠã倧å€çæ³ã®ãã¡ã«çµäºããŸããã æ¹ããŠãããã¯ãã®ããã³ããšã³ãéçºãäºæ¥çºå±ã«ã©ã®ããã«ç¹ããããšããèŠç¹ã§èããããšãã§ãããéåžžã«ææçŸ©ãªæéãšãªããŸããã å€å¿ã®äžãä»åã®å匷äŒè¬åž«ã快諟ããŠãã ãã£ã ahomu ããã«å€§å€æè¬ããŠãããŸããããããšãããããŸãã! ahomu ãããšèšå¿µæ®åœ± ãããã« ã¡ãã¬ãŒã§ã¯ãããããæ©äŒãããã°ã瀟å
ã®éçºè
åãã«å€éšè¬åž«ãæèããŠå匷äŒãªã©ãéããŠããäºå®ã§ãã èªåã®æè¡ãè²ã
ãªè§åºŠããé«ããŠãããã!ãšèããŠãããšã³ãžãã¢ã»ãã¶ã€ããŒã®æ¹ã¯ãã²ãé£çµ¡ãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« çãããããã«ã¡ã¯! ãšã³ãžã㢠/ ãšã³ãžãã¢ã»ãã¶ã€ããŒæ¡çšæ
åœã®å¹³æšã§ãã åŒç€Ÿã§ã¯ç€Ÿå
ã®ãšã³ãžãã¢ã宿ã»äžå®æã§å匷äŒãéå¬ããŠããŸãããã®å匷äŒã¯ããããã¯ãéçºã®è©±ã¯ãã¡ããã§ãããåæè¡ã®ææ°æ
å ±ã®å
±æãªã©ããäºæ¥éšã«çãŸããå
šç€Ÿçã«è¡ãäŒãšãªã£ãŠããŸãã 11/15(é)ã«ã瀟å
å匷äŒãéå¬ããã®ã§ããã顿ã Web ããã³ããšã³ãç DX Criteria ã«ã€ããŠãšããŸãããããã§äœæè
ã® 1 人ã§ããæ¥æ¬ CTO åäŒ DX Criteria WG ã®äœè€ æ©( @ahomu )ãã(ä»¥äž ahomu ãã)ãè¬åž«ãšããŠãæãããŠè¬æŒãããŠããã ããŸããã®ã§ããã®ã¬ããŒããšãªããŸãã ä»åã®å匷äŒéå¬ã®èæ¯ ä»å¹Ž 4 æã« Web ããã³ããšã³ãç DX Criteria ã çºè¡š ãããã®ãèŠãŠãå
容çã«ã¡ãã¬ãŒã§ãåèã«ã§ããéšåãéåžžã«å€ããšæããŸããã äœæè
ã® 1 人ã§ãã ahomu ããã¯çè
ã®åè·ååã ã£ããšããããšããããå匷äŒè¬åž«ãæèšºããŠå¿«è«Ÿããã ãããããéå¬ã®éã³ãšãªããŸããã å匷äŒã«ã€ããŠ è¬æŒã®æ§å ä»åã¯ç€Ÿå€ããè¬åž«ããæããããšããããšããããå匷äŒãžã¯ 25 åã»ã©ã®åå ãšãªããŸããã çå£ã«è¬æŒãèãã¡ã³ã㌠瀟å
éå®ã§ã®å匷äŒãšããããšããããahomu ããããããã¡ãã¬ãŒã«åãããŠæ¿ãã話ãããŠããã ããŸããã æŽå²ãèžãŸããæšä»ã®ããã³ããšã³ãã®æè¡çãªå€é· çŸä»£ã®ããã³ããšã³ãã®èšèšã§éèŠããªããã°ãªããªããã€ã³ããšæäŸãããããã¯ãã®ç¹æ§ã®é¢ä¿ éçºæç¶æ§ãå®çŸããããã®ãéçºç°å¢ã«ã€ã㊠Web ããã³ããšã³ãç DX Criteria ã®æãç«ã¡ãç®çããåŒç€Ÿã®ç¶æ³ã亀ãããªãã解説 Web ããã³ããšã³ãç DX Criteria ã®ããããã®é
ç®ã«ã€ããŠãåŒç€Ÿã®ç¶æ³ãèžãŸããŠè§£èª¬ ã¢ã»ã¹ã¡ã³ãåŸã«ãã©ã®ãããªæŽçãããŠæ¹åããŠããã°ãããã®æéã«ã€ã㊠䜳å¢ã«å
¥ã£ãè¬æŒã®æ§å äžè¿°ãããã®ã¯å
容ã®äžäŸã§ãå
šãŠããäŒãã§ããŸãããåå è
ããã Web ããã³ããšã³ãç DX Criteria ããã¡ãã¬ãŒã®ãããã¯ããããŒã¹ã§èãããããããªè¬çŸ©ãè¡ãªã£ãŠããã ããŸããã åå è
ããã Web ããã³ããšã³ãç DX Criteria ã®å
容ãè¶ããããã³ããšã³ãæè¡ã«ã€ããŠã®è³ªåãªã©ãé£ã³åºããŠã倧å€çæ³ã®ãã¡ã«çµäºããŸããã æ¹ããŠãããã¯ãã®ããã³ããšã³ãéçºãäºæ¥çºå±ã«ã©ã®ããã«ç¹ããããšããèŠç¹ã§èããããšãã§ãããéåžžã«ææçŸ©ãªæéãšãªããŸããã å€å¿ã®äžãä»åã®å匷äŒè¬åž«ã快諟ããŠãã ãã£ã ahomu ããã«å€§å€æè¬ããŠãããŸããããããšãããããŸãã! ahomu ãããšèšå¿µæ®åœ± ãããã« ã¡ãã¬ãŒã§ã¯ãããããæ©äŒãããã°ã瀟å
ã®éçºè
åãã«å€éšè¬åž«ãæèããŠå匷äŒãªã©ãéããŠããäºå®ã§ãã èªåã®æè¡ãè²ã
ãªè§åºŠããé«ããŠãããã!ãšèããŠãããšã³ãžãã¢ã»ãã¶ã€ããŒã®æ¹ã¯ãã²ãé£çµ¡ãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« çãããããã«ã¡ã¯! ãšã³ãžã㢠/ ãšã³ãžãã¢ã»ãã¶ã€ããŒæ¡çšæ
åœã®å¹³æšã§ãã åŒç€Ÿã§ã¯ç€Ÿå
ã®ãšã³ãžãã¢ã宿ã»äžå®æã§å匷äŒãéå¬ããŠããŸãããã®å匷äŒã¯ããããã¯ãéçºã®è©±ã¯ãã¡ããã§ãããåæè¡ã®ææ°æ
å ±ã®å
±æãªã©ããäºæ¥éšã«çãŸããå
šç€Ÿçã«è¡ãäŒãšãªã£ãŠããŸãã 11/15(é)ã«ã瀟å
å匷äŒãéå¬ããã®ã§ããã顿ã Web ããã³ããšã³ãç DX Criteria ã«ã€ããŠãšããŸãããããã§äœæè
ã® 1 人ã§ããæ¥æ¬ CTO åäŒ DX Criteria WG ã®äœè€ æ©( @ahomu )ãã(ä»¥äž ahomu ãã)ãè¬åž«ãšããŠãæãããŠè¬æŒãããŠããã ããŸããã®ã§ããã®ã¬ããŒããšãªããŸãã ä»åã®å匷äŒéå¬ã®èæ¯ ä»å¹Ž 4 æã« Web ããã³ããšã³ãç DX Criteria ã çºè¡š ãããã®ãèŠãŠãå
容çã«ã¡ãã¬ãŒã§ãåèã«ã§ããéšåãéåžžã«å€ããšæããŸããã äœæè
ã® 1 人ã§ãã ahomu ããã¯çè
ã®åè·ååã ã£ããšããããšããããå匷äŒè¬åž«ãæèšºããŠå¿«è«Ÿããã ãããããéå¬ã®éã³ãšãªããŸããã å匷äŒã«ã€ããŠ è¬æŒã®æ§å ä»åã¯ç€Ÿå€ããè¬åž«ããæããããšããããšããããå匷äŒãžã¯ 25 åã»ã©ã®åå ãšãªããŸããã çå£ã«è¬æŒãèãã¡ã³ã㌠瀟å
éå®ã§ã®å匷äŒãšããããšããããahomu ããããããã¡ãã¬ãŒã«åãããŠæ¿ãã話ãããŠããã ããŸããã æŽå²ãèžãŸããæšä»ã®ããã³ããšã³ãã®æè¡çãªå€é· çŸä»£ã®ããã³ããšã³ãã®èšèšã§éèŠããªããã°ãªããªããã€ã³ããšæäŸãããããã¯ãã®ç¹æ§ã®é¢ä¿ éçºæç¶æ§ãå®çŸããããã®ãéçºç°å¢ã«ã€ã㊠Web ããã³ããšã³ãç DX Criteria ã®æãç«ã¡ãç®çããåŒç€Ÿã®ç¶æ³ã亀ãããªãã解説 Web ããã³ããšã³ãç DX Criteria ã®ããããã®é
ç®ã«ã€ããŠãåŒç€Ÿã®ç¶æ³ãèžãŸããŠè§£èª¬ ã¢ã»ã¹ã¡ã³ãåŸã«ãã©ã®ãããªæŽçãããŠæ¹åããŠããã°ãããã®æéã«ã€ã㊠䜳å¢ã«å
¥ã£ãè¬æŒã®æ§å äžè¿°ãããã®ã¯å
容ã®äžäŸã§ãå
šãŠããäŒãã§ããŸãããåå è
ããã Web ããã³ããšã³ãç DX Criteria ããã¡ãã¬ãŒã®ãããã¯ããããŒã¹ã§èãããããããªè¬çŸ©ãè¡ãªã£ãŠããã ããŸããã åå è
ããã Web ããã³ããšã³ãç DX Criteria ã®å
容ãè¶ããããã³ããšã³ãæè¡ã«ã€ããŠã®è³ªåãªã©ãé£ã³åºããŠã倧å€çæ³ã®ãã¡ã«çµäºããŸããã æ¹ããŠãããã¯ãã®ããã³ããšã³ãéçºãäºæ¥çºå±ã«ã©ã®ããã«ç¹ããããšããèŠç¹ã§èããããšãã§ãããéåžžã«ææçŸ©ãªæéãšãªããŸããã å€å¿ã®äžãä»åã®å匷äŒè¬åž«ã快諟ããŠãã ãã£ã ahomu ããã«å€§å€æè¬ããŠãããŸããããããšãããããŸãã! ahomu ãããšèšå¿µæ®åœ± ãããã« ã¡ãã¬ãŒã§ã¯ãããããæ©äŒãããã°ã瀟å
ã®éçºè
åãã«å€éšè¬åž«ãæèããŠå匷äŒãªã©ãéããŠããäºå®ã§ãã èªåã®æè¡ãè²ã
ãªè§åºŠããé«ããŠãããã!ãšèããŠãããšã³ãžãã¢ã»ãã¶ã€ããŒã®æ¹ã¯ãã²ãé£çµ¡ãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« çãããããã«ã¡ã¯! ãšã³ãžã㢠/ ãšã³ãžãã¢ã»ãã¶ã€ããŒæ¡çšæ
åœã®å¹³æšã§ãã åŒç€Ÿã§ã¯ç€Ÿå
ã®ãšã³ãžãã¢ã宿ã»äžå®æã§å匷äŒãéå¬ããŠããŸãããã®å匷äŒã¯ããããã¯ãéçºã®è©±ã¯ãã¡ããã§ãããåæè¡ã®ææ°æ
å ±ã®å
±æãªã©ããäºæ¥éšã«çãŸããå
šç€Ÿçã«è¡ãäŒãšãªã£ãŠããŸãã 11/15(é)ã«ã瀟å
å匷äŒãéå¬ããã®ã§ããã顿ã Web ããã³ããšã³ãç DX Criteria ã«ã€ããŠãšããŸãããããã§äœæè
ã® 1 人ã§ããæ¥æ¬ CTO åäŒ DX Criteria WG ã®äœè€ æ©( @ahomu )ãã(ä»¥äž ahomu ãã)ãè¬åž«ãšããŠãæãããŠè¬æŒãããŠããã ããŸããã®ã§ããã®ã¬ããŒããšãªããŸãã ä»åã®å匷äŒéå¬ã®èæ¯ ä»å¹Ž 4 æã« Web ããã³ããšã³ãç DX Criteria ã çºè¡š ãããã®ãèŠãŠãå
容çã«ã¡ãã¬ãŒã§ãåèã«ã§ããéšåãéåžžã«å€ããšæããŸããã äœæè
ã® 1 人ã§ãã ahomu ããã¯çè
ã®åè·ååã ã£ããšããããšããããå匷äŒè¬åž«ãæèšºããŠå¿«è«Ÿããã ãããããéå¬ã®éã³ãšãªããŸããã å匷äŒã«ã€ããŠ è¬æŒã®æ§å ä»åã¯ç€Ÿå€ããè¬åž«ããæããããšããããšããããå匷äŒãžã¯ 25 åã»ã©ã®åå ãšãªããŸããã çå£ã«è¬æŒãèãã¡ã³ã㌠瀟å
éå®ã§ã®å匷äŒãšããããšããããahomu ããããããã¡ãã¬ãŒã«åãããŠæ¿ãã話ãããŠããã ããŸããã æŽå²ãèžãŸããæšä»ã®ããã³ããšã³ãã®æè¡çãªå€é· çŸä»£ã®ããã³ããšã³ãã®èšèšã§éèŠããªããã°ãªããªããã€ã³ããšæäŸãããããã¯ãã®ç¹æ§ã®é¢ä¿ éçºæç¶æ§ãå®çŸããããã®ãéçºç°å¢ã«ã€ã㊠Web ããã³ããšã³ãç DX Criteria ã®æãç«ã¡ãç®çããåŒç€Ÿã®ç¶æ³ã亀ãããªãã解説 Web ããã³ããšã³ãç DX Criteria ã®ããããã®é
ç®ã«ã€ããŠãåŒç€Ÿã®ç¶æ³ãèžãŸããŠè§£èª¬ ã¢ã»ã¹ã¡ã³ãåŸã«ãã©ã®ãããªæŽçãããŠæ¹åããŠããã°ãããã®æéã«ã€ã㊠䜳å¢ã«å
¥ã£ãè¬æŒã®æ§å äžè¿°ãããã®ã¯å
容ã®äžäŸã§ãå
šãŠããäŒãã§ããŸãããåå è
ããã Web ããã³ããšã³ãç DX Criteria ããã¡ãã¬ãŒã®ãããã¯ããããŒã¹ã§èãããããããªè¬çŸ©ãè¡ãªã£ãŠããã ããŸããã åå è
ããã Web ããã³ããšã³ãç DX Criteria ã®å
容ãè¶ããããã³ããšã³ãæè¡ã«ã€ããŠã®è³ªåãªã©ãé£ã³åºããŠã倧å€çæ³ã®ãã¡ã«çµäºããŸããã æ¹ããŠãããã¯ãã®ããã³ããšã³ãéçºãäºæ¥çºå±ã«ã©ã®ããã«ç¹ããããšããèŠç¹ã§èããããšãã§ãããéåžžã«ææçŸ©ãªæéãšãªããŸããã å€å¿ã®äžãä»åã®å匷äŒè¬åž«ã快諟ããŠãã ãã£ã ahomu ããã«å€§å€æè¬ããŠãããŸããããããšãããããŸãã! ahomu ãããšèšå¿µæ®åœ± ãããã« ã¡ãã¬ãŒã§ã¯ãããããæ©äŒãããã°ã瀟å
ã®éçºè
åãã«å€éšè¬åž«ãæèããŠå匷äŒãªã©ãéããŠããäºå®ã§ãã èªåã®æè¡ãè²ã
ãªè§åºŠããé«ããŠãããã!ãšèããŠãããšã³ãžãã¢ã»ãã¶ã€ããŒã®æ¹ã¯ãã²ãé£çµ¡ãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ã¯ããã« çãããããã«ã¡ã¯! ãšã³ãžã㢠/ ãšã³ãžãã¢ã»ãã¶ã€ããŒæ¡çšæ
åœã®å¹³æšã§ãã åŒç€Ÿã§ã¯ç€Ÿå
ã®ãšã³ãžãã¢ã宿ã»äžå®æã§å匷äŒãéå¬ããŠããŸãããã®å匷äŒã¯ããããã¯ãéçºã®è©±ã¯ãã¡ããã§ãããåæè¡ã®ææ°æ
å ±ã®å
±æãªã©ããäºæ¥éšã«çãŸããå
šç€Ÿçã«è¡ãäŒãšãªã£ãŠããŸãã 11/15(é)ã«ã瀟å
å匷äŒãéå¬ããã®ã§ããã顿ã Web ããã³ããšã³ãç DX Criteria ã«ã€ããŠãšããŸãããããã§äœæè
ã® 1 人ã§ããæ¥æ¬ CTO åäŒ DX Criteria WG ã®äœè€ æ©( @ahomu )ãã(ä»¥äž ahomu ãã)ãè¬åž«ãšããŠãæãããŠè¬æŒãããŠããã ããŸããã®ã§ããã®ã¬ããŒããšãªããŸãã ä»åã®å匷äŒéå¬ã®èæ¯ ä»å¹Ž 4 æã« Web ããã³ããšã³ãç DX Criteria ã çºè¡š ãããã®ãèŠãŠãå
容çã«ã¡ãã¬ãŒã§ãåèã«ã§ããéšåãéåžžã«å€ããšæããŸããã äœæè
ã® 1 人ã§ãã ahomu ããã¯çè
ã®åè·ååã ã£ããšããããšããããå匷äŒè¬åž«ãæèšºããŠå¿«è«Ÿããã ãããããéå¬ã®éã³ãšãªããŸããã å匷äŒã«ã€ããŠ è¬æŒã®æ§å ä»åã¯ç€Ÿå€ããè¬åž«ããæããããšããããšããããå匷äŒãžã¯ 25 åã»ã©ã®åå ãšãªããŸããã çå£ã«è¬æŒãèãã¡ã³ã㌠瀟å
éå®ã§ã®å匷äŒãšããããšããããahomu ããããããã¡ãã¬ãŒã«åãããŠæ¿ãã話ãããŠããã ããŸããã æŽå²ãèžãŸããæšä»ã®ããã³ããšã³ãã®æè¡çãªå€é· çŸä»£ã®ããã³ããšã³ãã®èšèšã§éèŠããªããã°ãªããªããã€ã³ããšæäŸãããããã¯ãã®ç¹æ§ã®é¢ä¿ éçºæç¶æ§ãå®çŸããããã®ãéçºç°å¢ã«ã€ã㊠Web ããã³ããšã³ãç DX Criteria ã®æãç«ã¡ãç®çããåŒç€Ÿã®ç¶æ³ã亀ãããªãã解説 Web ããã³ããšã³ãç DX Criteria ã®ããããã®é
ç®ã«ã€ããŠãåŒç€Ÿã®ç¶æ³ãèžãŸããŠè§£èª¬ ã¢ã»ã¹ã¡ã³ãåŸã«ãã©ã®ãããªæŽçãããŠæ¹åããŠããã°ãããã®æéã«ã€ã㊠䜳å¢ã«å
¥ã£ãè¬æŒã®æ§å äžè¿°ãããã®ã¯å
容ã®äžäŸã§ãå
šãŠããäŒãã§ããŸãããåå è
ããã Web ããã³ããšã³ãç DX Criteria ããã¡ãã¬ãŒã®ãããã¯ããããŒã¹ã§èãããããããªè¬çŸ©ãè¡ãªã£ãŠããã ããŸããã åå è
ããã Web ããã³ããšã³ãç DX Criteria ã®å
容ãè¶ããããã³ããšã³ãæè¡ã«ã€ããŠã®è³ªåãªã©ãé£ã³åºããŠã倧å€çæ³ã®ãã¡ã«çµäºããŸããã æ¹ããŠãããã¯ãã®ããã³ããšã³ãéçºãäºæ¥çºå±ã«ã©ã®ããã«ç¹ããããšããèŠç¹ã§èããããšãã§ãããéåžžã«ææçŸ©ãªæéãšãªããŸããã å€å¿ã®äžãä»åã®å匷äŒè¬åž«ã快諟ããŠãã ãã£ã ahomu ããã«å€§å€æè¬ããŠãããŸããããããšãããããŸãã! ahomu ãããšèšå¿µæ®åœ± ãããã« ã¡ãã¬ãŒã§ã¯ãããããæ©äŒãããã°ã瀟å
ã®éçºè
åãã«å€éšè¬åž«ãæèããŠå匷äŒãªã©ãéããŠããäºå®ã§ãã èªåã®æè¡ãè²ã
ãªè§åºŠããé«ããŠãããã!ãšèããŠãããšã³ãžãã¢ã»ãã¶ã€ããŒã®æ¹ã¯ãã²ãé£çµ¡ãã ããã åéã®äžèЧ | æ ªåŒäŒç€Ÿã¡ãã¬ãŒ ã¡ãã¬ãŒã®æ¡çšæ
å ±ã¯ãã¡ãããã確èªãã ããã www.medley.jp
ããã«ã¡ã¯ãå»çãã©ãããã©ãŒã æ¬éšãããã¯ãéçºå®€ CLINICS 第äºéçºã°ã«ãŒãæå±ã®é«æ©ã§ãã ã¡ãã¬ãŒã¯ã2024 幎 11 æ 23 æ¥ã«ä¹æ®µåäž KS ãã«ã«ãŠéå¬ããã JSConf JP 2024 ã«ãã¬ãã¢ã ã¹ãã³ãµãŒãšããŠåè³ããŸãã ä»åã¯ãæ¥é±æ«ã«æ§ããŠãã JSConf JP 2024 ã§çºè¡šããã¹ãã³ãµãŒã¯ãŒã¯ã·ã§ããã®å
容ã«ã€ããŠç޹ä»ããŸãã JSConf JP 2024 ãšã¯ JSConf JP ã¯ãäžè¬ç€Ÿå£æ³äºº Japan Node.js Association ãäž»å¬ãã JavaScript ã®ç¥å
žã§ãã åœå
ã¯ãã¡ãããæµ·å€ããã Web éçºè
ãæããåèš 4 ãã©ãã¯ã§ Web éçºã«é¢é£ãã倿°ã®ã»ãã·ã§ã³ãäºå®ãããŠããŸãã å
¬åŒãµã€ãïŒ https://jsconf.jp/2024/ ã¹ãã³ãµãŒã¯ãŒã¯ã·ã§ããã§ã¯ React ã³ã³ããŒãã³ãèšèšã«ã€ããŠçºè¡šããŸã 16:00 ãããã©ã㯠D ã«ãŠã ã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS ã®éçºã§å®è·µããŠãã React ã³ã³ããŒãã³ãèšèšã«ã€ããŠãéçºäœå¶ãå»çæ¥åã·ã¹ãã ã®èгç¹ãèžãŸããŠç޹ä»ããŸãã 培åºè§£åïŒå»çæ¥åã·ã¹ãã ã® React ã³ã³ããŒãã³ãèšèš - æ ªåŒäŒç€Ÿã¡ãã¬ãŒ | JSConf JP ãã¯ãŒã¯ã·ã§ããã¿ã€ãã«ã 培åºè§£åïŒå»çæ¥åã·ã¹ãã ã® React ã³ã³ããŒãã³ãèšèš ãã¯ãŒã¯ã·ã§ãã詳现ã å»çæ¥åã·ã¹ãã ã® Web ããã³ããšã³ãéçºã§ã¯ãé«ãå®å
šæ§ã®èŠæ±ã«å¿ãã€ã€ãè€éåããå»çæ¥åã«å¯ŸããŠèšºçå¹çæ¹åã«ã€ãªãã質ã®é«ããŠãŒã¶ãŒäœéšãæäŸããããšãæ±ããããŸãã å ããŠãé·æå©çšãèŠæ®ããä¿å®æ§ã®ç¶æãéèŠã§ãã ãããã®èŠæ±ã«å¿ãããããç§ãã¡ã¯çŽ 4 幎éã®ç¶ç¶çãªã¢ãŒããã¯ãã£æ¹åãéã㊠React ã³ã³ããŒãã³ãèšèšã確ç«ããŠããŸããã æ¬ã»ãã·ã§ã³ã§ã¯ãã¡ãã¬ãŒã®éçºäœå¶ã®èæ¯ã亀ããªãããã¯ã©ãŠãèšºçæ¯æŽã·ã¹ãã CLINICS ã® Web ããã³ããšã³ãéçºã§å®è·µããŠãã React ã³ã³ããŒãã³ãèšèšã玹ä»ããŸãã å
·äœçã«ã¯æ¬¡ã®å
容ãäºå®ããŠããŸãïŒ ã³ã³ããŒãã³ãã¬ã€ã€ãŒãšåå²ç²åºŠ ç¬ç«æ§ã®é«ãè€åã³ã³ããŒãã³ãèšèšãšãã¶ã€ã³ãã¿ãŒã³ 代衚çãªããã³ããšã³ãããžãã¯ã®åé¡ãšããããã®å®è£
ææ³ ã¯ãã¹ãã¡ã³ã¯ã·ã§ãã«ïŒéè·èœå¥ïŒéçºããŒã ã«ããã Storybook é§åéçºã®æŽ»çš éçºé床ãšå質ãäž¡ç«ããããã®ãã¹ãæŠç¥ çºè¡šäºå®å
容ã®äžéšïŒã³ã³ããŒãã³ãåå²ç²åºŠã®çŽ¹ä» ããŒã¹ã§ã¡ãã¬ãŒã®ãšã³ãžãã¢ãšã話ããŸããã ãã©ã㯠D ããã 2F ã® Communication Area ã«ããŒã¹ãåºå±ããŸãã ããŒã¹ã§ã¯ãã¡ãã¬ãŒã®ãããã¯ããäœ¿çšæè¡ãéçºçµç¹ã«ã€ããŠããšã³ãžãã¢ãšãã£ãã°ããã«äº€æµã§ããå Žãèšããäºå®ã§ãã äŒæ©ãšãªã¢ã®è¿ãã«ãªã£ãŠããŸãã®ã§ãã»ãã·ã§ã³ã®åéãªã©ã«ãã²ãç«ã¡å¯ããã ããã ãããã« æåŸãŸã§ãèªã¿é ãããããšãããããŸããã åœæ¥ã®ããŒã¹ãã¯ãŒã¯ã·ã§ããã§ã¿ãªããŸãšãäŒãã§ããããšã楜ãã¿ã«ããŠãããŸãïŒ