セキュリティ、secrets、安全な運用
Lino ã§çæãããã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã¯ãçæããããããžã§ã¯ããã®ãã®ããå§ãŸããŸããLino ã¯ããŒã«ã« secrets ãç»é²ããAspire ã®æ©å¯ãã©ã¡ãŒã¿ãŒãæ§æããAPI åãã® JWTãAPI keysãäžæããŒã¯ã³ãrate limiting policies ã®åå°ãäœæããŸãã
ãã®ããŒãžã§ã¯ããããã®ä¿è·ããªãååšããã®ãããããŠã¢ããªã±ãŒã·ã§ã³ãçºå±ããããšãã«ã©ãç¶æããã®ãã説æããŸããäžå¿ãšãªãèãæ¹ã¯ãsecret ã¯ãªããžããªå ã§çãŸãããã®ã§ã¯ãªããå ¬é API ã¯å©çšå¶éãªãã§çãŸãããã®ã§ã¯ãªããšããããšã§ããLino ã¯ãã®ãã¿ãŒã³ãæäŸããloginãrefresh tokenããµã€ã³ã¢ããããã¹ã¯ãŒã埩æ§ãªã©ã®æ©å¯æ§ã®é«ã endpoints ã®èªèšŒæ å ±æŒãããæªçšãæžãããŸãã
ãããžã§ã¯ãã®ããŒã«ã« secrets
Lino ã¯ãçæãããã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠãªããŒã«ã« secrets ãèªåçã«ç»é²ããŸããããŒã¿ããŒã¹ãRedisãRabbitMQ ã®ãã¹ã¯ãŒããJWT ããŒãAPI keysããã®ä»ã®æ©å¯å€ã¯ãããŒãžã§ã³ç®¡çããããã¡ã€ã«ã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã® User Secrets ã«ä¿åãããŸãã
lino secret list lino secret set lino secret remove lino secret clear
ãããã®ã³ãã³ãã¯ä¿å®ã«ã圹ç«ã¡ãŸããsecret list ã¯æ§ææžã¿ããŒã®ç£æ»ãsecret set ã¯ããŒã«ã«å€ã®å€æŽãŸãã¯ç»é²ãsecret remove ã¯ããŒã®åé€ãsecret clear ã¯ãããžã§ã¯ãã®ãã¹ãŠã®ããŒã«ã« secrets ã®åé€ã«äœ¿çšããŸãã
ãã®ãããŒã¯çæããããããžã§ã¯ãã«çµ±åãããŠããŸããRedisãRabbitMQãèªèšŒãèªå¯ãSMTPãAPI keysãdownload tokens ãªã©ã®ãªãœãŒã¹ã远å ãããšããLino ã¯æ©å¯å€ããœãŒã¹ã³ãŒãã®å€ã«ä¿ã¡ãã¢ããªã±ãŒã·ã§ã³ãããããç°å¢æ§æãšããŠåãåããããã«ããŸãã
å¿
èŠã«å¿ããŠãdotnet user-secrets list ãåçã® Aspire ãªãœãŒã¹ãªã©ã.NET ãš Aspire ã®ãã©ãããã©ãŒã ããŒã«ã§ããŒã«ã« secrets ã確èªããããšãã§ããŸããLino ã®ã³ãã³ãã¯ãçæããããããžã§ã¯ãã®æèã§ãã®ãããŒãããçŽæ¥çã«ããããã«ãããŸãã
Aspire ã®ãã©ã¡ãŒã¿ãŒ
Aspire AppHost ã¯ãããŒã¿ããŒã¹ãRedisãRabbitMQãAPIãworkerãweb app ãªã©ã®ãªãœãŒã¹ã調æŽããŸããçæããããããžã§ã¯ãã§ã¯ãLino ã¯æ©å¯å€ã Aspire ãã©ã¡ãŒã¿ãŒãšããŠç»é²ããã¢ããªã±ãŒã·ã§ã³ããããããœãŒã¹ã³ãŒãå ã®åºå®ããŒã¿ã§ã¯ãªãå€éšäŸåé¢ä¿ãšããŠæ±ããããã«ããŸãã
ããã«ã¯ãããŒã¿ããŒã¹ãRedisãRabbitMQ ã®ãã¹ã¯ãŒãããããŒã«ã«ã€ã³ãã©ã«å¿ èŠãªãã®ä»ã®å€ãå«ãŸããŸããAppHost 㯠Aspire ã® secret ã¢ãã«ã䜿ããããšãã° sensitive ãšããŠããŒã¯ããããã©ã¡ãŒã¿ãŒã§ããããã®å€ã察å¿ãããªãœãŒã¹ãžæž¡ããŸãã
å®çšäžã®å©ç¹ã¯ãsecret ãæ§æãã¡ã€ã«ã®äžã«åããã詳现ã§ã¯ãªãããœãªã¥ãŒã·ã§ã³ã®å®è¡ã¢ãã«ã®äžéšã«ãªãããšã§ããAspire çµç±ã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããšãåãµãŒãã¹ã¯å¿ èŠãªäŸåé¢ä¿ãåãåããåãããžã§ã¯ããžæåã§ãã¹ã¯ãŒããã³ããŒããå¿ èŠããããŸããã
ãã®èšèšã¯ deploy ã«ã圹ç«ã¡ãŸããAspire ãææç©ãå ¬éãããšããããããã®ãã©ã¡ãŒã¿ãŒã®å¿ èŠæ§ã¯æ®ããŸããããšãã° Docker Compose ã§ã¯ãæ£ããç°å¢ã§åããã¹ã placeholders ãç°å¢ãã¡ã€ã«ãçŸããããšããããŸããä»ã® targets ã§ããåãååãæ©å¯æ§æããã©ãããã©ãŒã ãžæž¡ãæ¹æ³ãå°ããŸãã
Rate limiting
Rate limiting ã¯ãæªçšãbrute forceãäžé©åãªãªãœãŒã¹æ¶è²»ãæžãããŸããLino ã¯æšæº policies ãæ§æããçæããã endpoints ã« helpers ãé©çšãããããå ¬éãèªèšŒæžã¿ãå éšãæ©å¯ API ãå©çšå¶éãªãã§äœæãããããšã¯ãããŸããã
ããã¯éèŠã§ããAPI ãæ£ããèªèšŒããŠããŠãã倧éã¢ã¯ã»ã¹ã«ããæªçšãåããå¯èœæ§ãããããã§ããloginãrefresh tokenããµã€ã³ã¢ããããã¹ã¯ãŒã埩æ§ã¯æ©å¯æ§ã®é«ããããŒã§ããLino ã¯æ¢å®ã§ããããäžè¬ç㪠endpoints ããåé¢ããããä¿å®çãªå¶éãæãããŸãã
- æ°ãã endpoints ãäœæãããšãã¯ãçæããã policies ã䜿çšããŸãã
- æ©å¯ endpoints ãšäžè¬ endpoints ã§ç°ãªãå¶éãç¶æããŸãã
- å¿ èŠã«å¿ã㊠rate limiting ãèªèšŒãæ€èšŒãbot 察çãšçµã¿åãããŸãã
- å¶éãè¶
ãããšãã®æåŸ
ãããå¿çãšããŠ
429 Too Many Requestsãæ±ããŸãã
| Policy | Lino ã§ã®æ¢å®çšé | çºå±æã®é©ç𿹿³ |
|---|---|---|
anonymous | èªèšŒãªãã®å ¬é endpointsã | tokensãaccountsãcredentials ãäœæããªãå¿å API ã«äœ¿çšããŸãã |
authenticated-user | çŸåšã®ãŠãŒã¶ãŒã§åå²ãããèªèšŒæžã¿ trafficã | äžè¬çãªèªèšŒæžã¿ API ã®æšæºãšããŠäœ¿çšããŸãã |
identity-sensitive | Loginããµã€ã³ã¢ãããrefresh tokenããã¹ã¯ãŒãå¿ãããã¹ã¯ãŒã倿Ž/resetã | tokensãcodes ãäœæããããŸã㯠credentials ã倿Žãã endpoints ã«äœ¿çšããŸãã |
api-key | API key ã§ä¿è·ãããå éš endpointsã | API key filter ã«åŸã service-to-service çµ±åã§äœ¿çšããŸãã |
download-token | äžæ download tokens ã®çæã | èªèšŒæžã¿ãŠãŒã¶ãŒãçåœã® links ãŸã㯠tokens ãçºè¡ã§ããå Žåã«äœ¿çšããŸãã |
JWT ã»ãã¥ãªãã£
èªèšŒã远å ãããšãLino 㯠JWT ã®çºè¡ãèªã¿åããæ€èšŒã®åå°ãçæãã眲åããŒããœãŒã¹ã³ãŒãã®å€ã«ä¿ã¡ãŸããtoken ã¯ãŠãŒã¶ãŒãèå¥ããJWT ãããŒã¿ãã«ãªããŒã¿ããŒã¹ã«ããããšãªããå¿ èŠãª claims ã ããéã³ãŸãã
- éçºæã¯çœ²åããŒã User Secrets ã«ãæ¬çªç°å¢ã§ã¯å®å šãª provider ã«ä¿æããŸãã
- ãããžã§ã¯ãã§æ§æããã issuerãaudienceãæå¹æéãã¢ã«ãŽãªãºã ã®æ€èšŒãç¶æããŸãã
- èªèšŒæžã¿ãããŒã«å¿ èŠãª claims ã ããå«ããŸãã
- multi-tenancy ã§ã¯ãLino ããã§ã«æäŸããŠãã user ãš tenant ã® context ã䜿çšããŸãã
JWT ã®çœ²åããŒã¯éèŠãª secret ã§ãããLino ã¯ãã®å€ããã§ã«æ©å¯æ§æãšããŠæ±ããŸããæ°ããç°å¢ãpipelineãdeploy ãäœæãããšããåãã«ãŒã«ãç¶æããŠãã ãããããŒã¯ commitãDocker imageãlogãå ¬éãã¡ã€ã«ãå®éã®æ§æäŸã«çŸããŠã¯ãããŸããã
JWT ã¯ãã¡ã€ã³ã®èªå¯ã眮ãæããŸãããclaims ã¯å€æã«åœ¹ç«ã¡ãŸãããéèŠãªæäœã§ã¯çŸåšã®ç¶æ ããŠãŒã¶ãŒç¶æ ãæå¹ãªæš©éããªã¯ãšã¹ã context ãåŒãç¶ãèæ ®ããå¿ èŠããããŸããçæãããéšåã¯åå°ãæäŸããŸããã·ã¹ãã ãçºå±ããããšãã®è²¬ä»»ã¯ããã®ãããŒãç¡èŠããè¿éãäœããªãããšã§ãã
API keys ãš download tokens
Lino 㯠API keys ãšäžæ tokens ããscope ãéå®ããã credentials ãšããŠæ±ããŸãããããŒããã¡ã€ã«ãããã±ãŒãžãçµ±åãžã®äžæã¢ã¯ã»ã¹ãè§£æŸããå¿ èŠãããå Žåãçæãããåå°ã¯åºã credentials ã®åå©çšã§ã¯ãªããçãå ·äœç㪠tokens ãåªå ããŸãã
- links ãšäžæ tokens ã«ã¯çãæå¹æéã䜿ããŸãã
- ãããŒã«ãã® context ãããå Žåãtoken ã userãtenantãresource ã«é¢é£ä»ããŸãã
- æ©å¯ artefacts ãžã®ã¢ã¯ã»ã¹ã䌎ãå Žåã¯ãç£æ»ã®ããã«äœ¿çšç¶æ³ãèšé²ããŸãã
- resource ãŸã㯠permission ãå€ãã£ããšã㯠tokens ãåãæ¶ããŸãã
key ã§ä¿è·ããã API ã¯ãLino ãçæãã authorization ãš rate limiting ã®ã¢ãã«ã䜿çšããŸããçµ±åèªååã®ããã«äœæããã key ã管çåŒã³åºãã®èªç±éè¡èšŒã«ãªã£ãŠã¯ãããŸããããŸããäžæ download token ãèªèšŒæžã¿ãŠãŒã¶ãŒã® permissions ã眮ãæããŠã¯ãããŸããã
æ°ãã download ãŸãã¯çµ±åãããŒãäœæãããšãããåãèãæ¹ãç¶æããŠãã ãããæç€ºç㪠scopeãæå¹æéãæçšãª metadataãé©å㪠rate limiting policy ã§ããããã«ãããäžæã¢ã¯ã»ã¹ã¯ã·ã¹ãã å ãæŒã loose credential ã§ã¯ãªããç£æ»å¯èœã§äºæž¬å¯èœãªãã®ã«ãªããŸãã
æ¬çªç°å¢ã® secret providers
User Secrets ã¯ããŒã«ã«éçºã解決ããŸããæ¬çªç°å¢ã§ã¯ããã©ãããã©ãŒã ã®å®å šãª provider ã䜿ã£ãŠåãåé¢ãç¶æããŸããAzure Key VaultãAWS Secrets ManagerãGoogle Secret ManagerãHashiCorp VaultãKubernetes SecretsããŸã㯠orchestrator ã«ãã£ãŠä¿è·ãããç°å¢å€æ°ã䜿çšããŸãã
Lino ã¯ãã¢ããªã±ãŒã·ã§ã³ãã³ãŒãã®å€ããæ©å¯æ§æãåãåããããã«æºåããŸããæ¬çªç°å¢ãžã®ç§»è¡ã¯ç°å¢åŽã®å€æã§ããååãšãã©ã¡ãŒã¿ãŒã¯ååšãç¶ããŸãããå€ã¯ã€ã³ãã©ã§äœ¿çšãã vaultãpipelineãorchestrator ããæ¥ãããã«ãªããŸãã
æ¬çªç°å¢ã§ã¯ãrotationãç°å¢ããšã®åé¢ãã¢ããªã±ãŒã·ã§ã³ããšã®æš©éãã¢ã¯ã»ã¹ç£æ»ãšãã£ãéçšäžã®å®è·µãå¿ èŠã«ãªããŸããUser Secrets ã¯ãããã®ç®¡çã眮ãæããŸãããsecrets ããªããžããªã«çœ®ããã«ããŒã«ã«äœéšãæ¯ãããã®ã§ãã
- ç°å¢ããšã«åé¢: developmentãstagingãproduction 㯠credentials ãå ±æããŠã¯ãããŸããã
- ã¢ããªã±ãŒã·ã§ã³ããšã«åé¢: åãµãŒãã¹ã¯å¿ èŠãª secrets ã ããåãåãã¹ãã§ãã
- rotation ãèšç»: JWT keysãSMTPãAPI keysãããŒã¿ããŒã¹ãã¹ã¯ãŒãã«ã¯äº€ææé ãå¿ èŠã§ãã
- ã¢ã¯ã»ã¹ãç£æ»: ãã©ãããã©ãŒã äžã§ secrets ãèªãã ã倿Žãããã§ãã人ãèšé²ããŸãã
