❄️

EMU有効化時のMicrosoft Entra - GitHub Enterpriseの構成

2023/12/18に公開
2

エンタープライズでGitHub Enterprise Cloudを導入してEnterprise Managed Userを有効化した場合のMS Entra- GitHub Enterpriseの初期の構成方法について調べたので記事にしました。

エンタープライズでGitHubを使用

エンタープライズでGitHubを使用する場合、コードの流出のblockやアクセスの制限などのセキュリティ的な要件が上がってくるかと思います。
そのため、エンタープライズでGitHubを導入する場合、IP制限やID管理システム(IdP)を介したアクセス制御が可能となるGitHub Enterpriseを導入するというオプションが選択肢に入ってくるかと思います。

GitHub Enterprise Cloud vs GitHub Enterprise Server

GitHub Enterpriseを導入する場合、GitHub Enterprise CloudかGitHub Enterprise Serverにするかというオプションがあります。

大きな違いはサーバーのホスト先で、Enterprise Cloudの場合はGitHub.comによるホスト、Enterprise Serverの場合はセルフホストになります。
Enterprise Cloudの場合はGitHubによってホストされるため、管理者は自分でサーバーの管理、運用する必要がありません。
Enterprise Serverの場合、セルフホストになるため、管理者自信でサーバーの管理と運用が必要になります。

https://docs.github.com/ja/enterprise-cloud@latest/admin/overview/about-github-enterprise-cloud

https://docs.github.com/ja/enterprise-server@3.11/admin/overview/about-github-enterprise-server

Enterprise Managed Userについて

GitHub Enterprise Cloudでは、Enterprise Managed User(EMU)を有効化して使用することで、個人にGitHubアカウントを作成させずに、IdP(Microsoft Entra等)でGitHub.comのエンタープライズメンバーのIDとアクセスを一元管理してGitHub Enterpriseのユーザーとしてプロビジョニングすることができます。

EMU有効化のメリット:

  1. 外部のID管理システム(IdP)からGitHub.com上のエンタープライズメンバーのIDとアクセスを一元管理できる。
  2. IdPは、GitHub Enterprise Cloudに新しいユーザーアカウントをプロビジョニングし、ユーザーアカウントのユーザー名、プロファイルデータ、チームメンバーシップ、およびリポジトリアクセスを制御できる
  3. 管理されたユーザーアカウントは、エンタープライズ内の組織を所有でき、組織内の他の管理されたユーザーアカウントを追加できる
  4. 管理されたユーザーアカウントは、エンタープライズ内のリポジトリにアクセスできますが、GitHubの残りの部分でパブリックコンテンツを作成したり、他のユーザー、組織、およびエンタープライズと協力したりすることはできない。
  5. GitHub Enterpriseの所有者は、GitHub上での管理されたユーザーアカウントのすべてのアクションを監査できる

個人にGitHubアカウントを作成させることなく、IdPによってアクセスの制御ができ、さらにIdPでプロビジョニングされたユーザーはEnterpriseの中でのみリソースの作成ができるので、「会社のアカウントを使ってPublicリポジトリを作ってそこに会社のコードをpushしてしまう」といった悲しい事故を防ぐことができます。EMUを有効化することによって、よりセキュアにエンタープライズでGitHubの運用ができます。

https://docs.github.com/ja/enterprise-cloud@latest/admin/identity-and-access-management/understanding-iam-for-enterprises/about-enterprise-managed-users

でも追加でお値段掛かるんでしょう?と思って調べてみましたが、EMUはGitHub Enterpriseのサブスクリプションの金額に含まれているようです。

ただし、Docs(下記画像下)によると、GitHub Enterpriseを導入したらデフォルトでついてくるわけでもなく、EMUを使いたい場合はGitHubのセールスチームへのお問い合わせが必要のようなので、EMUを使いたい前提でEnterpriseを導入する場合はコンタクトを取ってから導入を進めた方がよさそうです。

https://docs.github.com/ja/enterprise-cloud@latest/admin/identity-and-access-management/understanding-iam-for-enterprises/about-enterprise-managed-users#getting-started-with-enterprise-managed-users

Enterpriseで追加で課金が必要なのは、GitHub Advanced Securityとプレミアムサポートの2点のようです。

https://github.co.jp/pricing.html#:~:text=Enterprise %24,231 1ユーザあたり年間費用*

Entra - GitHub Enterpriseの連携

IdPとしてMicrosoft Entraを使用した場合、EntraとGitHub Enterpriseの構成と各レイヤーでできることはこんな感じになります。

すでにテナントとEntraを運用している場合は、EntraのエンタープライズアプリケーションにGitHub Enterprise Cloud - Enterprise Accountのアプリケーションを登録し、ここでGitHub Enterpriseを使わせたいユーザーの登録とSSOの構成を行う必要があります。

これにより、EntraのGitHub Enterprise Cloudのアプリケーションに登録されているユーザーのみがGitHub Enterpriseを使用でき、さらにアクセスの際にはEntraを介したSSOでログインすることになります。
このユーザーのアカウントは、登録されているGitHub Enterpriseの中でのみ活動することができ、このアカウントを使ってEnterprise以外のGitHubの場所でのOrganizationやRepositoryの作成はできません。

さらに、GitHub Enterpriseの設定で、GitHubの支払をAzureのサブスクリプションに紐づける設定ができたり、IP許可リストによるアクセス可能なIPの制限ができます(これにより、特定ロケーションからのみのアクセス制限が実現できます)

https://docs.github.com/ja/enterprise-cloud@latest/billing/managing-the-plan-for-your-github-account/connecting-an-azure-subscription

https://docs.github.com/ja/enterprise-cloud@latest/admin/configuration/hardening-security-for-your-enterprise/restricting-network-traffic-to-your-enterprise-with-an-ip-allow-list

Entraによるユーザープロビジョニングのための構成

EMUが有効化されたGitHub Enterprise Cloudがあるとします。
そのなにも設定していない状態から、Enterpriseのユーザーをプロビジョニングするまでのstepを調べてみました。

必要な権限

作業者に必要なものは以下の権限です。

  • GitHub EnterpriseのEnterprise Owner(所有者)
  • Microsoft Entraの管理者権限

作業ステップ

Enterprise Managed Users では、GitHub.com 上のエンタープライズのリソースへのアクセスは、ID プロバイダー (IdP) を介して認証される必要があります。GitHub のユーザー名とパスワードを使用して GitHub にサインインする代わりに、Enterprise のメンバーは IdP を介してサインインします。

https://docs.github.com/en/enterprise-cloud@latest/admin/identity-and-access-management/configuring-authentication-for-enterprise-managed-users/configuring-saml-single-sign-on-for-enterprise-managed-users#enabling-guest-collaborators
と公式Docsにあるように、EMUが有効化されている場合はEnterpriseのリソースにアクセスするためにはIdPを介したアクセスが必要になるので、まずはIdP側(Entra)の構成が必要になってきます。
これをしていない状態だと、EnterpriseのOwnerであってもOrganizationの作成をしようとすると「先にSSOを構成してください」というメッセージがGitHub上に出てきて、Organizationの作成もユーザー追加もなにもできない(Enterpriseにはアクセスだけができている状態)、という事例を聞いたので、おそらく最強権限のEnterprise Ownerであっても、「GitHub.com 上のエンタープライズのリソースへのアクセスは、ID プロバイダー (IdP) を介して認証される必要がある」 というルールが適用され、IdPによるSSO構成なしではEnterpriseでリソース作成はなにもできない、という状態になるようです。

stepとしては、ざっとですがこんな感じの順番になるかと思います。

※AzureのテナントとEntraがあって、Entraにはすでにユーザーが登録されている前提です。
まだの場合はそこまで済ませてください。

  1. EntraのエンタープライズアプリケーションにGitHub Enterprise Cloud - Enterprise Accountを追加
  2. 1で追加したGitHub Enterpriseのアプリケーションに、GitHub Enterpriseのユーザーとしたい人を追加
  3. SAMLによるSSO認証の構成

ここまでの方法はこちらのチュートリアルに沿って実施
https://learn.microsoft.com/ja-jp/entra/identity/saas-apps/github-enterprise-managed-user-tutorial?source=recommendations

  1. ユーザープロビジョニングの有効化

https://learn.microsoft.com/ja-jp/entra/identity/saas-apps/github-provisioning-tutorial

ここまでできれば、EntraのGitHub Enterpriseのアプリケーションに登録されたユーザーがGitHub Enterpriseのユーザーとしてプロビジョニングされるはず。
ここまで完了したら、あとはGitHub Enterpriseの中でOrganizationの作成、ポリシーの追加、Copilotの有効化等を実施して下さい。

まとめ

Enterprise Managed Userを有効にすることによって、個人にGitHubアカウントを作成させることなく、IdPでの認証を前提としたユーザープロビジョニング、Enterprise外でのアカウントの活動を制限することができ、GitHub運用時のセキュリティが高まります。

ただ、EMUを有効化した場合はIdPによる認証がGitHub Enterpriseのリソースアクセスの条件になるので、初期の構成では先にIdPによる構成と自動プロビジョニングを行ってからGitHub Enterpriseの構成を行うようにして下さい。

Discussion

yuriemoriyuriemori

step3までのチュートリアルURLがEMU用のチュートリアルじゃなかったので修正。
エンタープライズアプリ登録時に、似た名前のEnterprise Accountのアプリがあるので、それに関するアラートを追記。

Entra-GitHub Enterprise連携の直後の構成イメージで、Entra側のエンタープライズアプリのアイコンがEMU用のアプリではなかったので修正。

yuriemoriyuriemori

EntraでのSAML SSO有効化時のGitHubユーザーの作成の有無に関して仮説を共有頂きましたので記載します。

SAML SSO有効化時、「[Test SAML configuration](SAML 構成のテスト) 」があるため、事前に確認用にGithubユーザーの作成が必要かと思ってましたが、なしでも対応できました。
Entraのエンタープライズアプリケーションのユーザーとグループに割り当てされているユーザーで認証が通ればクリアされました。つまり、Entraの認証まではみていて、Github側の認可は問わない模様。
そのあと通常のSSOのために、そのユーザーはSCIMで同期されている必要はありますのでSSOできる管理者ユーザーは用意する必要はあります