Dockerã§ãœãããŠã§ã¢ãµãã©ã€ãã§ãŒã³ãæ§ç¯ãã å ¬åŒã€ã¡ãŒãž
ãã¯ããããããŸãããããããæ¥ãŠãããŠããããšããç§ã¯ãžã§ãŒã ãºã§ããç§ã¯Dockerã§åããŠãããšã³ãžãã¢ã§ããç§ã¯ Docker Scout ãšDockerå ¬åŒã€ã¡ãŒãžã®ã»ãã¥ãªãã£ã«åãçµãã§ããŸããç§ãšäžç·ã«ããã®ã¯ãã¹ãã£ãªã³ãŒãã®ã€ãŒãµã³ã§ããããã«ã¡ã¯ãç§ã¯BastionZeroã®Ethanã§ããã®è¬æŒã® OpenPubkey ã®éšåã«ã€ããŠè©±ããŸãã
ãœãŒã·ã£ã«ã¡ãã£ã¢ã®å ±éã§ãçºè¡šããã£ãããšã«æ°ã¥ãããããããŸããã DockerãšBastionZeroã¯ãLinux Foundationãšå ±åã§ãã¯ãŒã«ãªæ°ãã眲åãœãªã¥ãŒã·ã§ã³ãéçºããŠããŸãã 仿¥ã¯ããã«ã€ããŠã話ãããŸãã ããããæåã«ããããDockerã®å ¬åŒã€ã¡ãŒãžã®ã³ã³ããã¹ãã«å ¥ããŠã¿ãŸãã Ethanã¯OpenPubkeyã®è©³çްã«èžã¿èŸŒã¿ããããã¯ãŒã¯ãæ©èœããŠãããã©ããã®ãã¢ãè¡ããæåŸã«è³ªåããæéãããããšãé¡ã£ãŠããŸãã
ã¡ãã£ãšããå 責äºé ãšããŠãããã€ãã®ã³ãŒãã瀺ããŸãã ãã®äžéšã¯ååšããŸããã äžéšã®ã³ã³ããŒãã³ããååšããŸããã ã³ãŒãã¯ååšããŸãã ãèªå® ã§ã詊ãããã ããŸãã ãããããã°ã ããã§ãããã ããã«é Œããªãã§ãã ããã éçšç°å¢ã®æºåãã§ããŠããŸããã ã ããããªãã¯èŠåãããŸããã
ç®æ¬¡
ããã«ãŒã®å ¬åŒç»å
Dockerã®å ¬åŒã€ã¡ãŒãžãšã¯äœã§ãã? ããã«ããã»ãšãã©ã®äººã¯ã圌ããäœã§ããããç¥ã£ãŠããã¯ãã§ãã DockerCon ã«ããŸãã ããããããããæãéèŠãªããšã¯ããããäžçæå€§ã®ãªãŒãã³ãœãŒã¹ããã±ãŒãžã®ãœãŒã¹ã®1ã€ã§ãããšããããšã§ãã äŒè°ã®åé ã§ãšã€ããŒãèšã£ãã®ã¯ããã ãšæããŸãã ããã«ã¯ãå€ãã®ãå€ãã®ãå€ãã®ãã©ãããã©ãŒã ãšã¢ãŒããã¯ãã£ã«ãŸããã£ãŠ 150 ãªããžããªããããŸãã
Dockerã®å ¬åŒã€ã¡ãŒãžã®ãµãã©ã€ãã§ãŒã³ãä¿è·ããããšã¯ãDockerã«ãšã£ãŠéåžžã«éèŠã§ãããããããç¶æããããã«ç§ãã¡ãæ¯æŽããŠãããã³ãã¥ããã£ã«ãšã£ãŠãéåžžã«éèŠã§ãã ãã®æèã«åºã¥ããŠããµã€ããŒã»ãã¥ãªãã£ããã³ã€ã³ãã©ã¹ãã©ã¯ãã£æ©é¢ã¯ããªãŒãã³ãœãŒã¹ã«é¢ããŠçŠç¹ãåœãŠãã¹ã2ã€ã®éèŠãªé åãç¹å®ããŸããã 1ã€ç®ã¯è匱æ§ã§ãã«ã³ãã¡ã¬ã³ã¹ã®ååã§ã¯è匱æ§ãšä¿®åŸ©ãéçºè ã®ã¯ãŒã¯ãããŒã«ã€ããŠå€ãã®è°è«ããããŸããã ãããŠå®éãã¯ãªã¹ãã£ã³ã¯ä»æ¥ãå¥ã®è¬æŒãããŠããŸãã ã ããããããèŠãŠãã ããã
ãã ãã2çªç®ã®ããããã€ãŸãDockerã®å ¬åŒã€ã¡ãŒãžã«é¢é£ãããµãã©ã€ãã§ãŒã³ã«çŠç¹ãåœãŠãŸãã Dockerã¯ãç§ãã¡ã補é ããŠããã ãã§ãªããã¯ã©ã€ã¢ã³ãã« 20 äžå°ã®ã©ããããããåºè·ããŠããããããã®åéã§æŽ»åããéåžžã«ãŠããŒã¯ãªç«å Žã«ãããŸãã ãããŠãæ¹çšåŒã®ãã®2ã€ã®åŽé¢ã䜿ã£ãŠäœããå§ããããšãã§ããŸãã
SLSAãæãã«ããŠãµãã©ã€ãã§ãŒã³ãèªãããšã¯ã§ããŸããã SLSAãäœã§ããããç¥ããªããã°ãããã¯ããªãã®æŒé£ã§ã¯ãããŸããã ããã¯ããµãã©ã€ãã§ãŒã³ãã¢ãã«åããããã®ãã¬ãŒã ã¯ãŒã¯ã§ãã ã¬ãã«ããããŸãã ãããã®ã¬ãã«ãäžããããšã§ãã»ãã¥ãªãã£ã段éçã«åäžãããããšã«ãªã£ãŠããŸãã ç§ãã¡ã¯çãã¬ãã«ãŒãã§ãã ããã§ãšãããããŸãã ç§ãã¡ã¯ããããŸããã ããããçé¢ç®ãªè©±ãDockerã®å ¬åŒã€ã¡ãŒãžã«ã€ããŠã¯ãã¬ãã«3ã«å°éããããšããŠããŸãã ç§ãã¡ã¯ãã®ããã»ã¹ãå®éã«çµéšããŠããããã§ã¯ãããŸããã ããã¯ç§ãã¡ã«ãšã£ãŠæ¬åœã«æå³ããããŸããã 匷åããããã«ããšãªã¢ã§ã¯ããã§ã«ããªãå€ãã®ããšãèµ·ãã£ãŠããŸãã æ¥æŽã«ã€ããŠã¯å€ãã®ããšãèµ·ãã£ãŠãããå ¬åŒç»åã®äžã«ã¯ãã§ã«åºæãšSBOMãä»ããŠãããã®ããããŸãã ãããã仿¥ã¯çœ²åã®éšåã«çŠç¹ãåœãŠãŸãã
眲åã«éç¹ã眮ã
ã§ãããããã®ãŠãµã®ã®ç©ŽãæãäžããŠãããã¡ã«ã眲åã ãã®åé¡ã§ã¯ãªãããšãããã£ãã®ã§ãã 誰ã眲åããã®ãããªã眲åããã®ããäœã«çœ²åããã®ããããã¹ãŠã§ãã ãã®æ¥çã§ã¯ãGPGã®ããã«ã人ã ã«çœ²åãããã®ã«éåžžã«æåããŠãã眲åã®äŸããããããããŸãã Maven Central Repositoryã®ãã¹ãŠã¯ãGPGã䜿çšããŠçœ²åãããŠããŸãã ãããã誰ããã®çœ²åãæ€èšŒããŠããã®ã§ãããã? ãããã®çœ²åã®äŸ¡å€ã¯äœã§ãã? ã§ããããæ€èšŒã®åé¡ã解決ããªãéããæ¬åœã®äŸ¡å€ã¯äœããšããåããæããããªããã°ãªããŸããã ãã£ããèšã£ãããã«ãæ€èšŒã倧äºã ãšæããŸãã ãŸããDockerã®å ¬åŒã€ã¡ãŒãžã®å Žåãæ€èšŒããªããã€ã³ã§ã¯ãªãããã©ã«ãã«ããå¿ èŠããããŸãã
ãã®çµæã究極çã«ã¯æµéã®åé¡ã§ãã èšŒææžãä¿¡é Œããªã·ãŒã倱å¹ã倱å¹ããææç©ãããã³èšŒææžãå®å šãªæ¹æ³ã§ã¯ã©ã€ã¢ã³ãã«å ¥æããã«ã¯ã©ãããã°ããã§ããããã ãŸããæ€èšŒã«å¿ èŠãªã³ãŒããã¯ã©ã€ã¢ã³ãã«ç§»åããå¿ èŠããããŸãã Dockerå ¬åŒã€ã¡ãŒãžã®ãããã¥ãŒãµãŒãšããŠãç§ãã¡ã¯ããªã·ãŒãæã£ãŠããŸãã ç§ãã¡ã¯ãããããã¹ãŠã«çœ²åããã蚌æãå¿ èŠã§ãããããããã¹ãŠã«æ¥æŽèšŒæãå¿ èŠã§ãããšèšãããã®ã§ãã ã§ã¯ãã©ãããã°ããã®ã§ãããã?
TUF(ãã¥ã)
ãã®ããã«TUFã䜿çšããããšãæ€èšããŠããŸãã ãããäžã€ã®æ¹æ³ã§ãã ç§ã¯TUFããiPhoneã®ãããªã¢ããªã¹ãã¢ã®ãããªãã®ã§ãããããTUFã®ãããªå®è£ ãæã£ãŠãããšèããŠããŸãã 確ãã«ãããªãã®ãã©ãŠã¶ã«ã¯ãCAã¹ãã¢ãããŠã³ãããããã®TUFã®ãããªå®è£ ããããŸãã ã§ããããããã¯ãã¿ã€ã ã¹ã¿ã³ãã³ã°ãµãŒãã¹ãšããŠåæ¹ã»ãã¥ãªãã£ãã©ãã§ããããã¯ã©ã€ã¢ã³ããåžžã«ãã¹ãŠãææ°ã§ããããšãèªèã§ããããã«ããããã®è¯ããã¿ãŒã³ã§ãã ãããŠãããã«ã¯ä»æ§ããããŸãã ã³ãŒãããããPHP ã Python ãªã©ãããŸããŸãªããã±ãŒãž ãããŒãžã£ãŒã§äžçäžã§äœ¿çšãããŠããŸãã
Dockerã®ã³ã³ããã¹ãã§ã¯ãããã¯ã©ã®ããã«èŠããŸãã? ã€ãŸããããã¯ã¹ãšã©ã€ã³ã§ãã å·ŠåŽã«ã¯ãGitã®TUFãªããžããªã§ããGitHub ActionããããŸãã ãã®èãæ¹ã¯ãDockerã¹ã¿ããã«ãã£ãŠç®¡çãããã©ã®ããŒãããªã·ãŒãäœã§ããããã©ã®æ§æèšŒæãååšããã¹ãããèšå®ãããšãããã®ã§ãã ããã¯èªåçã«ã¬ãžã¹ããªã«å ¬éãããŸãã ã¬ãžã¹ããªã¯ãTUFã衚ãããã®çŽ æŽããããã€ãã£ããªå Žæã§ãã TUFä»ãã ã©ãã«ä¿ç®¡ãããã¯é¢ä¿ãããŸããã ãã¹ãŠæå·çã«å®å šã§ãã ãããã£ãŠãã¬ãžã¹ããªã¯è¯ãå Žæã§ãã
å³åŽã«ã¯ã眲åè ãããŸãã TUFã䜿çšãããã®çš®ã®ãã¬ãŒã ã¯ãŒã¯ã¯ããããã眲åæè¡ã§æ©èœããŸãã ã§ããããããã¯Dockerã®å ¬åŒã€ã¡ãŒãžã«çœ²åæè¡ãæäŸããããã®è¯ãåºç€ã ãšèããŠããŸãã ãããã£ãŠãDockerã®ã¯ã©ã€ã¢ã³ãã¯...ãdocker pullããå®è¡ãããšãTUFã«ãŒãããã®ã¯ã©ã€ã¢ã³ãã«åã蟌ãŸããŠãããšããèãæ¹ã«ãªããŸãã ãdocker pullããå®è¡ãããšãææ°ããŒãžã§ã³ã®ä¿¡é Œããªã·ãŒããããã©ããããã§ãã¯ãããŸããã眲åããã§ãã¯ãããŸãã ã§ããããå€ã眲åãèŒããããšã¯ã§ããŸããã眲åæè¡ã¯æ¬åœã«æ°ã«ãªããŸãã
ç§ãã¡ã¯ãéåžžã«ã·ã³ãã«ã§ã説æãããããå°å ¥ãããã眲åæè¡ãæ±ããŠããŸãã Dockerã®å ¬åŒã€ã¡ãŒãžãæ€èšŒããããã«ã远å ã®ãã©ã¹ããã€ã³ãã¯å¿ èŠãããŸããã ããªãã¯ãã§ã«ç§ãã¡ã®TUFã«ãŒããä¿¡é Œããã§ãããã ãããã£ãŠãå¥ã®CAãé¢äžãããå¿ èŠã¯ãããŸããã Dockerããã®çœ²åãä¿¡é Œã§ããã¯ãã§ãã ãããã£ãŠãå®å šã§ããå¿ èŠããããŸãã çŸåšã®æå·ã䜿çšããå¿ èŠããããŸãã ããã§ã¯ãç¬èªã®æå·ãçºæããã€ããã¯ãããŸããã ç§ãã¡ã¯äœå¹Žãåã«ãã®ããšã身ããã£ãŠåŠã³ãŸããã ãããŠãããã¯ãªãŒãã³ã§ããã¹ãã§ãããç¡æã§ããã¹ãã§ãã ããã§ãã€ãŒãµã³ãåŒãæž¡ãã€ããã§ãã 圌ã¯ç§ãã¡ã®ãœãªã¥ãŒã·ã§ã³ã®è©³çްãããªãã«æããŠãããŸãã
ãªãŒãã³ããããŒ
ããããšãããžã§ãŒã ãºã ããã§ä»åã¯ããªããžã§ã¯ãã«çœ²åããID ã§æ€èšŒããããã®ãããã³ã«ã§ãã OpenPubkey ã«ã€ããŠèª¬æããŸãã ããã§ãå§ããåã«ãOpenPubkeyã解決ããããšããŠããåé¡ã説æããããšæããŸãã ããšãã°ãGitHub Action ãªã©ã®ã¯ãŒã¯ããŒãããããšããŸãã ãããŠããã®ã¯ãŒã¯ããŒãã Alice ãšåŒã¶ããšã«ããŸãã ãããããã®ã³ã³ããã¹ãã§ã¯ãŠãŒã¶ãŒã§ã¯ãããŸãããããã¯ãã ã®äœæ¥è² è·ã§ãã ãããŠãäœããã®ã€ã¡ãŒãžãäœæãããã®ã€ã¡ãŒãžã«çœ²åãããã®ã€ã¡ãŒãžã Alice ã®çœ²ååæå ¬ééµãšå ±ã«ã¬ãžã¹ããªã«ã¢ããããŒãããŸãã ããã§ãããã¯ã¢ãªã¹ãä¿¡é Œããã€ã¡ãŒãžãå ¬ééµãããã³çœ²åãããŠã³ããŒãããŸãããããã¯ãã®çœ²åããã§ãã¯ããŠã眲åãããŠããããšã確èªããããšèããŠããŸãã ãããŠãããã¯è³ªåãããŸãã å ¬ééµã眲åãæ€èšŒãããšããŠãããã®å ¬ééµãå®éã«ã¢ãªã¹ã®å ¬ééµã§ããããšãã©ããã£ãŠç¥ãããšãã§ããã®ã§ããããã ããã¯ã誰ã®å ¬ééµã§ãããŸããŸããã 誰ã§ãããã«å ¬ééµã眮ãããšãã§ããŸãã
ãã®ãããGitHub Actionsã§ã¯ãŒã¯ããŒãIDã«ã€ããŠè©±ããšãã¯ãOpenID Connectã«ã€ããŠèããå¿ èŠããããŸãã GitHub Actions ã«ã¯ãã¯ãŒã¯ããŒãã« ID ãæäŸããã¯ãŒã¯ããŒããç¬èªã® ID ã蚌æã§ããããã«ãã OpenID Connect äžã«æ§ç¯ããã IDP ãš ID ãããã€ããŒããããŸãã ããã§ãOpenID Connect ã䜿çšããŠãããããæ¬åœã« Alice ã®å ¬ééµã§ããããšãã©ããã£ãŠç¥ãããšãã§ããã®ãããšããåé¡ã«å¯Ÿãããœãªã¥ãŒã·ã§ã³ãæ§ç¯ããŸãã ãã®ãããOpenPubkey ã¯ãOpenID Connect ã䜿çšããŠå ¬ééµã ID ã«ãã€ã³ãããããã®ãããã³ã«ã§ãã
OpenPubkeyã®å©ç¹ã¯ãããã€ã¹ããããã€ã¹ãžãšããŒãããå¿ èŠãããé·æçãªçœ²åããŒã®ãããªãã®ãããå ŽåããŠãŒã¶ãŒããã®çœ²åããŒãçŽå€±ããå Žåãæ°ãã眲åããŒãäœæããå¿ èŠããããªã©ãããŒç®¡çã®é çã®çš®ããªãããšã§ãã OpenPubkeyã䜿çšãããšã眲åããŒãçæããããäžèŠã«ãªã£ããšãã«åé€ãããã§ããŸãã IDPã«å€æŽãå ããããšãªãæ©èœããŸãã ãããã£ãŠã仿¥ã¯GoogleãGitHubããŸãã¯Microsoftã«ããã䜿çšã§ããŸãã ãããŠãããã¯å®å šã§ãã ä¿¡é Œã§ããããŒãã£ã¯è¿œå ãããŸããã ããã¯ã䜿çšããªããã°ãªããªãæ°ãã CA ããããšèšã£ãŠããã®ã§ã¯ãããŸããã 以åãšåãããã«ãããªããšããªãã® ID ãããã€ããŒã ãã§ãã ãããŠä»ãDockerã§OpenPubkeyãLinux Foundationã®ãããžã§ã¯ããšãªãããªãŒãã³ãœãŒã¹ã§å©çšã§ããããã«ãªã£ãããšãçºè¡šã§ããããšãæ¬åœã«å¬ããæããŸãã
OpenPubkey ã®ããã¿ã®è©³çްã説æããåã«ãOpenID Connect ã®èæ¯ãå°ã説æããå¿ èŠãããã®ã§ãããã§ã¯äŸãšã㊠GitHub Actions ã䜿çšããŸãã ãã®ãããããã§ã¯äŸ¿å®äž Alice ãšããååãä»ããã¯ãŒã¯ããŒãããããŸãã ãã®ã¯ãŒã¯ããŒã㯠GitHub Actions IDP ã«å¯ŸããŠèªèšŒãè¡ãããšãã§ãããããè¡ããšãIDP 㯠Alice ã® ID ã«é¢ãã倿°ã®æ§æèšŒæãæã€ ID ããŒã¯ã³ãäœæããŸãã ãããŠãIDP 㯠IDP 眲åã®äžã§ãã® ID ããŒã¯ã³ã«çœ²åããŸãã ãã®åŸãAlice ã¯ãã® ID ããŒã¯ã³ã Bob ã«æç€ºã§ããBob 㯠Alice ã Alice ã§ãããšç¢ºä¿¡ããŸãã Bob ã¯ãå ¬éããŒãäœæãã OpenID Connect ã®æ¹æ³ã§ãã GitHub JWKS URI ã§å ¬éããŒãããŠã³ããŒãããããšã§ãID ããŒã¯ã³ã GitHub Actions å ¬éããŒã§çœ²åãããŠããããšã確èªã§ããŸãã
ä»çµã¿
ãããã©ã®ããã«æ©èœãããããã«çœ²åã远å ããã®ã§ãããã? ããã§ã¯ãOpenID Connect ã®ç°¡æçã玹ä»ããŸãã åºæ¬çã«ã¯OpenPubkeyã§ãã ãããŠãOpenPubkeyã«ãã£ãŠè¿œå ãããè€éããå°ã説æããŸãã ããããåºæ¬çã«OpenPubkeyã¯ä»¥åãšåãã§ãã ããããä»åºŠã¯ã¢ãªã¹ãå ¬ééµãçæããå ¬ééµãšçœ²åéµã®éµãã¢ãçæããŸãã ãããŠãããã«ã¯GitHub Actionsã®äžéšã§ãããã®ãªãŒãã£ãšã³ã¹èŠæ±ãããããšã«æ³šæããŠãã ããã ã¢ãªã¹ã¯ããã®audãŸãã¯audienceãã©ã¡ãŒã¿ã«å¥œããªãã®ãå ¥ããããšãã§ããŸãã ããã§ãããã®éµããªãŒãã£ãšã³ã¹ãã©ã¡ãŒã¿ã«å ¥ããŸãã ãããŠãIDP ã ID ããŒã¯ã³ã«çœ²åããŠè¿ããšãIDP 㯠Alice ãæäŸããå€ãããã«å ¥åããŸãã ãã®ãããAlice ããã ããŒãå ¥åãããšãAlice ã®ãã ããŒãš ID ãå«ã IDP ã«ãã£ãŠçœ²åããã ID ããŒã¯ã³ãååšããŸãã
ããã§ãAlice ã¯ãªããžã§ã¯ãã«çœ²åã§ããããã«ãªããŸããã ãŸãã眲åããããªããžã§ã¯ããšå ±ã« ID ããŒã¯ã³ãçºè¡ãããšãIDP 㯠Alice ã䜿çšãã pub ããŒã蚌æããŠãããããBob ã¯ãã®ãªããžã§ã¯ãã Alice ã® ID ã§çœ²åãããŠããããšã確èªã§ããŸãã ããæå³ã§ã¯ãID ããŒã¯ã³ã¯èªèšŒå±ã«ãã£ãŠçºè¡ãããèšŒææžã®ããã«æ©èœããID ãå ¬éããŒã«ãã€ã³ãããŠããããšã«æ³šæããŠãã ããã ãã ããããã«ã¯èªèšŒå±ã远å ããŠããŸããã ããã¯ã以åã«äœ¿çšããéåžžã®å€ãIDPã«ãããŸããã ãããã£ãŠãããã¯ãŠãŒã¶ãŒIDã«å¯ŸããŠãæ©èœããŸãã ããã§ã¯è©³çްã«ã¯è§ŠããŸããããããšãã° Google ã® OpenID ãããã€ããŒã䜿ãã°ããããè¡ãããšãã§ããŸãã audience ãã©ã¡ãŒã¿ãŒã nonce ãã©ã¡ãŒã¿ãŒã«å€æŽããã ãã§ãããã«å ¬éããŒãååŸãããŸãã
BastionZero ã§ã¯ãã¯ãŒã¯ããŒã ID ã§ã¯ãªããŠãŒã¶ãŒ ID ã䜿çšããŸãã ãããŠãããã¯éåžžã«åŒ·åãªããŒã«ã§ãããGoogleãããã«ãã®å ¬ééµã¯Xã§ãããšèšã£ãŠãããšãã眲åå ¥ãã®å£°æãåºæ¬çã«åŸãããšãã§ããããã§ãã ã§ã¯ãSSH ã«ã€ããŠèãããšãSSH ãšã¯äœã§ãSSH ãã ããŒã¯äœãããŠããã®ã§ããããã 圌ãã¯ããã®å ¬ééµãããã«ããã®ã§ããã®äººã¯æ¥ç¶ãèš±å¯ãããŠãããšèšã£ãŠããŸãããããã¯ããå¿ èŠãããŸããã SSHããŒãªãã§SSHãå®è¡ã§ããŸãããIDPãä¿¡é ŒããŠãŠãŒã¶ãŒãèå¥ãã誰ãããã§ã«IDPãä¿¡é ŒããŠããŸãã ãŸããããã䜿çšããŠããŠãŒã¶ãŒIDã§å®å šãªTLSãã³ãã«ãæ§ç¯ããŸãã ãŸãããããã¯ãŒã¯å±€ãšãµãŒããŒããšã³ããã¹ãããŸãã¯K8 ã¯ã©ã¹ã¿ã®äž¡æ¹ã§ãIDã«æåŸ ããããããŒãããããšã確èªããã ãã§ãIDããã§ãã¯ã§ããŸãã ãããŠãããã§èªèšŒããããã£ãã«ãŸãã¯å®å šãªãã£ãã«ãããŒãã¹ãã©ããã§ããŸãã
ããã«ãããä¿¡é Œããã«ãã®ã³ã°ãšããªã·ãŒã®é©çšãå®è¡ã§ããããšãæ§ç¯ã§ããããšã® 1 ã€ã§ãã ã¡ãã»ãŒãžã®æŽåæ§ã¯ä¿è·ã§ããããããã¬ãŒãŸãã¯ããªã·ãŒ ãšã³ãã©ãŒãµãŒã¯ã¡ãã»ãŒãžã倿Žã§ããŸããã ãã ãããã®ãã©ãã£ãã¯ããã°ã«èšé²ããŠããªã·ãŒãé©çšããããšã¯ã§ããŸãã ããã«ã€ããŠã¯è©³ããè¿°ã¹ãã€ããã¯ãããŸããããè¬æŒåŸã«ç§ã«èããŠãã ããã ç§ã¯ããã«ã€ããŠè©±ãã®ã倧奜ãã§ãã ç§ãã¡ãäœã£ããã®ã¯æ¬åœã«ãšããµã€ãã£ã³ã°ã§ãã
æœåšçãªæ»æ
ããã«ã¯ç·åŒµæãããããšã«æ°ã¥ããŠãã ããã OpenID ã¯ããããã® ID ããŒã¯ã³ããç§å¯ã«ããŠããå¿ èŠãããèªèšŒã·ãŒã¯ã¬ãããšããŠæ±ããèªèšŒã®ããã«å ¬éããŸãã ãã®ãã¿ãŒã³ã®ååã¯ãã¢ã©ãŒèªèšŒã§ãèªèšŒçšã®ããŒã¯ã³ãè² æ ããŸãããOpenPubkeyã¯ãããã®IDããŒã¯ã³ãå ¬éèšŒææžã®ããã«æ±ããŸãã ãããªã㯠ã¬ãžã¹ããªãã€ã³ã¿ãŒãããäžã®ä»»æã®å Žæã«çœ²åãä»ããŠå ¬éãããããã䜿çšããŠããªããžã§ã¯ãã ID ã«ãã£ãŠçœ²åãããŠããããšã確èªããŸãã ã§ãããããã®2ã€ã®çšéãç§ãã¡ã®ç·åŒµæã§ãã
ããšãã°ãOpenPubkeyçšã«å ¬éãããIDããŒã¯ã³ããæ§æãééã£ãŠããOpenID ConnectèªèšŒãµãŒãã¹ã«çœ®ãæããŠããããOpenPubkeyçšã§ãããã©ããããã§ãã¯ããªãã£ãå Žåã¯ã©ããªãã§ããããã å¿ èŠãªãã¹ãŠã®ãã£ãŒã«ãããã§ãã¯ãããããã§ã¯ãããŸããã GitHubãGoogleãããããã¢ãªã¹ã ãšèšã£ãŠããã®ã¯ãåç¥ã§ãããã ãã®ãããªæ»æãé²ãã«ã¯ã©ãããã°ããã§ããããã
æ»æãããå°ãå ·äœçã«èŠãŠã¿ãŸãããã Alice ãããŠãAlice ã¯ä»¥åãšåãããã« ID ããŒã¯ã³ãšå²ãåœãŠããããªããžã§ã¯ãã Bob ã«éä¿¡ããŠããŸãã ãããŠä»ãéªæªãªãããããŠãéªæªãªãããIDããŒã¯ã³ãååŸãã誀ã£ãŠæ§æãããOpenID ConnectãµãŒãã¹ã«åçããŠããç§ã¯ã¢ãªã¹ã§ãããšèšããŸãã ãããŠããµãŒãã¹ã¯ãGitHubã«ãã£ãŠçœ²åãããŠããŸããããªãã¯ã¢ãªã¹ã§ãããšèšããŸãã
GQ眲å
ããã解決ããããã®æ»æèšç»ã¯ãIDããŒã¯ã³ã®ã»ãã¥ãªãã£ãšæå·åç¹æ§ãä¿æããªãããOpenPubkeyã«å¯ŸããŠã¯æå¹ã§ããããOpenID ConnectèªèšŒã«äœ¿çšããå Žåã¯æå¹ã«ããªãããšã§ãã ãããè¡ãããã«ãAlice ã¯ããã§ IDP 眲åããIDP 眲åãç¥ã£ãŠããããšã®èšŒæ (IDP 眲åãç¥ã£ãŠãããšããæå·èšŒæ) ã«çœ®ãæããŸãã ãããã£ãŠãããã¯å®éã®çœ²åãšåãããã匷åã§ããã眲åã§ã¯ãªããªããŸãã ãã®ããã®ææ³ãGQ眲åã§ãã ããã§ãIDP 眲åãå€ããID ããŒã¯ã³ã®çœ²åãç¥ã£ãŠãããšãã眲åã®èšŒæãæäŸããŸãã
ãã®çµæã眲åãšçœ²åã®èšŒæãå«ããã® ID ããŒã¯ã³ããæ£ããæ§æãããŠããªããµãŒãã¹ã«å¯ŸããŠåçããããšãæ£ããæ§æãããŠããªããµãŒãã¹ã¯ãOpenID Connect ã®ã«ãŒã«ã«åŸã£ãŠæ€èšŒã詊ã¿ãŸããã倱æããæªçšãããªãããã«æåŠãããŸãã ãããããã®çœ²å蚌æã¯ã眲åãšåãã»ãã¥ãªãã£ç¹æ§ãæã¡ãã¢ãªã¹ãå®éã®çœ²åãç§å¯ã«ããŠããããšãå¯èœã«ããŸãã ã¢ãªã¹ã¯ãIDããŒã¯ã³ãå ¥æããããå®éã®çœ²åãæŒæŽ©ãããªãããã«åé€ããããšãã§ããŸãã
GQ眲å(ç§ãã¡ã䜿ã£ãŠããæè¡)ãã©ã®ããã«æ©èœãããã«ã€ããŠã¯ãããã§ã¯è©³ãã説æããŸããã 1988幎ã«çºæãããããšã¯ããã®ããªãæåãªè«æã§ææããŠãããŸãããããŠãNewmanã¯ä»å¹ŽããŸãã«ãã®åé¡ã解決ããããã«GQ眲åã䜿çšããããšãææ¡ããGQ眲åã®æœåšçãªãŠãŒã¹ã±ãŒã¹ãšããŠOpenPubkeyãšSigstoreãåãäžããŸããã ã§ããããç§ãã¡ããã£ãŠããããšã®å€ãã¯ãGQã®çœ²åã«é¢ããŠã¯ããã®è«æã«åºã¥ããŠããŸãã
ããã§ã¯ãå ¬ééµããªãŒãã£ãšã³ã¹ã¯ã¬ãŒã ã«åçŽåããã®ã§ã¯ãªããåçŽåããŠãããšèšã£ãã®ãèŠããŠããŸãã? ããŠãä»ãç§ã¯ãããå°ãè€éã§ããããããã»ã©è€éã§ã¯ãªãæ¹æ³ã説æããŸãã å ¬éããŒã®ã¯ãŒã¯ããŒããšå ±ã«ããŠãŒã¶ãŒã眲åããã¢ã«ãŽãªãºã ããAlice ãäœæãããããŸã㯠Alice ã®ã¯ã©ã€ã¢ã³ããäœæãããã¯ãŒã¯ããŒããªã©ã远å ã®ã¡ã¿ããŒã¿ãå«ããå¿ èŠããããŸãã
ããããè¡ãããšã¯ããã®ã¡ã¿ããŒã¿ãå ¬ééµãšäžç·ã«ååŸããããšã§ãã ãã¹ãŠããŸãšããŠããã·ã¥åãããã®ããŒã¿ã®ãã¹ãŠã§ã¯ãªããå®éã«ããã·ã¥ããªãŒãã£ãšã³ã¹ã®èŠæ±ã«æäŸããŸãã ããããAlice ã®å ¬ééµã¯ãŸã ãã®ããã·ã¥ã«ããããšã«æ³šæããŠãã ããã ãã®çµæãID ããŒã¯ã³ã ãã§ã¯ãå ¬éããŒã ID ããŒã¯ã³ã§èšŒæãããŠãããã©ããã確èªã§ããªããªããŸãã ãããã®ä»ã®ãã£ãŒã«ããå¿ èŠã§ãã ãã®ãããããããã¹ãŠã 1 ã€ã®ãªããžã§ã¯ããšããŠããã±ãŒãžåããID ããŒã¯ã³ã JSON Web 眲åã§ãããšããäºå®ãå©çšããŸãã ãŸããJSON Web 眲åã§ã¯ãè€æ°ã®çœ²åã䜿çšã§ããŸãã ããã§ãAlice ã®å ¬ééµãå«ã察象ãŠãŒã¶ãŒã«ããã·ã¥ããå€ãå«ã 2 çªç®ã®çœ²åãšããããŒã远å ããããã CIC ãšåŒã³ãŸãã ååãæ°ã«ããå¿ èŠã¯ãããŸããã ããã¯ã¯ã©ã€ã¢ã³ã ã€ã³ã¹ã¿ã³ã¹ã®èŠæ±ã衚ããŸãããå ¬éããŒãšãã®ä»ã®ã¡ã¿ããŒã¿ãå«ãŸããŠããããšãç¥ã£ãŠãããŠãã ããã
PK ããŒã¯ã³
ããããã¹ãŠPKããŒã¯ã³ãšåŒãã§ããŸãã ããã¯ãå ¬éããŒã ID ããŒã¯ã³ã§èšŒæãããŠããããšã確èªããããã«ããã®æ©èœã§æ¡åŒµããã ID ããŒã¯ã³ã§ãã
ããã§ãã¢ãªã¹ãOpenPubkeyã䜿ã£ãŠã€ã¡ãŒãžã«çœ²åããããšããŸãããã ãã®ãããæåã«è¡ãããšã¯ã眲åããŒãå«ãããŒãã¢ãçæããããšã§ãã å ¬ééµãšãã®ä»ã®ã¡ã¿ããŒã¿ãå«ã CIC ãäœæããŸãã æ¬¡ã«ãCIC ãããã·ã¥ããããã·ã¥ã audience ãã©ã¡ãŒã¿ãŒãšã㊠IDP ã«æäŸãã ID ããŒã¯ã³ãèŠæ±ããŸãã IDP(ãã®å Žåã¯GitHub)ã¯ã眲åä»ãIDããŒã¯ã³ã§å¿çããIDããŒã¯ã³ã«æ°ãã眲åãäœæããåã®ã¹ã©ã€ãã§èª¬æããå 容ã䜿çšããŸãã æ¬¡ã«ãID ããŒã¯ã³ãã PK ããŒã¯ã³ãäœæããŸãã ãããŠããããIDããŒã¯ã³ã®è¿œå 眲åã«ãããªãããšãããããŸãã ID ããŒã¯ã³ã¯ PK ããŒã¯ã³ã®äžéšã§ãã ããã§ã眲åããæºåãæŽããŸããã ããã§ã圌女ã¯çœ²åãããç»åãæ®åœ±ããŸãã 眲åããŒã§çœ²åããŠçœ²å A ãååŸããç»åã眲åãPK ããŒã¯ã³ããªããžããªã«ã¢ããããŒãããŸãã
Dockerã®å ŽåãDockerã¯OpenPubkeyã®æ©èœã§ãã1åéãã®çœ²åãè¡ã£ãŠããŸãã ããã«ãããPK ããŒã¯ã³ã¯ç¹å®ã®ãªããžã§ã¯ããŸãã¯ç¹å®ã®ç»åã«çœ²åããããã«ã®ã¿äœ¿çšã§ããŸãã ããã匷å¶ããããã«ãã¯ã©ã€ã¢ã³ã ã€ã³ã¹ã¿ã³ã¹èŠæ±ã䜿çšãã眲åãããªããžã§ã¯ãã®ããã·ã¥ã§ãã远å ã®ãã©ã¡ãŒã¿ãŒ sig ãæäŸããŸãã ãã®ããã眲åããŒã¯ãã®ãªããžã§ã¯ãã«ã®ã¿äœ¿çšã§ããŸãã
Bob ã OpenPubkey ã§çœ²åããã眲åãæ€èšŒããå ŽåãBob ã¯ç»åã眲åãPK ããŒã¯ã³ãããŠã³ããŒãããŸãã æ¬¡ã«ãBob 㯠PK ããŒã¯ã³å ã® ID ããŒã¯ã³ã GitHub ã«ãã£ãŠçœ²åãããŠããããšã確èªãã察象ãŠãŒã¶ãŒã«å¯Ÿã㊠CIC ããã·ã¥ã確èªããCIC ãã Alice ã®å ¬éããŒãæœåºããç»åã PK ããŒã¯ã³ (Bob 㯠Alice ã§ããããšãããããŸã) ã«ãã£ãŠçœ²åãããŠããããšã確èªããŸãã
èŠçŽãããšãOpenPubkeyã¯IDPã倿Žããå¿ èŠã¯ãããŸããã OpenID Connect ãããã³ã«ã䜿çšããã ãã§ãããããŒãšå ¬éããŒãš ID ãè³Œå ¥ããŠçœ²åãããã®æ©èœã§åŒ·åãããŸãã éåžžã«æ¡åŒµæ§ãé«ããããŸããŸãªãã®ãäœãããšãã§ããŸãã ããã§ã¯Dockerã®ãŠãŒã¹ã±ãŒã¹ã1ã€ç޹ä»ããŠããŸãããäŸãã°MITã®åŠçã®äžã«ã¯ããã®è«æãèªã¿ãOpenPubkeyãšMITã®OpenID Connect IDPã䜿ã£ãŠæå·åããããã£ããã«ãŒã ãæžãã人ãããŸãã
å®å šã§ããOpenID Connect ã«æ°ããé¢ä¿è ã远å ãããããšã¯ãªããGQ 眲åã䜿çšãããšãæ§æãééã£ãŠãããµãŒãã¹ã«å¯ŸããŠãããããã® ID ããŒã¯ã³ãåçã§ããªãããã«ããããšãã§ããŸãããããŠäŸ¿å©ã§ããããŒç®¡çã®çœ²åã¯ãããŸãããããŒã¯äžæçã§ããã誰ãã Google ã§ãµã€ã³ã€ã³ããããGitHub ã¢ã¯ã·ã§ã³ã䜿çšããããããšãã«ããŠãŒã¶ãŒãšã¯ãŒã¯ããŒãã«æ¢ã«äœ¿çšãããŠãã OpenID ãããŒã䜿çšããŸãã詳现ã«ã€ããŠã¯ããã®è«æã§ã¯ãŠãŒã¶ãŒ ID ã«ããå°ãçŠç¹ãåœãŠãããŠããŸããã OpenPubkey ã®è«æãåç §ããŠãã ãããããŠããžã§ãŒã ãºã«æ»ããŸãã
ãã¢
ããããšãããããŸãã ããã â ããã¯ãã£ããããŠããã ããããè¡ãã®ã¯ããã®å°ããªãããŒã®ãã¢ã§ãã ç§ãããããšããŠããããšã¯ãéèŠãªå€æŽãè¡ãããšã§ãã ããã¯ãã§ã«Dockerã€ã¡ãŒãžãšã³ãŒãã«äœæãããŠããã倿Žãã³ããããã眲åããGitHubã«ããã·ã¥ããŠãããšæããŸãã ããã¯ã©ãã«ããã®? ããGitHubã§ã¯ãã³ããããå ¥ã£ãŠããã¯ãã§ãã ããè¡ããã
ãããæ§ç¯ãããŠããéãGitHub ã¢ã¯ã·ã§ã³ãã©ã®ãããªãã®ããã€ãŸã倿Žç¹ããèŠãããŸãã ããã§ãããã«å¥ã® buildkit ã€ã¡ãŒãžã远å ããŸããã ãã㯠buildkit ãæ¡åŒµããè¯ãæ¹æ³ã§ãã ããã¯ãGitHubã®OpenPubkeyã«ååšãããã©ãŒã¯ã«ãããŸããã å°æ¥çã«ã¯ããããã£ã人ãã¡ãšäº€æžããŠããããçµã¿èŸŒãã§ãããããšèããŠããŸãã ãã®ãããGitHub Action ã䜿çšããŠèªåçã«çœ²åãããŸãã äœãããå¿ èŠã¯ãããŸãã â ãŒãæ§æã éµã®ç®¡çããç§å¯ã®ä¿åããäœããªãã
GitHub ã® OpenPubkey çµç¹ã«ã¢ã¯ã»ã¹ããŠãã ããã ãããã³ãŒãã§ãã ããã¯ãã€ãŒãµã³ã«ãã£ãŠå¯èŽãããã¡ã€ã³ã©ã€ãã©ãªã§ãã ããã¯ãç§ãããªãã«èŠããããšããŠããå°ããªæ€èšŒCLIãã©ã°ã€ã³ã§ãããŸãã¯ããªãã¯ããããç§ã®ãã£ã¹ãããŒãžã§ã³ãèŠãŸããã ãããŠãããã«ãã«ããããããããŸãã®ã§ããã¡ãã«è¡ã£ãŠåå ããåé¡ãæèµ·ããŠãã ããã ãã²ãåå ãã ããã
ç§ã®ã¿ãŒããã«ã«æ»ããŸãã ãdocker verifyãã§ããã¯ãã§ãã æ³šææ·±ãèŠããšãIDããŒã¯ã³ã®ãã¹ãŠã®è©³çŽ°ãæ€èšŒãããŠããããšãããããŸãã GitHub ã«ãã£ãŠçœ²åãããŠããããšããã§ãã¯ãããŸãã Dockerã®çµç¹ã確èªããŸããã ééã£ããã®ã§ãããããäžåºŠè¡ããšã倱æããããŒããŒãŠã§ã¢ã§ã¯ãªãããšã瀺ãã¯ãã§ãã ãããããã ã倱æããã ããè¡ããã
ããªã·ãŒã«ã€ããŠã¯ããŸã äœæ¥äžã§ãã ã¯ã©ã€ã¢ã³ãã«æç€ºã§ããããªã·ãŒèšèªãå¿ èŠã§ãã ãããã£ãŠããã®ãããã¯æªå®çŸ©ã§ãã çŸæç¹ã§ã¯ã蚌æã¯toto圢åŒã§ããããã®äžéšã玹ä»ããŸãã ã¡ãã£ãšåŸ ã£ãŠãã ããã
ä»åŸã®äºå®
ãããå°ãæèã«åœãŠã¯ãããšãã©ã®éšåãã§ããŠãã©ã®éšåãã§ããŠããªããããäŒãããŸãã Ethanã¯ããã«è§Šããªãã£ãããããããéèŠãªåŽé¢ã®1ã€ã¯ãGitHub Actionsã§çæããããã¹ãŠã®çœ²åãã§ããããã«ãããã«éææ§ãã°ã远å ããããšã ããã 確ãã«ãDockerã®å ¬åŒãŠãŒã¹ã±ãŒã¹ã§ã¯ããã§ãã ç§ãã¡ã¯GitHubãç£èŠããŠãããéææ§ãã°ã«èšé²ããŠããŸãã ãããã£ãŠãããã§äœãåé¡ãçºçããå ŽåããããçºçããŠããããšã«æ°ä»ããä¿®æ£ã詊ã¿ãããšãã§ããTUFã䜿çšããŠãã€ã§ãåãæ¶ãããšãã§ããŸãã
ãããããäžã€èšãå¿ããŸããã ãããŠãããã¯éèŠãªã¹ãããã§ãã 誰ãOIDCã§äœæ¥ããŠãããã¯èª°ããç¥ã£ãŠããã®ã§ããããã®å ¬ééµã¯æéåãã«ãªããŸãã ãããŠã圌ãã¯ããããå転ãããŸãã 圌ãã¯ãããã宿çã«ããŒããŒã·ã§ã³ããŸãã åè»¢åšæ³¢æ°ã倿Žã§ããŸãã ããã¯ãã€ãèµ·ãããŸãã ããã§ãå°ãªããšãæåã®ããããã§ã¯ãDockerããããã®å ¬ééµãTUFãªããžããªã«é 眮ããã¯ã©ã€ã¢ã³ãã«é åžããèšç»ã§ãã ããã¯Dockerã®å ¬åŒã€ã¡ãŒãžã§ã¯æ©èœããŸããã誰ã«ãšã£ãŠãæ©èœããªãå¯èœæ§ããããŸãã ãªããªããTUFãªããžããªãä¿¡é ŒããŠããã®ã§ããã°ãå ¬ééµãããã«å ¥ããããšãã§ããããã§ãã ããã¯èšã£ãŠããTUFã«ãŒãã«äœãšçœ²åããã€ããã§ãã? OpenPubkeyã§çœ²åããå¿ èŠããããŸãã? ãŸããOpenPubkeyã§çœ²åããå Žåãããã¯äœãæå³ããã®ã§ãããã? ããã¯ãããããå ¬ééµãããã«å ¥ããããªãããšãæå³ããŸãã ããããä»ã®ãã°ã«ä¿æããå¿ èŠããããŸãã
ããããOpenPubkeyã¯å€èŠçŽ çœ²åã®ã¢ã€ãã¢ããµããŒãããŠããŸãã ãããã£ãŠãã§ããããšã¯ãå¥ã®çœ²åã远å ããããšã§ãã ããã§ãããããåç¥ã®ãšãããç§ã¯Googleã®ãã°ã€ã³ãæã£ãŠããŸãããããŠç§ãã¡ã¯ããã«å¯çœ²ãããã®ãªã¹ãã«3çªç®ã®çœ²åã远å ããŸãã ãããŠãããã¯ãšãŠããšãŠãã¯ãŒã«ã§ãã
ã ããã誰ãããããæ°ã«å ¥ãããã§ã¯ãªãããšã¯ããã£ãŠããŸãã 奜ããªäººãããŸãã ããã§ãªã人ãããŸãã ããããããã¯ç§ãã¡ãæåã«ãã£ãŠããããšã§ãã 眲åã¯ç»åãšããŠã€ã³ããã¯ã¹ã«æ·»ä»ããã¢ãŒããã¯ãã£ãäžæãªã€ã³ããã¯ã¹ã«æ·»ä»ããŠããŸãã ã§ããããã»ãšãã©ã®ããŒã«ã§ãããæ©èœããããšãèªããŠãã ããã ããã¯ã眲åãç§»åããããšãæå³ããŸãã ã¬ãžã¹ããªãå£ããããšã¯ãããŸããã ãããŠããããæçµç®æšã§ã¯ãªãããšãçè§£ããŠããŸãã ã¢ãŒãã£ãã¡ã¯ããåç §ã¿ã€ããªã©ãæ¬åœã«éèŠãªåãçµã¿ãè¡ãããŠããããšã¯çè§£ããŠããŸãããééããªãããããåãå ¥ããã€ããã§ãã ããããããã¯åºçºç¹ã«ãããŸããã ãŸãããã®äœæ¥ã«é¢äžããæ¯æŽããããã®è¡åãžã®åŒã³ããã§ããããŸãã ç¹å®ã®ã¢ãŒããã¯ãã£ãã€ã¡ãŒãžã«çµã³ä»ããŠããå Žåããããã®ã·ã°ããã£ãèŠã€ããæ¹æ³ããªãããšãçè§£ããŠããŸãã ããã§ãã¹ãŠã解決ããããã§ã¯ãªãããšã¯ããã£ãŠããŸãã®ã§ããã²ãåå ãã ããã
åæ§æèšŒæã¯ããã®ã€ã¡ãŒãžã«ã¬ã€ã€ãŒãšããŠæ ŒçŽãããŸãã ç¹°ãè¿ãã«ãªããŸãããããã¯å°ãåä»ãªããšã§ãããããŸããããŸãã ãã®äžçã«ãã人ãªãããªããã®ãããªã¢ãããŒãããšã£ãã®ãããã£ãšçè§£ããŠããã ãããšæããŸãã ããã§ã¯ãSBOM ãš SLSA ã®åºæã確èªã§ããŸãã ãããã£ãŠãããã§ã®æ¥æŽã®èšŒæã ããå°ã詳ãã説æããŸãããOPK ã§ã¯ OpenPubkey ãšåŒãã§ããŸãã ãããŠã眲åãããã«æãäžããŸãã ããã§ã¯ã眲åãåãé€ãããOIDCãã€ããŒãããããŸãã OpenPubkeyã®çœ²åãšGQã®èšŒæãæã«å ¥ããŸããã ã§ããããèŠããŠããã°ãã€ãŒãµã³ã®ã¹ã©ã€ãã«ãã䌌ãŠããã¯ãã§ãã
ãã®ãããæªè§£æ±ºã®è³ªåãå±±ã»ã©ãããŸãã åç §ãšã¢ãŒãã£ãã¡ã¯ãã«ã€ããŠèšåããŸããã ãã1ã€ã®å€§ããªèŠå ã¯ãããŠã³ã°ã¬ãŒãæ»æã§ãã ä»ã®ãšããã誰ã眲åãæ€èšŒããŠããªããããããã«å¯Ÿããå埩åã¯ãããŸããã ããããå®éã«ã¯å ¬èšŒäººã¯ãã¿ã°èªäœã眲åãããŠãããšããäºå®ã®æ§è³ªäžãããŠã³ã°ã¬ãŒãæ»æããããªããä¿è·ããŸãã ãããã£ãŠããã®æåã®ããããã§ã¯ããã¯èµ·ãããŸããã ããã¯èšã£ãŠãã圱é¿ã¯ããããéåžžã«å°ãããããã«å¯Ÿãã解決çããããŸãã ããã§ãç§ãã¡ã¯ãããèŠãŠãããŸãã
ããäžã€ã¯ãOIDCãããã€ããŒãããã§æ¯æŽããããšã¯å¯èœããšããããšã§ãã ãããŠãããã«ã¯æ¬åœã«ãã£ã³ã¹ããããšæããŸãã ãããŠãããã¯åœŒãã«ãšã£ãŠããç§ãã¡ã«ãšã£ãŠãè¯ãããšã§ãã ãããããäžè¬çãªçœ²åæ¹æ³ã«ãªãã°ããšãŠãç°¡åã§ãªãŒãã³ãªã®ã§ãWebPKIã§å ¬ééµã«çœ²åã§ãããããããŸããã ãããããããå ¬ééµããã°ã«èšé²ããŠãå©çšã§ããããã«ã§ãããããããŸããã ãããããããç¬èªã®éææ§ãã°ãæã€ããšãã§ãããããããŸããããå®éã«ã¯ãããã¹ããããããŸããã ã§ããããç§ãã¡ã«ã§ããããšã¯ãããããããšæããŸãã ãããŠãå ã»ã©ãèšããŸããããå®éã«TUFã«ãŒããOpenPubkeyã§çœ²åããå¿ èŠããããŸãã? ãããŠãå€èŠçŽ çãªãã®ã§ã§ãããããããŸããã
ãããã¯ããããèµ·ããããšã§ãã éæåºŠãã°ã远å ããŠããŸãã Dockerã®TUFã«ãŒãã远å ããŸãã ããã倿°ã®ã¯ã©ã€ã¢ã³ãã«è¿œå ããŠãå®éã«äœ¿çšãã眲åã®æ€èšŒãéå§ã§ããããã«ããå¿ èŠããããŸãã ãããŠãå ¬ééµãã°ã®åé¡ã解決ããå¿ èŠããããŸãã ããããTUFã«è¿œå ããäºå®ã§ãã ãã§ãã«ãŒãã¢ãã¿ãŒã远å ããŠããããç£èŠã§ããŸãã ãããŠã誰ã§ããããç£èŠã§ããŸãã ãã¹ãŠ GitHub ã«ãããŸãã ãã¹ãŠãªãŒãã³ã§ãã
ãããè¡ååèµ·ã§ãã æ¯éãåå ããŠãã ããã ãšãŠããšããµã€ãã£ã³ã°ã ãšæããŸãã ãããŠãDockerã®å ¬åŒã€ã¡ãŒãžã®ãªãŒãã³ã§ç¹ã«æ©èœãããšèããŠããŸãã ãããããã®çš®ã®ãã¯ãããžãŒã瀟å ã«æã¡èŸŒãå Žåã¯ãããã§è¯ãã®ã§ãã å€éš CA ã¯å¿ èŠãããŸããã ç¬èªã® OIDC ãããã€ããŒã®äžã«æ§ç¯ã§ããŸãã
質çå¿ç
ããã§ã¯ãããããšãããããŸãããããŠäœã質åãããã°ãä»ãè¯ãæ©äŒã§ãã ã©ãªãããäžæãªç¹ãããããŸãããã
çºè¡šããããšãããããŸããã ã§ã¯ãOpenPubkeyãšCosignãã©ã®ããã«æ¯èŒããŸãã?
ãã¡ããã ã§ã¯ãOpenPubkeyãšSigstoreã®Cosignãã©ã®ããã«æ¯èŒããããåé¡ã§ãã OpenPubkeyã¯ãå ¬ééµãIDã«ãã€ã³ãããæ¹æ³ã§ãããšç§ã¯äž»åŒµããŸãã ãã®ãããSigstoreã«éåžžã«ããé©åããŸãã OpenPubkeyãFulcioã«å ¥ããããšãã§ããŸãããSigstoreã«ã¯OpenPubkeyã«ããä»ã®ã³ã³ããŒãã³ãããããããããŸãã ãŸãã眲åãéææ§ãã°ãç£èŠãªã©ãä»ã®ã³ã³ããŒãã³ãããããŸãã ãããŠããã®ãã¹ãŠããšãŠãã¯ãŒã«ã ãšæãã®ã§ãã ãããŠãOpenPubkeyã§éåžžã«ããŸãæ©èœãããã®ã OpenPubkeyã¯ãå®å šãªçœ²åã·ã¹ãã ã§ã¯ãªããIDãã€ã³ãã£ã³ã°ã¡ã«ããºã ãžã®å ¬ééµã ãšæããŸãã ãŸããDockerã¯ããå®å šãªçœ²åã·ã¹ãã ãæ§ç¯ããŠããããã®IDå ¬ééµãã€ã³ãã£ã³ã°ã«OpenPubkeyã䜿çšããŠããŸãã
ããã«è©³ãã
- Docker Scout GAã®çºè¡š:ãœãããŠã§ã¢ãµãã©ã€ãã§ãŒã³ã®ããã®å®çšçãªæŽå¯
- Docker Scout ãã詊ããã ããÂ
- Dockerå ¬åŒã€ã¡ãŒãž(DOI)Â
- GitHub Actionsã¯ãŒã¯ããŒãã§OpenPubkeyã䜿çšããæ¹æ³
- OpenPubkey ã䜿çšãã Docker å ¬åŒã€ã¡ãŒãžã®çœ²å
- ãäžæãªç¹ãããããŸãããã Docker ã³ãã¥ããã£ããæäŒãããŸãã
- ããã«ãŒã¯åããŠã§ãã? å§ããŸãããã