GitHub の Teamメンバーの追加・削除をOktaを使って自動化した。

Narichika Kajihara
@kajinari
Published in
8 min readJun 6, 2021

どうも kajinari です。
今回のエントリーも Okta 関連のエントリーです。
GitHub と Oktaを連携したら、アカウント作成、削除の自動化ができるようになりました、「アカウント招待して下さい!」という不毛なやり取りが無くなりました。

次のステップとしては、GitHub Enterprise Cloud において、Teamのメンバーの自動化をしたくなったので、色々調べたのでその経験についてシェアさせて頂きます。

チーム同期の自動化機能

GitHubのマニュアルはこちらです。重要なところを解説致します。

利用するための条件

  • シングルサインオンの設定が完了している。
  • 対応しているIdPは、Okta または Azure Active Directory。
  • 対象のOrganizationは、SAMLシングルサインオンを必須にする必要がある。
  • ベータ機能の位置付け。利用開始するにはGitHubへの依頼が必要
  • Teamがネストされている場合、利用できません。

機能の詳細は

  • IdPグループのメンバーとGitHub Teamを同期してくれます。
  • ひとつのGitHub Teamに対して、最大5つまでIdP側のグループと同期できます。
  • 1時間に1度、同期される。GitHubに反映されるまで、最大で59分必要な時がある。
  • GitHub Teamにマッピングできる最大のIDPのグループメンバー数は、5,000 まで。

ひとたび有効化してしまうと、Slackのユーザーグループと同じチーム名で同じメンバーのGitHub Teamができるようになります。
複数SaaSを使うのが当たり前な現代では、このように同じグループを異なるSaaSで同じ様に使えると、とても便利です。
また、SaaS毎に細かなメンバーやグループ名の違いを、人が吸収しなくてよくなるため、細かいことですが、脳みそのリソースを無駄に使われないで済むので、良きです。

チーム同期の設定手順

GitHubのマニュアルは、少し説明が足りてないと思ったので、付記させていただきます。

“Team synchronization(Teamの同期)”を有効化する

有効化するためには、GitHubへサポートリクエストを依頼する必要があります。

SSWS TokenとURL

マニュアルには、以下の記述があります。

Organization 名の下で、有効な SSWS トークンと Okta インスタンスの URL を入力します。

SSWS Token
Oktaで発行するAPI Tokenになります。
余談だけど、SSWSが結局何の略なのか分からんかったw

発行手順は以下の通りです。

  • Okta管理画面の SecurityAPITokens に遷移する
  • Create Token を押下し、適当な名前を入力する
  • Token が発行されるので、Copy する。
  • SSWS Token のフィールドに貼り付けます。

余談ですが、OktaのAPIへアクセスするときは、 Authorization ヘッダーに SSWS を頭に付与して使います。
Authorization: SSWS 00QCjAl4MlV-WPXM...0HmjFx-vbGua

もう一つ余談ですが、Oktaのアクセストークンは、一定期間利用されないままだと、そのまま無効化されるのは、素晴らしいなぁと思いました。

URL
Okta管理画面のURLを入力すると良いです。
https://{TenantName}-admin.okta.com

これで初期セットアップは完了です。 既存チームの設定でIdPのSync対象を設定します。

どのチームでSyncするか設定する

チームの設定画面に移動し、適当なチームの SettingsGeneral に遷移すると、 Identity Provider Groups という設定箇所が増えているのを確認できます。
ここでIdP側のグループを選択することで、IdPグループとSyncすることができます。

同期の確認は、Audit Logで確認できる。

Team Sync を設定した箇所にフィルターが設定済みのリンクがあります。
追加・削除されるのがわかります。

同期される Team のメンバーに関する要件

マニュアルには、このように記載がありました。
Synchronizing a team with an identity provider group — GitHub Docs

  • The person is a member of the organization on GitHub.
  • The person has already logged in with their user account on GitHub and authenticated to the organization or enterprise account via SAML single sign-on at least once.
  • The person’s SSO identity is a member of the IdP group.

自分の環境では、IdP経由でアカウント作成したメンバーは確実に同期対象になっていました。 この場合、途中からSSOを実装した場合において、一度Org.から削除して、再度IdP経由でプロビジョニングが必要になってしまいます。
それはかなりしんどい要件になるので、更に検証して仕様を確認したいと思っています。 もしこうしたら良いよ。って情報をお持ちの方は教えて下さい。

GitHub Enterprise とIdP連携によるプロビジョニングの将来的な方向性

GitHubの公開ロードマップによると、

Enterprise Managed Users (Private Beta)」がリリースを予定しているそうです。

上記記載内容をよく読むと、普段利用しているパーソナルなGitHubアカウントとは別に、GhE Cloud 専用の完全マネージドなGitHubアカウントが作成できるようになるみたいです。 一昔前のGitHub Enterprise Server みたいですね。

EMUは、Public なGitHub Repository には、読み取り専用でのアクセスができるものの。コントリビュートできないアカウントになり、いわゆる草が生えない状態になります。
完全なSCIMによるTeam Sync、アカウントの作成、削除、管理が実現できアドバンテージもあるものの、開発者との調整が必要になりそうです。

まだプライベートベート版なので、GAするまでに、気になるポイントが改善されているのを期待しつつ、リリースを待ちたいと思います。

--

--

Narichika Kajihara
@kajinari

Agileコーチとして、開発チームのチーム・ビルディングを担当し、チーム支援を行っている。 その他には、モダンな情報システム担当、エンジニア採用、技術広報など