複数組織へのSSO認可を自動化

GitHub Enterprise CloudでSSOが必要な組織へAPIやGitでアクセスする際は、利用するクラシックPATやSSHキーを組織ごとに認可する必要がある。今回の機能では、エンタープライズにインストールされたGitHub Appが、既存の認証情報に対する認可を複数組織へ付与できる。

対象となるのは、既存のクラシックPATと、検証済みでユーザーが所有するSSH認証キーだ。APIエンドポイントはPOST /enterprises/{enterprise}/credential-authorizationsで、1回のリクエストにつき最大50組織を指定できる。すでに有効な認可がある組織は安全にスキップされる。

秘密値をAppへ渡さずに識別

APIリクエストでは、PATの秘密値ではなく非秘密のトークンIDを指定する。SSHキーはSHA-256フィンガープリントで指定する仕組みだ。GitHubによると、認証情報の秘密値がGitHub Appへ渡されることはない。

このため、認可処理を自動化する際も、PATやSSHキーそのものの秘密値をAppに扱わせずに対象を指定できる。認証情報を複数組織へ展開する運用で、管理者が考慮すべき情報の範囲を抑えられる点が特徴となる。

利用に必要な条件

この機能は既定では無効になっている。利用するには、エンタープライズのAuthentication security設定で「Allow GitHub Apps to authorize credentials」を有効にする必要がある。

また、エンタープライズがエンタープライズレベルSSOを使用していること、認証情報の所有者が対象となるすべての組織のメンバーであることも条件となる。GitHub Appはエンタープライズ、またはエンタープライズ内の組織が所有し、Enterprise credentialsの書き込み権限を持たなければならない。操作主体はEnterprise owner、またはManage enterprise credentials権限を持つユーザーに限られる。

認可APIの呼び出しにはエンタープライズインストール用アクセストークンが必要だ。組織インストール用トークン、ユーザーアクセストークン、PATはこのAPIの認証には使えない。エンタープライズインストール用アクセストークンの有効期限は1時間とされている。

設定を無効にしても既存認可は残る

APIが成功するとHTTP 201を返し、認証情報のIDや種類、認可された組織の一覧を返す。指定した組織数が上限を超えた場合などは422、同時変更時は409となる。

運用上は、認可の削除条件にも注意が必要だ。GitHub Appによる認可機能を無効にしても、既存の委任による認可は直ちには削除されない。明示的に取り消すか、認証情報が失効・削除されるか、所有者が組織のメンバーでなくなるまで有効なままとされる。GitHub Appのアンインストールや権限喪失後も認可が残る場合があるため、自動化の導入時には付与と取り消しの両方を管理する必要がある。

今回の追加は、GitHub Enterprise Cloudで複数組織をまたいで認証情報を運用する企業にとって、手動のSSO認可作業を減らす選択肢となる。一方で、対象組織の範囲、Appの権限、認可の取り消し方針をあらかじめ整理しておくことが重要だ。