ãã®èšäºã¯ BastionZero ã®å¯çš¿ã«ãããã®ã§ãã
SSHããŒãæ°ã«ããã«SSHã§ãããšãããã©ãã§ãããã? SSHããŒã®çŽå€±ãçé£ãå ±æãããŒããŒã·ã§ã³ãå¿ããå¿é ããå¿ èŠã¯ãããŸããã? ãã®èšäºã§ã¯ãã¡ãŒã«ã¢ã«ãŠã³ããŸãã¯ã·ã³ã°ã«ãµã€ã³ãªã³(SSO)ã ãã§ãªã¢ãŒãDockerã»ããã¢ããã«SSHæ¥ç¶ããæ¹æ³ã«ã€ããŠèª¬æããŸãã OpenPubkey SSH ã®èšå®æ¹æ³ã«ã€ããŠã¯ ããã¡ãã®ããã¥ã¡ã³ããã芧ãã ããã

SSH ã®äœãåé¡ã«ãªã£ãŠããŸãã?
ç§ãã¡ã¯ SSH ã倧奜ãã§ããã€ã䜿ã£ãŠããŸãããäœå¹Žã«ãããã£ãŠèç©ããããŒã®æ°ãæ°ããããã«ç«ã¡æ¢ãŸãããšã¯ããŸããããŸããã ãããæžããŠããæç¹ã§ãç§ã¯8ã€æã£ãŠããŸãã 5ã€ãäœã®ããã«ããã®ãã¯èšããããå°ãªããšã2ã€æã€ã¹ãã§ã¯ãªãããå°ãªããšããã1ã€å€±ã£ãå Žåã®çŽ æ©ãçºå°ã¯ééããªãã ãis_key.pemããšã¯ãã£ããäœãªã®ã§ãããã? å šç¶ãããããããã€äœã£ãããããããªãã£ãã¿ããã§ãã
SSHããŒãå®éã«ç¡å®³ãªããšã¯ãã£ãã«ãããŸãããããªã¢ãŒãDockerã»ããã¢ãããžã®ã¢ã¯ã»ã¹ããããã°ã«ã®ã¿äœ¿çšããŠããå Žåã§ãããã®ããŒã¯ãã£ãã«ãããŸããã ãã¹ãç°å¢ã¯ é »ç¹ã«ã¯ãªãã ãžã£ãã¯ã ãããã·ãžã£ã㯠ãããã€ã³ã¿ãŒãããå šäœãSSHãããã³ã°å°çšã«ãªã£ãŠããŸããÂ
æåŸã«ããããé©çšã sshdãã®ã¯ãã€ã§ãã? ãã®ããŒã«ã¯ãŠããã¿ã¹ã§ããããã£ãã«æŽæ°ãããªãããããããã®è
åšã¯ããã«ã¯æ¶ããŸããã éµã®ç®¡ç㯠ç
©ããã äœæ¥ã§ããã劥åã«ã€ãªããããšã¯é¿ãããããåçŽãªãã¹ãæãããçµæã«ã€ãªããå¯èœæ§ããããŸãã GitHubã§ãããæšå¹Žãå
¬éãªããžããªã§ SSHç§å¯éµãå
¬éã ãŸãããÂ
ã§ã¯ãã©ãããã°ããã®ã§ãããã? ã©ãããã°æ¹åã§ããŸãã? ãããŠãããã¯ç¡æã§ãã? ã¯ããã¯ããã¯ããÂ
çŸåšãOpenPubkeyã§SSHã䜿çšããæ°ããæ¹æ³ããããŸãã OpenPubkey SSH(OPK SSH)ã䜿çšãããšãSSHããŒããžã£ã°ãªã³ã°ãã代ããã«ãéåžžã®ã¡ãŒã«ã¢ã«ãŠã³ããŸãã¯SSOã䜿çšããŠãã°ã€ã³ãã1åéãã®è¿ éãªã»ããã¢ããã§SSHãµãŒããŒã«å®å šã«æ¥ç¶ã§ããŸãã ã©ã®ããŒãããªããè§£éããããæšæž¬ããããäžé©åãªåœåèŠåã®ããã«éå»ã®èªåãåªã£ããããå¿ èŠã¯ãããããŸããã ããŒã¯ãããŸããã
OpenPubkey SSHã¯ãBastionZeroãDockerãThe Linux Foundationãäž»å°ãããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ãã OpenPubkeyã®æåã®å®å šã«éçºããããŠãŒã¹ã±ãŒã¹ã§ãã æ©èœã匷åããé²åãããŠãŒã¶ãŒã®ããŒãºãšã»ãã¥ãªãã£ã®èª²é¡ã«å¯Ÿå¿ããããã«é©å¿ããã«ã€ããŠãæé·ãšæ¹åãç¶ããããŸãã OpenPubkeyãšã¯äœãããããŠãããã©ã®ããã«æ©èœããããåŠã¶ããã«èªãã§ãã ããã
OpenPubkey SSH ã䜿ãå§ããÂ
çŸåšãOPK SSH 㯠Google çµç±ã®ãã°ã€ã³ã®ã¿ããµããŒãããŠããŸãã ãåžæã®ãããã€ããŒã決ãŸã£ãŠããå Žåã¯ã GitHub ã«ã¢ã¯ã»ã¹ãã ãã以äžã®ã åå ããã ã»ã¯ã·ã§ã³ã§è©³çްãã確èªãã ããã
OpenPubkey SSH ã¯ãBastionZero ã®ãŒããã©ã¹ãã³ãã³ãã©ã€ã³ãŠãŒãã£ãªã㣠zliã§ãã . ã®ã€ã³ã¹ããŒã« zli æé ã«ã€ããŠã¯ ãBastionZeroã®ããã¥ã¡ã³ããåç
§ããŠãã ããã
ãã€ã³ã¹ããŒã«ã zliãããæ¬¡ã®ããšãè¡ãå¿
èŠããããŸãã
- SSH ãµãŒããŒãæ§æãã (<1 å)
- Google ã§ãã°ã€ã³ (<1 å)
- æ§æããã¹ããã
- Docker ãªã¢ãŒã ã¢ã¯ã»ã¹ã« OPK SSH ã䜿çšãã
- ãŠãŒã¶ãŒã管çãã
SSH ãµãŒããŒãæ§æãã
æåã®ã¹ãããã¯ãSSHãµãŒããŒãæ§æããããšã§ãã åããŠã®ã»ããã¢ããã§ã¯ãGoogleã¢ã«ãŠã³ããšãã»ããã¢ããããããšããŠããSSHãµãŒããŒãžã®å°ãªããšãsudoerã¢ã¯ã»ã¹ãããããšãåæãšããŠããŸãã
zli configure opk <your Google email> <user>@<hostname>
Googleã§ãã°ã€ã³
次ã«ããã°ã€ã³ããå¿ èŠããããŸãã ããã«ããããã©ãŠã¶ãŠã£ã³ããŠãéããGoogleã§èªèšŒã§ããããã«ãªããŸãã
zli login --opk
æ§æããã¹ããã
ããã§ãOPK ã䜿çšã㊠SSH ã䜿çšã§ããããã«ãªããŸããã ãã¹ãŠãæ£ããæ§æãããã¢ã¯ã»ã¹ã OPK SSH çµç±ã§æ©èœããŠããããšããã¹ãããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã
ssh -F /dev/null -o IdentityFile=~/.ssh/id_ecdsa -o IdentitiesOnly=yes user@server_ip
èšŒææžãããã©ã«ãã®å Žæã«ä¿åãããããSSH ã¯åžžã«ããã䜿çšããŠèªèšŒããŸãã ãã®ãããæ¢åã®SSHããŒãåé€ããåŸã«ãæå®ãã IdentityFile å¿
èŠã¯ãããŸããã
Docker ãªã¢ãŒã ã¢ã¯ã»ã¹ã« OPK SSH ã䜿çšãã
ãã§ã«Dockerã§SSHã䜿çšããŠããå Žåã¯ãæºåãæŽã£ãŠãããä»ã«äœãããããšãªããæ¢åã®ãªã¢ãŒãDockerã»ããã¢ãããç¶æã§ããŸãã ãã以å€ã®å Žåã¯ã次ã®ããããã®æäœãè¡ã£ãŠãããŒã«ã«ã® Docker ã¯ã©ã€ã¢ã³ãããªã¢ãŒãã® Docker ã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ããããã«èšå®ã§ããŸãã
# Set an environment variable
$ export DOCKER_HOST=ssh://user@server-ip
# Or, create a new context
$ docker context create ssh-box --docker "host=ssh://user@server-ip"
ãã®åŸãéåžžã©ããDockerã䜿çšã§ããå éšã§SSHã䜿çšããŠãªã¢ãŒãDockerã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ããŸãã
ãŠãŒã¶ãŒã管çãã
1 人ã®ãŠãŒã¶ãŒçšã«èšå®ããã®ã§ã次ã¯è€æ°ã®ãŠãŒã¶ãŒçšã«æ§æããæ¹æ³ã«ã€ããŠèª¬æããŸãããã OPK SSH ã§ã¯ããŠãŒã¶ãŒã«ã¢ã¯ã»ã¹æš©ãä»äžããããã«ãŠãŒã¶ãŒãšèª¿æŽããå¿ èŠããããŸããã ãµãŒããŒãžã®ã¢ã¯ã»ã¹ãèš±å¯ãããŠãŒã¶ãŒã®éžæã¯ã次ã®ãããªèªã¿ããã YAML ããªã·ãŒ ãã¡ã€ã«ã§æå®ããŸãã
$ cat policy.yaml
users:
- email: alice@acme.co
principals:
- root
- luffy
- email: bob@co.acme
principals:
- luffy
principalsããã¯ãSSH ãèš±å¯ãããŠãããŠãŒã¶ãŒã® SSH ã¹ããŒã¯ã§ããããšã«æ³šæããŠãã ããã
åç¬ãŸãã¯å°äººæ°ã®ã°ã«ãŒãã§é£è¡ããå Žåã¯ããã®ãã¡ã€ã«ãçŽæ¥åŠçããå¿
èŠã¯ãªãã§ããããç§ãã¡ã® zli configuration ã³ãã³ããããªãã®ããã«ãããåŠçããŸãã ãã ããå€§èŠæš¡ãªã°ã«ãŒãã§ã¯ããããå€§èŠæš¡ã«ã©ã®ããã«æ©èœãããã«é¢å¿ãããå¯èœæ§ãããããã®çãããããŸãã OPK SSH ãã客æ§ã®ããŒãºã«ã©ã®ããã«é©åãããã«ã€ããŠã¯ã BastionZero ãŸã§ãåãåãããã ããã ããã»ã¹äžã®åé¡ããã©ãã«ã·ã¥ãŒãã£ã³ã°ã«é¢ãã質åã«ã€ããŠã¯ã ã¬ã€ããã芧ãã ããã
ä»çµã¿
Dockerã§ã¯ãç°å¢å€æ°ãŸãã¯ã³ã³ããã¹ãã®äžéšãšããŠå¥ã®ãã¹ããæå®ããããšã§ãSSHã䜿çšããŠãªã¢ãŒãã³ã³ããã§Dockerã³ãã³ããå®è¡ã§ããŸãã
# Set an environment variable
$ export DOCKER_HOST=ssh://user@server-ip
# Or, create a new context
$ docker context create ssh-box --docker "host=ssh://user@server-ip"
OPK SSH ã®å Žåã¯ãäœã倿Žããå¿ èŠã¯ãããŸããã Dockerã¯ãäºåã«æ§æãããSSHãå éšã§äœ¿çšããŠããŸãã OpenPubkeyã¯ãããå®å šã§ãããªãããDockerãSSHã«äŸåãããã®ä»ã®ã¢ã¯ã»ã¹ãŠãŒã¹ã±ãŒã¹ãšå®å šã«äºææ§ã®ããå¥ã®æ§æã§ã(å³1)ã

OpenPubkeyã¯ãSSHããã§ã«èšèšãããŠããæ¹æ³ãšããŸãã¹ã©ã€ãããŸãã ç§ãã¡ã¯ããã䜿çšãããåºãå±éãããŠããçµ±åã¡ã«ããºã ã®ã¿ã䜿çšããŠããŸãã ãŸããSSH ããŒã®ä»£ããã« SSH èšŒææžã䜿çšããæ¬¡ã« ã䜿çšã㊠AuthorizedKeysCommand OpenPubkey æ€èšŒããã°ã©ã ãåŒã³åºããŸããããã¯ãã¹ãŠç§ãã¡ã® zli configure ã³ãã³ãã«ãã£ãŠããªãã®ããã«äžè©±ããããŸãã
$ cat /etc/ssh/sshd_config
...
AuthorizedKeysCommand /etc/opk/opk-ssh verify %u %k %t
AuthorizedKeysCommandUser root
...
SSH èšŒææžã䜿çšãããšãããŒãäžèŠã«ãªããŸãã x509 ãªã©ã®åŸæ¥ã®èšŒææžãšã³ã·ã¹ãã ã®ããã«äœ¿çšãã代ããã«ããµãŒããŒäžã§æ€èšŒã§ããç¹å¥ãªããŒã¯ã³ã§åã蟌ãããšãç®æšã§ãã ããã§ãã® AuthorizedKeysCommand åºçªã§ããÂ
ã䜿çšãããš AuthorizedKeysCommand ããŠãŒã¶ãŒã¯ããã¡ã€ã«å
ã® authorized_keys äºåæ§æãããå
¬éããŒãšæ¯èŒããã®ã§ã¯ãªããããã°ã©ã ã«ãã£ãŠã¢ã¯ã»ã¹ãè©äŸ¡ã§ããŸãã OPK æ€èšŒããŒã«ã䜿çšããããã«æ§æ sshd ãããšãä»åŸä»äžãããã¹ãŠã® OPK çæ SSH èšŒææžãžã®ã¢ã¯ã»ã¹ãèš±å¯ãŸãã¯æåŠã§ããŸãã
OpenPubkeyãšã¯äœã§ãã?
OpenPubkeyã¯SSHã ãã§ã¯ãããŸãããããã ãã§ã¯ãããŸããã Docker㯠Dockerå ¬åŒã€ã¡ãŒãžã®çœ²å ã«äœ¿çšããBastionZeroã¯ãŒããã©ã¹ãã€ã³ãã©ã¹ãã©ã¯ãã£ã¢ã¯ã»ã¹ã«äœ¿çšããŠããŸãã OpenPubkeyã¯ãLinux FoundationãBastionZeroãDockerã®å ±å ã®åãçµã¿ ã§ãã ããã¯ãOpenID Connect(OIDC)äžã«æ§ç¯ããããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ãããå€ãæ©èœã«åœ±é¿ãäžããããšãªãæ°ããæ©èœã远å ããŸããÂ
OIDCã¯ãå人(ãŸãã¯ä»äºçš)ã®é»åã¡ãŒã«ã¢ã«ãŠã³ãã䜿çšããŠWebãµã€ããŸãã¯ã¢ããªã±ãŒã·ã§ã³ã«ãã°ã€ã³ã§ããããã«ãããããã³ã«ã§ãã ãã°ã€ã³ãããšãå®éã«ã¯ãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³å°çšã® ID ããŒã¯ã³ (ID ããŒã¯ã³) ãçæãããèªåãèªåã§ããããšã蚌æãããŸãã ãŸãã䟿å©ãªå人æ å ±ãå«ãŸããŠãããåºæ¬çã«ã¯ããã®ã¢ããªã±ãŒã·ã§ã³ã«èŠæ±ã®èš±å¯ãäžãããã®ã§ããÂ
åºæ¬çã«ãOpenPubkeyã¯äžæçãªå ¬ééµãIDããŒã¯ã³ã«è¿œå ããŠãã¡ãã»ãŒãžã«çœ²åã§ããããã«ããŸãã GoogleãMicrosoftãOktaãªã©ã®ä¿¡é Œã§ããIDãããã€ããŒã«ãã£ãŠèšŒæãããŠããããããã€ã§ãã©ãã§ã誰ã§ãæ€èšŒã§ããŸãã
ããããOpenPubkeyã¯ãIDããŒã¯ã³ã«å ¬ééµã远å ããã ãã§ã¯ãããŸããããŸãããããã©ã®ããã«äœ¿çšãããã«ã€ããŠãåæ§ã§ãã ããã© OIDC ã®åé¡ã® 1 ã€ã¯ããã®ããŒã¯ã³ãå°éããã¢ããªã±ãŒã·ã§ã³ããããªããããªãã§ãããšæ³å®ããããšã§ãã OpenPubkeyã§ã¯ãå ¬éããŒã¯ã³ãæç€ºããã ãã§ãªãã1åéãã®çœ²åä»ãã¡ãã»ãŒãžãæç€ºããããšã§ãããªãã誰ã§ãããã蚌æããããšãã§ããŸãã ãããã£ãŠãããªãã«ãªãããŸãå¯äžã®æ¹æ³ã¯ãããªãã®å ¬éããŒã¯ã³ ãš ããªãã®ãã·ã³ãé¢ããããšã®ãªãç§å¯ãçãããšã§ãã Â
åå ããã«ã¯
åå ããæ¹æ³ã¯ãããããããŸãã ç§ãã¡ã¯ãæ ç±çã§ç±å¿ãªã³ãã¥ããã£ãæ§ç¯ããŠããŸãã ç§ãã¡ã¯ãã¢ãŒããã¯ãã奜ããªäººã®ããã®é«ãã¬ãã«ã®ãã®ãšãç°ãªãçš®é¡ã®ã¢ãŒããã¯ãã«ãªããã人ã®ããã®æ¥œãããŠéªšå€ªãªæè¡çãªã¬ãã«ã®äž¡æ¹ã§ç©äºãè°è«ããŸãã ããããã«æ¥ãŠãã ãããçæ§ã®ãæ¯æŽã«æè¬ããããŸãã
åå ããåžæã®æ¹ã¯ã OpenPubkey ãªããžããªãã芧ãã ããã ãŸããSSH ããŒã䜿çšããã« OPK SSH to SSH ãè©Šãæºåãã§ããŠããå Žåã¯ãããã¥ã¡ã³ãã®å æ¬çãªã¬ã€ããåç §ããŠãã ããã
ããã«è©³ãã
- ãªã³ããã³ããŠã§ãããŒã How to use OpenPubkey to SSH without SSH keysããã芧ãã ããã
- GitHub Actionsã¯ãŒã¯ããŒãã§OpenPubkeyã䜿çšããæ¹æ³ãèªãã§ãã ããã
- OpenPubkey ã䜿çšãã Docker å ¬åŒã€ã¡ãŒãžã®çœ²å
- Docker ãã¹ã¯ãããã®ææ°ãªãªãŒã¹ãå ¥æããŸãã
- 次ã®ãã®ã«æç¥šããŠãã ãã! å ¬éããŒãããããã芧ãã ããã
- 質åããããŸãã? Docker ã³ãã¥ããã£ããæäŒãããŸãã
- ããã«ãŒã¯åããŠã§ãã? å§ããŸãããã