Skip to main content

SSH認証局について

SSH認証局を利用すると、メンバーがGitでリソースにアクセスするときに使用するSSH証明書を、OrganizationまたはEnterpriseアカウントが発行できます。

SSH認証局について

SSH証明書とは、1つのSSHキーでもうひとつのSSHキーに署名する仕組みです。 SSH認証局 (CA) を利用して、Organizationのメンバーに署名済みのSSH証明書を提供すると、EnterpriseアカウントまたはOrganizationにCAを追加できるため、Organizationのメンバーはそれぞれの証明書を使用してOrganizationのリソースにアクセスできるようになります。

SSH CAをOrganizationまたはEnterpriseアカウントに追加すると、そのCAを利用して、OrganizationメンバーのクライアントSSH証明書に署名できるようになります。 Organizationのメンバーは、署名済みの証明書を使用して、GitでOrganizationのリポジトリにアクセスできます (ただし、自分のOrganizationのリポジトリに限る)。 あるいは、メンバーに対してOrganizationのリソースにアクセスする際にSSH証明書を使うよう求めることもできます。 詳細については、「Organization の SSH 認証局を管理する」および「Enterprise のセキュリティ設定にポリシーを適用する」を参照してください。

たとえば、毎朝新しい証明書を開発者に発行する内部システムなども構築できます。 各開発者は、その日の証明書を使用して、GitHub Enterprise ServerでOrganizationのリポジトリを扱うことができます。 1日の最後になると証明書は自動的に失効するので、証明書が侵害されることがあっても、リポジトリは保護されます。

メンバーは、自分の個人アカウントが所有するリポジトリのフォークにアクセスする際に、自分の証明書を使うことはできなくなります。

SSH証明書を使用するSSH URLについて

OrganizationがSSH証明書を必要とするなら、認証エラーを回避するために、OrganizationのメンバーはSSH経由でGitの操作をする際にOrganization IDを含む特別なURLを使わなければなりません。 この特別なURLを使うと、クライアントとサーバーは認証の際にメンバーのコンピュータが使うキーに関して簡単にネゴシエーションできるようになります。 メンバーが git@github.com で始まる通常の URL を使うと、SSH クライアントは間違ったキーを提供し、操作が失敗する場合があります。

リポジトリへの読み取りアクセス権を持つユーザーは、リポジトリのメイン ページで [コード] ドロップダウン メニューを選択し、 [SSH の使用] をクリックして、この URL を見つけることができます。

OrganizationがSSH証明書を必要としない場合は、メンバーは自分のSSHキーか、他の認証方法を使い続けることができます。 その場合は、特殊な URL または git@github.com で始まる通常の URL が機能します。

証明書の発行

各証明書を発行する際には、その証明書がどのGitHub Enterprise Serverユーザー用かを示すエクステンションを指定する必要があります。 たとえば、OpenSSH の ssh-keygen コマンドを使用して、KEY-IDENTITY を実際のキー ID に、USERNAME を GitHub Enterprise Server ユーザー名に置き換えることができます。 あなたが生成する証明書は、あなたのOrganizationのリソースに対してそのユーザの代わりに振る舞うことを認可されるようになります。 証明書を発行する前に、そのユーザのアイデンティティを必ず検証してください。

注: これらのコマンドを使うには、OpenSSH 7.6 以降に更新する必要があります。

$ ssh-keygen -s ./ca-key -V '+1d' -I KEY-IDENTITY -O extension:login@[hostname]=USERNAME ./user-key.pub

警告: 証明書が署名されて発行されると、その証明書を取り消すことはできません。 必ず -V フラグを使用して、証明書の有効期限を設定してください。そうしないと、その証明書は無期限に使用できることになります。

SSH を使用して複数の GitHub 製品にアクセスするユーザに証明書を発行するには、2 つのログイン機能拡張を含めて、各製品のユーザ名を指定できます。 たとえば、次のコマンドは、GitHub Enterprise Cloud のユーザーのアカウントに対して USERNAME-1 の証明書を発行し、HOSTNAME の GitHub AE または GitHub Enterprise Server のユーザーのアカウントに対して USERNAME-2 の証明書を発行します。

$ ssh-keygen -s ./ca-key -V '+1d' -I KEY-IDENTITY -O extension:login@github.com=USERNAME-1 extension:login@HOSTNAME=USERNAME-2 ./user-key.pub

source-address 拡張機能を使用して、Organization のリソースに Organization のメンバーがアクセスできる IP アドレスを制限できます。 エクステンションには、CIDR 表記を用いて特定の IP アドレスまたは一定範囲の IPアドレスを指定できます。 コンマで値を区切ることで、複数のアドレスや範囲を指定できます。 詳細については、ウィキペディアの「Classless Inter-Domain Routing」を参照してください。

$ ssh-keygen -s ./ca-key -V '+1d' -I KEY-IDENTITY -O extension:login@[hostname]=USERNAME -O source-address=COMMA-SEPARATED-LIST-OF-IP-ADDRESSES-OR-RANGES ./user-key.pub