GitHub Enterprise CloudのSSH証明書認証

Image of Ben Toews

GitHub Enterprise Cloudは、SSH証明書をサポートするようになりました。これにより、企業や組織は所属するメンバーがリポジトリにアクセスする方法をより高度にコントロールできます。SSH証明書では、あるSSHキー(認証局)で別のSSHキーに署名でき、キーの所有者である開発者の情報も含まれます。管理者はSSH認証局(CA)の公開鍵をアップロードして、メンバーがGitの認証に使用する証明書の発行を開始できます。証明書は、企業または組織に属するリポジトリへのアクセスのみに使用できます。また、管理者は、リポジトリへのアクセス時に証明書の使用を必須にできます。

SSHキーとの相違点

SSH証明書とSSHキーと相違点について説明します。GitHubでは、当初よりSSHキーをサポートしています。これは、個々のユーザーを安全に識別する暗号キー  です。その一方で、SSHにはSSH証明書のサポートを定義する仕様があります。SSH証明書では、あるSSHキーで別のSSHキーに署名できます。その結果”SSH証明書”が生成されます。CAを信頼するサーバーは、証明書の署名を検証して、証明書およびその関連メタデータを信頼できます。

動作の仕組み

SSH証明書が どのように動作し、どのようにより高度な管理を実現できるのかを理解するために、ある組織がCAをセットアップしてキーに署名する手順を見てみましょう。各企業における設定プロセスは、ほとんど同じです。

初めに、組織の管理者はSSH CAキーをアップロードします。これは通常のSSHキーです。

➜  ssh-keygen -t ed25519 -C ca@github.com -f ca
➜  cat ca.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOixUTX9ssW7bAaO6wTxXxJGRpVWNnqnOFwFZ1ceOxVn ca@github.com

ユーザーの通常のSSHキーの場合と同様の方法で公開鍵をアップロードします。ただし、ここでは公開鍵を組織の”SSH認証局”設定ページにアップロードします。

注:リポジトリへのアクセスにSSH証明書を必須とすることもできます 。これにより、管理者はリポジトリへのアクセスに使用できるキーについて、より詳細に管理できます。アップロードが完了したら、各メンバーのSSHキー管理ページに新しいセクションが追加され、各自が所属する企業および組織でSSH CAが設定済みであることが表示されます。

SSH CAを追加したら、組織のリポジトリにアクセスするための証明書を発行できます。分かりやすく説明するために、例としてユーザーの通常のSSHキーを使用します。

➜ ssh-keygen -t ed25519 -C user1@github.com -f user1
➜ cat user1.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGN4i6n6N2jdOXM1RUhLIcww1RnO6QaE3psgUXLewash user1@github.com

このキーはSSH CAによる署名が可能です。署名によって、組織所有のリポジトリへのアクセスに使用する証明書が作成されます。

➜ ssh-keygen -O extension:login@github.com=user1 -s ca -V '+1d' -I user1@github.com -n user1 user1.pub
Signed user key user1-cert.pub: id "user1@github.com" serial 0 for user1 valid from 2019-08-09T12:26:00 to 2019-08-10T12:27:43

組織のリポジトリにアクセスするために、各開発者の個別のSSHキーをアップロードする必要はありません。 SSHキーがCAキーで署名されると、その結果生成された証明書を使用して組織のリポジトリへのアクセスを認証できます。GitHubは、必須項目の“login@github.com”証明書エクステンションに基づいて、リポジトリにアクセスしている開発担当者 を識別します。

SSH証明書を使用することで、1日で期限が切れる証明書などの高度なセキュリティポリシーを維持できます。この例で作成した証明書は、有効期限が1日です。また、内部システムや証明書を発行する機能を持つ既存のソリューションから毎朝証明書を開発者が取得する、といった安全性の高いワークフローを構築することも可能になります。

このシステムに対して、組織内で必要とされる認証方式を実装することもでき、生成される証明書はその日に開発者がGitHub.com上で行う全ての作業に使用することができます。

そして、その日の終わりに 証明書の期限が自動的に切れて、開発担当者 は組織のすべてのリポジトリにアクセスできなくなります。

これは、セキュリティを特に重視する世界各国の開発者 から強い要望があった機能です。私たちは、それらのチームの皆様、そしてGitHub Enterpriseをご利用のすべてのチームに、コードの保護方法の選択肢をより多く提供できることを嬉しく思います。今後も最新情報を常にご確認ください。近日中に、Enterprise Server向けのSSH証明書認証のサポートも開始する予定です。

GitHub Enterprise向け証明書認証の詳細についてはこちら