DockerCon 2023 ã§ã¯ã BastionZero ãš Docker ãå ±åã§éçºããæè¿ãªãŒãã³ãœãŒã¹åã㊠Linux Foundation ã«å¯ä»ãããããžã§ã¯ãã§ãã OpenPubkey ãã Docker Official Images (DOI) ã®çœ²åãœãªã¥ãŒã·ã§ã³ã®äžéšãšããŠäœ¿çšããæå ãçºè¡šããŸãã ã眲åã¢ãããŒãã®è©³çްã«ã€ããŠã¯ãDockerCon ã®è¬æŒãDocker official Imagesã§ã®ãœãããŠã§ã¢ãµãã©ã€ãã§ãŒã³ã®æ§ç¯ãã§èª¬æããŸãããÂ
ãã®æçš¿ã§ã¯ãæŽæ°ãããDOIçœ²åæŠç¥ã«ã€ããŠèª¬æããŸãã åºæ¬çãªã³ã³ããã€ã¡ãŒãžçœ²åã®ä»çµã¿ããå§ããŠãå ¬ééµãšç§å¯éµã®ãã¢ãèªèšŒå±ãæŽæ°ãã¬ãŒã ã¯ãŒã¯(TUF)ãã¿ã€ã ã¹ã¿ã³ããã°ãéææ§ãã°ãOpen ID Connect ã䜿çšãã ID æ€èšŒãªã©ãçŸåšäžè¬çãªã€ã¡ãŒãžçœ²åãããŒã«åŸã ã«æ§ç¯ããŠãããŸãã
ãããã®ä»çµã¿ã説æããåŸãOpenPubkeyãæè¿ã®ããã€ãã®æ©èœåŒ·åãå«ããŠæŽ»çšããŠããããŒãã¹ã ãŒãºã«ããæ€èšŒè ãä¿¡é Œããå¿ èŠã®ãããµãŒãããŒãã£ãšã³ãã£ãã£ã®æ°ãæžããæ¹æ³ã瀺ããŸãã
ããŸãããã°ããã®æ®µéçãªç©èªã¯ããœãããŠã§ã¢ã¢ãŒãã£ãã¡ã¯ã眲åã«äžæ £ããªäººãããã®ææ¡ãçŸåšã®ã¢ãããŒããšã©ã®ããã«ç°ãªãããæ¢ããŠãã人ã«åœ¹ç«ã€ã§ãããã ãã€ãã®ããã«ãDockerã¯éçºè ãšã¯ã¹ããªãšã³ã¹ã®åäžãéçºè ãä»å 䟡å€ã«è²»ããæéã®å¢å ãããã³èŠåŽã«è²»ããæéã®åæžã«åãçµãã§ããŸãã
ãã®æçš¿ã§èª¬æããã¢ãããŒãã¯ãDockerãŠãŒã¶ãŒãæ¯æ¥äœ¿çšããDOIã€ã¡ãŒãžã®æŽåæ§ãšåºæãç°¡åã«æ€èšŒã§ããããã«ããããšã§ããœãããŠã§ã¢ãµãã©ã€ãã§ãŒã³ã®ã»ãã¥ãªãã£ãæ¹åã§ããããã«ããããšãç®çãšããŠããŸãã

ã³ã³ãã㌠ã€ã¡ãŒãžãžã®çœ²å
ãšã³ãã£ãã£ã¯ãããžã¿ã«çœ²åãäœæããŠã€ã¡ãŒãžã«è¿œå ããããšã§ãã³ã³ãã㌠ã€ã¡ãŒãžããã«ãããããšã蚌æã§ããŸãã ãã®ããã»ã¹ã¯çœ²åãšåŒã°ããŸãã ã€ã¡ãŒãžã«çœ²åããããã«ããšã³ãã£ãã£ã¯å ¬éããŒãšç§å¯ããŒã®ãã¢ãäœæã§ããŸãã ç§å¯ããŒã¯ç§å¯ã«ããŠããå¿ èŠããããå ¬éããŒã¯ãããªãã¯ã«å ±æã§ããŸãã
ã€ã¡ãŒãžã眲åããããšãç§å¯ããŒãšã€ã¡ãŒãžã®ãã€ãžã§ã¹ãã䜿çšããŠçœ²åãçæãããŸãã å ¬éããŒãæã£ãŠãã人ã¯èª°ã§ããç§å¯ããŒãæã€ãŠãŒã¶ãŒã«ãã£ãŠçœ²åãäœæãããããšãæ€èšŒã§ããŸã (å³ 1)ã

ã³ã³ãã㌠ã€ã¡ãŒãžã«çœ²åããæ¹æ³ããåçŽãªã¢ãããŒãããå§ããŠãã€ã¡ãŒãžçœ²åã®çŸåšã®çŸç¶ãŸã§æ§ç¯ããDocker ãææ¡ãããœãªã¥ãŒã·ã§ã³ã§çµããæ¹æ³ã«ã€ããŠèª¬æããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ãèšèšããããŠãŒã¹ã±ãŒã¹ã§ãããããäŸãšããŠDOIãã«ãããã»ã¹ã®äžéšãšããŠDockerå ¬åŒã€ã¡ãŒãž(DOI)ã«çœ²åããŸãã
ãã®æçš¿å šäœã®å³ã§ã¯ã眲åã衚ãããã«è²ä»ãã®ã·ãŒã«ã䜿çšããŸãã ã·ãŒã«ã®è²ã¯ã眲åãããç§å¯éµã®è²ãšäžèŽããŸã(å³2)ã

æ€èšŒè ãå ¬ééµã§ã€ã¡ãŒãžçœ²åãæ€èšŒããåŸã«ç¥ã£ãŠããã®ã¯ãã€ã¡ãŒãžãå ¬ééµã«é¢é£ä»ããããç§å¯éµã§çœ²åãããããšã ãã§ããããšã«æ³šæããŠãã ããã ã€ã¡ãŒãžãä¿¡é Œããã«ã¯ãæ€èšŒè ã¯ããŒãã¢ã®ææè ã®çœ²å ãš ID ã確èªããå¿ èŠããããŸã (å³ 3)ã

ID ãšèšŒææž
å ¬ééµãšç§å¯éµã®ãã¢ã®ææè ãã©ã®ããã«ç¢ºèªããŸãã? ãããèšŒææžã®ç®çã§ãããå ¬ééµãšååãå«ãåçŽãªããŒã¿æ§é ã§ãã èšŒææžã¯ããµããžã§ã¯ããšåŒã°ããååãå ¬éããŒã«ãã€ã³ãããŸãã ãã®ããŒã¿æ§é ã¯éåžžãèšŒææžã®çºè¡è ãšåŒã°ããèªèšŒå± (CA) ã«ãã£ãŠçœ²åãããŸããÂ
èšŒææžã¯ã察å¿ããããŒã§äœæããã眲åãšå ±ã«é åžã§ããŸãã ã€ãŸããã€ã¡ãŒãžã®ã³ã³ã·ã¥ãŒããŒã¯ãã€ã¡ãŒãžã®çœ²åã«äœ¿çšããããã¹ãŠã®å ¬éããŒã®ææè ã確èªããå¿ èŠã¯ãããŸããã 代ããã«ãã¯ããã«å°ã㪠CA èšŒææžã®ã»ããã«äŸåããããšãã§ããŸãã ããã¯ãWebãã©ãŠã¶ãHTTPSã䜿çšããç¡æ°ã®Webãµã€ããšã®ä¿¡é Œã確ç«ããããã«æ°åã®ã«ãŒãCAèšŒææžã®ã»ãããæã£ãŠããæ¹æ³ã«äŒŒãŠããŸãã
DOI 眲åã®äŸã«æ»ããšã1234 å ¬éããŒãš Docker å ¬åŒã€ã¡ãŒãž (DOI) ãã«ããŒåããã€ã³ãããèšŒææžãé åžãããšãèšŒææžãçºè¡ãã CA ãä¿¡é ŒããŠããéãã誰ã§ã 1234 ç§å¯ããŒã«ãã£ãŠçœ²åããã ã€ã¡ãŒãžã DOI ãã«ã㌠ã«ãã£ãŠçœ²åãããŠããããšã確èªã§ããŸã (å³ 4)ã

ä¿¡é Œããªã·ãŒ
èšŒææžã¯ãã©ã®å ¬ééµãã©ã®ãšã³ãã£ãã£ã«å±ããŠããããšããåé¡ã解決ããŸãããã©ã®ãšã³ãã£ãã£ãã€ã¡ãŒãžã«çœ²åããããš ã«ãªã£ãŠãã ããã©ããã£ãŠç¥ãããšãã§ããŸãã? ãã®ããã«ã¯ãä¿¡é Œããªã·ãŒãã€ãŸãã€ã¡ãŒãžãžã®çœ²åãèš±å¯ãããŠãããšã³ãã£ãã£ã詳述ãã眲åä»ãã¡ã¿ããŒã¿ãå¿ èŠã§ãã Dockerå ¬åŒã€ã¡ãŒãžã®å Žåãä¿¡é Œããªã·ãŒã«ã¯ãDOIãã«ããµãŒããŒãã€ã¡ãŒãžã«çœ²åããå¿ èŠãããããšãèšèŒãããŸãã
æªæã®ããåœäºè ãããªã·ãŒã倿Žã§ããå Žåãæªæã®ããåœäºè ã®ããŒã眲åãèš±å¯ãããã¹ãã§ã¯ãªãç»åã«çœ²åããããšãèš±å¯ãããŠãããšã¯ã©ã€ã¢ã³ãã«ä¿¡ã蟌ãŸããããšãã§ãããããä¿¡é Œããªã·ãŒãå®å šãªæ¹æ³ã§æŽæ°ãããããã«ããå¿ èŠããããŸãã å®å šãªä¿¡é Œããªã·ãŒã®æŽæ°ã確å®ã«ããããã«ãä»»æã®ãã¡ã€ã«ã«æŽæ°ãå®å šã«é åžããããã®ã¡ã«ããºã ã§ããæŽæ°ãã¬ãŒã ã¯ãŒã¯(TUF)(仿§)ã䜿çšããŸãã
TUF ãªããžããªã¯ãããŒã®éå±€ã䜿çšããŠããªããžããªå ã®ãã¡ã€ã«ã®ãããã§ã¹ãã«çœ²åããŸãã ãããã§ã¹ããšåŒã°ãããã¡ã€ã« ã€ã³ããã¯ã¹ã¯ãèªååãæå¹ã«ããããã«ãªã³ã©ã€ã³ã§ä¿æãããããŒã§çœ²åããããªã³ã©ã€ã³çœ²åããŒã¯ãªãã©ã€ã³ã®ã«ãŒã ããŒã§çœ²åãããŸãã ããã«ããããªã³ã©ã€ã³ããŒã䟵害ãããå Žåã«ãªããžããªãå埩ã§ããŸãã
TUF ãªããžããªå ã®ãã¡ã€ã«ã«æŽæ°ãããŠã³ããŒãããã¯ã©ã€ã¢ã³ãã¯ãæåã«çœ²åæžã¿ãããã§ã¹ãã®ææ°ã³ããŒãååŸãããããã§ã¹ãã®çœ²åãæ€èšŒãããŠããããšã確èªããå¿ èŠããããŸãã ãã®åŸãå®éã®ãã¡ã€ã«ãååŸã§ããŸãã
TUFãªããžããªãäœæããããšãé åžã¡ã«ããºã ãä¿¡é ŒãããŠããªãå Žåã§ããéžæããä»»æã®æ¹æ³ã§é åžã§ããŸãã Docker Hub ã¬ãžã¹ããªã䜿çšããŠé åžããŸã (å³ 5)ã

èšŒææžã®æå¹æéãšã¿ã€ã ã¹ã¿ã³ã
åã®ã»ã¯ã·ã§ã³ã§ã¯ãèšŒææžã ID ããå ¬éããŒãžã®åãªããã€ã³ããšããŠèª¬æããŸããã å®éã«ã¯ãèšŒææžã«ã¯ããã€ãã®è¿œå ããŒã¿ãå«ãŸããŠããŸãã éèŠãªè©³çްã®1ã€ã¯æå¹æéã§ãã éåžžãèšŒææžã¯æå¹æéåŸã«ä¿¡é Œãããã¹ãã§ã¯ãããŸããã ã€ã¡ãŒãžã®çœ²å (å³ 5 åç §) ã¯ãæ·»ä»ãããèšŒææžã®æå¹æéãŸã§æå¹ã§ãã 眲åã®éããã寿åœã¯ãç»åãé·æã¡ããã(èšŒææžãããé·æã¡ããã)å¿ èŠããããããæãŸãããããŸããã
ãã®åé¡ã¯ãã¿ã€ã ã¹ã¿ã³ãæ©é¢ (TSA) ã䜿çšããããšã§è§£æ±ºã§ããŸãã TSA ã¯äœããã®ããŒã¿ãåãåãããã®ããŒã¿ãçŸåšæå»ã«ãã³ãã«ãããã³ãã«ã«çœ²åããŠããè¿åŽããŸãã TSA ãå©çšããããšã§ãTSA ãä¿¡é Œãã人ã¯èª°ã§ãããã³ãã«ãããæéã«ããŒã¿ãååšããŠããããšãæ€èšŒã§ããŸãã
眲åã TSA ã«éä¿¡ããçŸåšã®ã¿ã€ã ã¹ã¿ã³ãã眲åã«ãã³ãã«ãããããšãã§ããŸãã æ¬¡ã«ãèšŒææžãæ€èšŒãããšãã«ããã³ãã«ãããã¿ã€ã ã¹ã¿ã³ãããçŸåšã®æå»ããšããŠäœ¿çšã§ããŸãã ã¿ã€ã ã¹ã¿ã³ãã¯ã眲åã®äœææã«èšŒææžã®æå¹æéãåããŠããªãã£ãããšã蚌æããŸãã TSA ã®èšŒææžãæéåãã«ãªãããã®æç¹ã§ TSA ãäœæãã眲åä»ãã¿ã€ã ã¹ã¿ã³ãããã¹ãŠæéåãã«ãªããŸãã TSAèšŒææžã¯éåžžãé·æé(10+幎)æç¶ããŸã(å³6)ã

ãªãŒãã³ID ã³ãã¯ã
ãããŸã§ãCA ã眲åè ã® ID ã確èªããæ¹æ³ (åã®å³ã® [ID ã®èšŒæ] ããã¯ã¹) ãç¡èŠããŠããŸããã ãã®æ€èšŒã®ä»çµã¿ã¯ CA ã«ãã£ãŠç°ãªããŸããã1 ã€ã®ã¢ãããŒãã¯ãOpenID Connect (OIDC) ã䜿çšããŠãã®æ€èšŒããµãŒãããŒãã£ã«ã¢ãŠããœãŒã·ã³ã°ããããšã§ãã
OIDC ãããŒå šäœã«ã€ããŠã¯èª¬æããŸããããäž»ãªæé ã¯æ¬¡ã®ãšããã§ãã
- 眲åè ã¯ãOIDC ãããã€ã㌠(GoogleãGitHubãMicrosoft ãªã©) ã§èªèšŒãããŸãã
- OIDC ãããã€ããŒã¯ã眲åè ãèªåã® ID ã蚌æããããã«äœ¿çšã§ãã眲åä»ãããŒã¯ã³ã§ãã ID ããŒã¯ã³ãçºè¡ããŸãã
- ID ããŒã¯ã³ã«ã¯ãID ããŒã¯ã³ã䜿çšããŠçœ²åè ã® ID ãæ€èšŒãã察象è ãæå®ãã察象ãŠãŒã¶ãŒãå«ãŸããŸãã 察象èªè ã¯èªèšŒå±ã§ãã ID ããŒã¯ã³ã¯ãä»ã®å¯Ÿè±¡ãŠãŒã¶ãŒã«ãã£ãŠæåŠãããå¿ èŠããããŸãã
CA ã¯ãOIDC ãããã€ããŒãä¿¡é ŒããID ããŒã¯ã³ã®å¯Ÿè±¡ãŠãŒã¶ãŒèŠæ±ãæ€èšŒããæ¹æ³ãçè§£ããå¿ èŠããããŸãã
OIDC ID ããŒã¯ã³ã¯ãOIDC ãããã€ããŒã®ç§å¯ããŒã䜿çšããŠçœ²åãããŸãã 察å¿ããå ¬éããŒã¯ãOIDC ãããã€ããŒã«ãã£ãŠãã¹ããããŠããæ€åºå¯èœãª HTTP ãšã³ããã€ã³ãããé åžãããŸãã
眲åä»ãDOIã¯GitHubã¢ã¯ã·ã§ã³ã䜿çšããŠãã«ããããGitHubã¢ã¯ã·ã§ã³ã¯GitHubã¢ã¯ã·ã§ã³OIDCãããã€ããŒã§ãã«ãããã»ã¹ãèªåçã«èªèšŒã§ãããããIDããŒã¯ã³ããã«ãããã»ã¹ã«å©çšã§ããŸã(å³7)ã

éèŠãªäŸµå®³
ãã®æçš¿ã®åé ã§ãã·ã¹ãã ã®å®å šæ§ãç¶æããããã«ç§å¯éµãéå ¬éã«ããå¿ èŠããããšè¿°ã¹ãŸããã 眲åè ã®ç§å¯éµã䟵害ãããå Žåãæªæã®ããåœäºè ã¯ã眲åè ã«ãã£ãŠçœ²åãããŠããããšãæ€èšŒã§ãã眲åãäœæã§ããŸãã
ãããã®ããŒã䟵害ããããªã¹ã¯ã軜æžããããã®ããã€ãã®æ¹æ³ãèŠãŠãããŸãããã
ãšãã§ã¡ã©ã«ããŒ
ç§å¯éµã®äŸµå®³ã®ãªã¹ã¯ãæžããè¯ãæ¹æ³ã¯ãç§å¯éµãã©ãã«ãä¿åããªãããšã§ãã ããŒãã¢ã¯ã¡ã¢ãªå ã§çæããäžåºŠäœ¿çšãããšãç§å¯ããŒãç Žæ£ã§ããŸãã ã€ãŸããèšŒææžãäœ¿ãæšãŠã§ããã眲åãäœæããããã³ã« CA ã«æ°ããèšŒææžãèŠæ±ããå¿ èŠããããŸãã
éææ§ãã°
ãšãã§ã¡ã©ã«ããŒã¯çœ²åããŒèªäœã«é©ããŠããŸãããä»ã«ã䟵害ãããå¯èœæ§ã®ãããã®ããããŸãã
- CA ã®ç§å¯ã㌠(å®éã«ã¯ãããã¯äžæçãªãã®ã§ã¯ãããŸãã)
- OIDC ãããã€ããŒã®ç§å¯ã㌠(å®éã«ã¯ãããã¯äžæçãªãã®ã§ã¯ãããŸãã)
- OIDC ã¢ã«ãŠã³ãã®è³æ Œæ å ±
ãããã®ããŒ/è³æ Œæ å ±ã¯éå ¬éã«ããå¿ èŠããããŸãããå¶çºçãªäŸµå®³ãçºçããå Žåã«åããŠã誀çšãæ€åºããæ¹æ³ãå¿ èŠã§ãã ãã®ç¶æ³ã§ã¯ãéææ§ãã°(TL)ã圹ç«ã¡ãŸãã
ééæ§ãã°ã¯ã远å å°çšã®æ¹ãã鲿¢ããŒã¿ ã¹ãã¢ã§ãã ããŒã¿ããã°ã«æžã蟌ãŸãããšããã°ã®ãªãã¬ãŒã¿ãŒã«ãã£ãŠçœ²åãããå信確èªãè¿ããããã°ã«å«ãŸããŠããããšã®èšŒæ ãšããŠäœ¿çšã§ããŸãã ãã°ãç£èŠããŠãçãããã¢ã¯ãã£ããã£ããã§ãã¯ããããšãã§ããŸãã
éææ§ãã°ã䜿çšããŠãã¹ãŠã®çœ²åãä¿åããTLã¬ã·ãŒãã眲åã«ãã³ãã«ã§ããŸãã 眲åãæå¹ãªTLã¬ã·ãŒãã«ãã³ãã«ãããŠããå Žåã«ã®ã¿ã眲åãæå¹ãšããŠåãå ¥ããããšãã§ããŸãã 眲åã¯ãšã³ããªãTLã«ããå Žåã«ã®ã¿æå¹ã§ãããããåœã®çœ²åãäœæããæªæã®ããåœäºè ãTLã«ãšã³ããªãå ¬éããå¿ èŠããããŸãã TLã¯çœ²åè ãç£èŠã§ãã眲åè ã¯äœæããŠããªããã°ã«ã·ã°ããã£ãããããšã«æ°ä»ããå Žåã«ã¢ã©ãŒã ã鳎ããããšãã§ããŸã(å³8)ã ãã°ã¯ãé¢ä¿ãã第äžè ãç£èŠããŠãæ£ããèŠããªã眲åããã§ãã¯ããããšãã§ããŸã(å³9)ã
éææ§ãã°ã䜿çšããŠãCA ã«ãã£ãŠçºè¡ãããèšŒææžãä¿åããããšãã§ããŸãã èšŒææžã¯ãTLã¬ã·ãŒããä»å±ããŠããå Žåã«ã®ã¿æå¹ã§ãã ããã¯TLSèšŒææžã®ä»çµã¿ã§ããããTLã¬ã·ãŒããæ·»ä»ãããŠããå Žåã«ã®ã¿ãã©ãŠã¶ã«ãã£ãŠä¿¡é ŒãããŸãã
TL ã¬ã·ãŒãã«ã¯ã¿ã€ã ã¹ã¿ã³ããå«ãŸããŠããã®ã§ãTL ã¯è¿œå æ©èœãæäŸããªãããTSA ã®åœ¹å²ãå®å šã«çœ®ãæããããšãã§ããŸãã


çãŸããç§å¯éµãšæ£åœãªèšŒææžã䜿çšããåæ§ã®æ»æãããã®æ¹æ³ã§æ€åºã§ããŸãã
眲åã®çŸç¶ã®æŠèŠ
ãããŸã§ã®ãã¹ãŠã¯ãã¢ãŒãã£ãã¡ã¯ã眲åã®çŸç¶ã説æããŠããŸãã ãããŸã§ã«èª¬æãããã¹ãŠã®ã³ã³ããŒãã³ãããŸãšããŠèŠçŽããŠã¿ãŸããã(å³10)ã ãããã¯ïŒ
- OIDC ãããã€ã㌠(äžéšã®ãšã³ãã£ãã£ã® ID ã確èªãããã)
- ID ãå ¬éããŒã«ãã€ã³ãããèšŒææžãçºè¡ããèªèšŒå±
- 眲åè : 察å¿ããç§å¯éµã§ã€ã¡ãŒãžã«çœ²åããŸãã
- éææ§ãã°(TL):眲åãä¿åãã眲åãããã¿ã€ã ã¹ã¿ã³ãä»ãã®é åæžãè¿ããŸã
- TUF ãªããžã㪠(ä¿¡é Œããªã·ãŒãé åžãã)
- æªæã®ããåäœãæ€åºããããã®éææ§ãã°ã¢ãã¿ãŒ
- ã¬ãžã¹ããª: ãã¹ãŠã®ã¢ãŒãã£ãã¡ã¯ããæ ŒçŽãã
- ã€ã¡ãŒãžã®çœ²åãæ€èšŒããããã®ã¯ã©ã€ã¢ã³ã

眲åãæ€èšŒããã¯ã©ã€ã¢ã³ãã¯ã以äžãä¿¡é Œããå¿ èŠããããŸãã
- The CA
- ãã£ãã«ãŒ
- OIDC ãããã€ã㌠(æšç§»çã«ã¯ãCA ã OIDC ãããã€ããŒããã® ID ããŒã¯ã³ãæ£ããæ€èšŒããããšãä¿¡é Œããå¿ èŠããããŸã)
- TUFãªããžããªã®çœ²åè
ä¿¡é Œã§ããããšã¯ãããããããŸãã ãããã®ãšã³ãã£ãã£ã®ããããã䟵害ãããããæªæãæã£ãŠè¡åããããããšãã·ã¹ãã ã®ã»ãã¥ãªãã£ã䟵害ãããŸãã éææ§ãã°ãç£èŠããããšã§ãã®ãããªäŸµå®³ãæ€åºã§ãããšããŠãã修埩ã¯å°é£ãªå ŽåããããŸãã ãœãªã¥ãŒã·ã§ã³ã®å šäœçãªã»ãã¥ãªãã£ãæãªãããšãªãããããã®ä¿¡é Œãã€ã³ãã®ãããããåé€ãããšãæ¹åãããŸãã
Dockerãææ¡ãã眲åãœãªã¥ãŒã·ã§ã³
CA ã¯ãèšŒææžãçºè¡ããåã«ãç§å¯ããŒã®å¶åŸ¡ãš ID ã®å¶åŸ¡ã確èªããå¿ èŠããããŸãã å³ 10 ã§ã¯ãCA 㯠ID æ€èšŒã OIDC ãããã€ããŒã«ã¢ãŠããœãŒã·ã³ã°ããŠããŸãã OIDCãããã€ããŒã䜿çšããŠIDãæ€èšŒã§ããŸãããããã䜿çšããŠç§å¯éµã®å¶åŸ¡ã確èªã§ããŸãã? ã§ããããšãããããŸããã
OpenPubkey ã¯ãOIDC ã¢ã€ãã³ãã£ãã£ãå ¬ééµã«ãã€ã³ãããããã®ãããã³ã«ã§ãã ãããã©ã®ããã«æ©èœãããã«ã€ããŠã®è©³çŽ°ã¯ OpenPubkeyã®è«æã«ãããŸããã以äžã¯ç°¡åãªèª¬æã§ããÂ
OIDC ã§ã¯ãèŠæ±ã®äžéšãšã㊠OIDC ãããã€ããŒã«éä¿¡ããäžæã®ä¹±æ°ããå§ãããŸãã ãã®çªå·ã¯ãã³ã¹ãšåŒã°ããŸãã
ãã³ã¹ãéä¿¡ãããå ŽåãOIDC ãããã€ããŒã¯ ID ããŒã¯ã³ãšåŒã°ãã眲åä»ã JWT (JSON Web ããŒã¯ã³) ã§ãããè¿ãå¿ èŠããããŸãã 眲åè ã®å ¬ééµã®ããã·ã¥ãšã©ã³ãã ãªãã€ãºãšããŠãã³ã¹ãæ§ç¯ããããšã§ããããæå©ã«äœ¿çšã§ããŸã(ãã³ã¹ã¯äŸç¶ãšããŠã©ã³ãã ã§ãªããã°ãªããªããã)ã ãã®åŸã眲åè ã¯ãOIDC ãããã€ããŒããã® ID ããŒã¯ã³ãå ¬éããŒãšã©ã³ãã ãã€ãºã§ãã³ãã«ãããã®ç§å¯ããŒã䜿çšããŠãã³ãã«ã«çœ²åã§ããŸãã
çµæã®ããŒã¯ã³ (PK ããŒã¯ã³ãšåŒã°ããŸã) ã¯ãæ€èšŒè ã OIDC ãããã€ããŒãä¿¡é ŒããŠããéããç¹å®ã®æç¹ã§ã® OIDC ID ã®å¶åŸ¡ãšç§å¯ããŒã®å¶åŸ¡ã蚌æããŸãã ã€ãŸããPK ããŒã¯ã³ã¯ããã®æç¹ãŸã§ã®ãã¹ãŠã®çœ²åãããŒã§ CA ã«ãã£ãŠæäŸãããèšŒææžãšåã圹å²ãæãããŸãããCA ãžã®ä¿¡é Œã¯å¿ èŠãããŸããã ãã®ããŒã¯ã³ã¯ãèšŒææžãšåãæ¹æ³ã§çœ²åãšå ±ã«é åžã§ããŸãã
ãã ããOIDC IDããŒã¯ã³ã¯ãçæéã§æ€èšŒããã³ç Žæ£ãããããã«èšèšãããŠããŸãã ããŒã¯ã³ãæ€èšŒããããã®å ¬éããŒã¯ãOIDC ãããã€ããŒã«ãã£ãŠãã¹ããããŠãã API ãšã³ããã€ã³ãããå ¥æã§ããŸãã ãããã®ããŒã¯é »ç¹ã« (æ°é±éãŸãã¯æ°ãæããšã«) ããŒããŒã·ã§ã³ãããçŸåšãç¡å¹ã«ãªã£ãããŒã«ãã£ãŠçœ²åãããããŒã¯ã³ãæ€èšŒããæ¹æ³ã¯ãããŸããã ãã®ãããå±¥æŽããŒã®ãã°ã䜿çšããŠãããŒããŒã·ã§ã³ããã OIDC ãããã€ã㌠ããŒã§çœ²åããã PK ããŒã¯ã³ãæ€èšŒããå¿ èŠããããŸãã ãã®ãã°ã¯æ€èšŒè ã«ãšã£ãŠè¿œå ã®ä¿¡é Œãã€ã³ãã§ãããããããä¿¡é Œãã€ã³ã(CA)ãåé€ããå¥ã®ä¿¡é Œãã€ã³ã(å ¬ééµã®ãã°)ã«çœ®ãæããããã«èŠããå ŽåããããŸãã DOIã«ã€ããŠã¯ãä¿¡é Œããªã·ãŒã®é åžã«äœ¿çšãããTUFãªããžããªãšã®å¥ã®ä¿¡é Œç¹ããã§ã«è¿œå ããŠããŸãã ãã®TUFãªããžããªã䜿çšããŠãå ¬ééµã®ãã°ãé åžããããšãã§ããŸãã

OpenPubkey ã®æ©èœåŒ·å
æåã«å®åŒåãããããã«ãOpenPubkeyã¯ã説æããããã«ã³ãŒã眲åã¯ãŒã¯ãããŒããµããŒãããããã«ã¯èšèšãããŠããŸããããã®çµæãããã§èª¬æããå®è£ ã«ã¯ããã€ãã®æ¬ ç¹ããããŸãã 以äžã§ã¯ãããããã®æ¬ ç¹ãšããã«é¢é£ãã解決çã«ã€ããŠèª¬æããŸãã
OIDC ID ããŒã¯ã³ã¯ãã¢ã©ãŒèªèšŒããŒã¯ã³ã§ã
OIDC ID ããŒã¯ã³ã¯ãOIDC ãããã€ããŒã«ãã£ãŠçœ²åããã JWT ã§ãããããŒã¯ã³ã®ãã¢ã©ãŒãããŒã¯ã³ã®ãµããžã§ã¯ããšããŠèªèšŒã§ããããã«ããŸãã ãããã®ããŒã¯ã³ãå ¬éãããããæªæã®ããåœäºè ãã¬ãžã¹ããªããæå¹ãª ID ããŒã¯ã³ãååŸããããããµãŒãã¹ã«æç€ºã㊠ID ããŒã¯ã³ã®ãµããžã§ã¯ããšããŠèå¥ã§ããããšãæå³ããŸãã
çè«çã«ã¯ãOIDC仿§ã«ããã°ãæ¶è²»è ã¯ããŒã¯ã³ãä¿¡é Œããåã«IDããŒã¯ã³ã®ãªãŒãã£ãšã³ã¹ããã§ãã¯ããå¿ èŠããããããããã¯åé¡ã«ã¯ãªããŸãã(ã€ãŸããããŒã¯ã³ããµãŒãã¹Fooã«æç€ºãããå ŽåããµãŒãã¹Fooã¯ããŒã¯ã³ããµãŒãã¹Fooã察象ãšããŠããããšã確èªããå¿ èŠããããŸããªãŒãã£ãšã³ã¹ã¯ã¬ãŒã )ã ãã ããOIDCã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªããã®ãã§ãã¯ãè¡ããªããšããåé¡ããããŸããã
ãã®åé¡ã解決ããã«ã¯ãID ããŒã¯ã³ãã OIDC ãããã€ããŒã®çœ²åãåé€ããã®ãŠãŒ ãã¹ã¯ã¢ã¿ãŒ (GQ) 眲åã«çœ®ãæããããšãã§ããŸãã ãã®GQ眲åã«ããã眲åä»ãããŒã¯ã³ãå ±æããã«OIDCãããã€ããŒã®çœ²åããã£ãããšã蚌æã§ãããã®èšŒæã¯OIDCãããã€ããŒã®å ¬ééµãšæ®ãã®IDããŒã¯ã³ã䜿çšããŠæ€èšŒã§ããŸãã GQ 眲åã®è©³çްã«ã€ããŠã¯ã å ã®è«æ ãš OpenPubkey ãªãã¡ã¬ã³ã¹å®è£ ãåç §ããŠãã ããã ç§ãã¡ã¯ã ã¶ã«ãªãŒã»ãã¥ãŒãã³ã®è«æã§è°è«ããããã®ãšåæ§ã®ã¢ãããŒãã䜿çšããŸããã
OIDC ID ããŒã¯ã³ã«ã¯å人æ å ±ãå«ããããšãã§ããŸã
GitHub Actions ãªã©ã® CI ã·ã¹ãã ããã® OIDC ID ããŒã¯ã³ã䜿çšããå ŽåãããŒã¯ã³ã«æŒæŽ©ããå¯èœæ§ã®ããå人æ å ±ãååšããå¯èœæ§ã¯äœãã§ãã ããšãã°ãGitHub Actions OIDC ID ããŒã¯ã³ã§å©çšã§ããå®å šãªããŒã¿ã¯ã GitHub ã§ææžåãããŠããŸãã
ãªããžããªåã Git ã³ããã ãã€ãžã§ã¹ããªã©ããã®ããŒã¿ã®äžéšã¯ãDocker ãã«ã ããã»ã¹ãçæãã眲åãããŠããªãæ¥æŽæ§æèšŒæã«æ¢ã«å«ãŸããŠããŸãã 人éã® ID ã衚ã ID ããŒã¯ã³ã«ã¯ãããå€ãã®å人ããŒã¿ãå«ãŸããå ŽåããããŸãããééããªããããã¯æ¶è²»è ãä¿¡é Œããªã·ãŒã®äžéšãšããŠæ€èšŒãããçš®é¡ã®ããŒã¿ã§ããããŸãã
éèŠãªäŸµå®³
眲åè ã®ç§å¯éµã䟵害ãããå Žå(ããã¯äžæçãªéµã§ããããã確ãã«ããããã«ãããŸãã)ãæ»æè ãç»åã«çœ²åãã眲åãå ¬éPKããŒã¯ã³ãšçµã¿åãããã®ã¯ç°¡åã§ãã åè¿°ã®ããã«ãéææ§ãã°ã¯ãã®çš®ã®äŸµå®³ãæ€åºããã®ã«åœ¹ç«ã¡ãŸãããããã«é²ãã§ãããããããé²ãããšãã§ããŸãã
å ã®OpenPubkeyãããŒã§ã¯ã眲åè ã®å ¬ééµãšã©ã³ãã ãã€ãºãããã³ã¹ãäœæãã察å¿ããç§å¯éµã䜿çšããŠç»åã«çœ²åããŸãã ãã ãããã³ã¹ã«ç»åã®ããã·ã¥ãå«ãããšããã§ã«çœ²åããç»åãOIDCãããã€ããŒã«ãã£ãŠäºå®äžçœ²åãããŸãã ã€ãŸããPK ããŒã¯ã³ã¯ãä»ã®ã€ã¡ãŒãžã«çœ²åããããã«åçã§ããªã 1 åéãã®ããŒã¯ã³ã«ãªããŸãã ãããã£ãŠãäžæçãªç§å¯éµã䟵害ããããšã¯ãæ»æè ã«ãšã£ãŠãã¯ã圹ã«ç«ã¡ãŸããã
OpenPubkey 㯠ID ããŒã¯ã³ã§ nonce ã¯ã¬ãŒã ã䜿çšããŸã
å®å šãª OIDC ãããŒã¯ãGitHub ã¢ã¯ã·ã§ã³ã§ã¯å©çšã§ããŸããã 代ããã«ããã«ã ããã»ã¹ããªãã·ã§ã³ã®ãªãŒãã£ãšã³ã¹ (aud) èŠæ±ã䜿çšã㊠ID ããŒã¯ã³ãèŠæ±ã§ããåçŽãª HTTP ãšã³ããã€ã³ããæäŸãããŸãã èªèšŒäžã«OIDCãããã€ããŒã«ä»»æã®ããŒã¿ã«çœ²åãããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãã¯ã¬ãŒã ã®æå³ããã䜿çšã劚ããªãéããID ããŒã¯ã³èŠæ±ã® 1 ã€ã«ãªãããŒã¿ã OIDC ãããã€ããŒã«éä¿¡ããŸãã GitHub Actions ã§ã¯ aud ã¯ã¬ãŒã ãä»»æã®å€ã«èšå®ã§ããããããã®ç®çã«äœ¿çšã§ããŸãã
次ã¯äœã§ãã?
Dockerã¯ãããåºç¯ãªãªãŒãã³ãœãŒã¹ã³ãã¥ããã£ããœãããŠã§ã¢ãµãã©ã€ãã§ãŒã³å šäœã®ã»ãã¥ãªãã£ãæ¹åã§ããããã«ããããšãç®çãšããŠããŸãã åªããã»ãã¥ãªãã£ã«ã¯ãåªãã䜿ããããããŒã«ãå¿ èŠã§ãããšåŒ·ãæããŠããŸãã ãããã¯ãBounce Security ã®åµèšè å Œ CEO ã§ãã Avi Douglen æ°ãéåŒã«è¿°ã¹ãŠããããã«ãããŠãŒã¶ããªãã£ãç ç²ã«ããã»ãã¥ãªãã£ã¯ãã»ãã¥ãªãã£ãç ç²ã«ããŠãããããããã®ã§ããÂ
ãã®æçš¿ã§èª¬æããã¢ãããŒãã¯ãã»ãã¥ãªãã£ãšä¿¡é Œãç ç²ã«ããããšãªããã³ã³ããã€ã¡ãŒãžãžã®çœ²åãå¯èœãªéãç°¡åã«ããããšãç®çãšããŠããŸãã å šäœçãªã¢ãããŒããç°¡çŽ åããè€éãªã€ã³ãã©ã¹ãã©ã¯ãã£èŠä»¶ãæé€ããããšã§ã10 幎åã« Linux ã³ã³ãããŒã®åºç¯ãªæ¡çšãå¯èœã«ããã®ãšåãæ¹æ³ã§ãã³ã³ãããŒçœ²åã®åºç¯ãªæ¡çšãä¿é²ããããšãç®æšã§ããÂ
ãªãŒãã³ãœãŒã¹ã³ãã¥ããã£ãšæå·åã®å®è·µè :眲åã«å¯Ÿãããã®ã¢ãããŒãã«ã€ããŠã©ãæããæããŠãã ããã OpenPubkey GitHub çµç¹å ã®ããŸããŸãªãªããžããªã«ãããäºåçãªå®è£ ã確èªã§ããŸããããŸããŸãªãªããžããªã§åé¡ãéãããã OpenSSFã³ãã¥ããã£ã®è°è«ã«åå ãããããŠãã ãããÂ
çæ§ããã®ãã£ãŒãããã¯ããåŸ ã¡ããŠããããœãããŠã§ã¢ãµãã©ã€ãã§ãŒã³ã®ã»ãã¥ãªãã£ãåäžãããããã«ååããããšã楜ãã¿ã«ããŠããŸãã
ããã«è©³ãã
- DOI眲åã«ã€ããŠè³ªåããããŸãã? DOI眲åã«é¢ããFAQãã芧ãã ããã
- Docker Scout ã䜿çšããŠããœãããŠã§ã¢ ãµãã©ã€ ãã§ãŒã³ã®ã»ãã¥ãªãã£ãåäžãããŸãã
- å®è£ ã«é¢ãã質å OpenPubkey GitHub çµç¹ã®ã³ãŒãã確èªããŠãã ããã
- OpenPubkey ã«ã€ããŠè³ªåããããŸãã? OpenPubkey FAQ ãåç §ããŠãã ããã
- 質åããããŸãã? Docker ã³ãã¥ããã£ããæäŒãããŸãã
- ããã«ãŒã¯åããŠã§ãã? å§ããŸãããã
ã¹ãã£ãã¯ãã£ã®ã¥ã¢ ç»åã©ã€ãã©ãª ãŠãŒãªã»ãã£ã³.