Enterprise Managed Usersを使用すると、ネットワーク上のユーザーが組織に属していないアカウントを使用して GitHub.com に認証することをブロックできます。 これは、会社のデータが一般に公開されるリスクを減らすのに役立ちます。
この制限を適用するには、 GitHub.comに対するユーザーの Web および API 要求にヘッダーを挿入するようにネットワーク プロキシまたはファイアウォールを構成します。
この機能には、外部のファイアウォールまたはプロキシが必要です。 GitHub のサポート は、このような外部ツールのセットアップやトラブルシューティングに役立つことはできません。 サポートの範囲について詳しくは、「GitHub サポートについて」をご覧ください。
アクセス制限の有効化
この機能は、規定では有効ではありません。 Enterprise 所有者は、自分の Enterprise に対してこの機能を有効にできます。
- 企業ページに移動してください。 たとえば、GitHub.com の [Enterprise] ページから。
- ページの上部にある [ Settings] をクリックします。
- [ Settings] で [ 認証セキュリティ] をクリックします。
- 「Enterprise access restrictions」セクションで 「Enable enterprise access restrictions」 を選びます。
前提条件
- マネージド ユーザーを含む EnterpriseでGitHub.comを使用する必要があります。
- すべてのユーザーのユーザー名が企業のショートコードに追加されている場合は、 マネージド ユーザーを含む Enterprise を使用していることがわかります。
- データ所在地付き GitHub Enterprise Cloudを使用する場合、企業はGHE.comの専用サブドメインに存在するため、ヘッダーは企業のリソースへのトラフィックを区別するために必要ありません。
- 制限を適用するには、すべてのトラフィックがプロキシまたはファイアウォールを通過する必要があります。 プロキシまたはファイアウォールには次のことが求められます。
- トラフィックをインターセプトして編集できる (一般に "中断と検査" プロキシと呼ばれます)
- 任意のヘッダー挿入をサポートする
- Enterprise 所有者がこの機能を有効にしています。
ヘッダーの検索
制限を適用するには、サポートされている特定のエンドポイントに送信されるすべてのトラフィックにヘッダーを挿入します。 ヘッダーの形式は次のとおりです。
sec-GitHub-allowed-enterprise: ENTERPRISE-ID
企業所有者は、あなたの企業用のヘッダーで使用する正しいエンタープライズIDを特定できます。
- 企業ページに移動してください。 たとえば、GitHub.com の [Enterprise] ページから。
- ページの上部にある [ Settings] をクリックします。
- [ Settings] で [ 認証セキュリティ] をクリックします。
- 「Enterprise access restrictions」セクションで、貴社の Enterprise のヘッダーを見つけてください。
ヘッダーの使用
最良の結果を得るには、次のサポートされているエンドポイントへのすべてのトラフィックにヘッダーを挿入するようにプロキシを構成します。
| エンドポイント | 目的 |
|---|---|
github.com/* | |
| GitHub.com への Web トラフィック | |
api.github.com/* | REST と GraphQL API の要求 |
*.githubcopilot.com | 特定の GitHub Copilot 機能に必要なトラフィック |
これにより、このネットワーク上のユーザーは、この Enterprise によって所有されていないユーザー アカウントを使って、これらのエンドポイントにアクセスできなくなります。 この機能に加えて、IP 許可リストを設定して、このネットワークの外部からのトラフィックをブロックできます。 「IP 許可リストを使用して Enterprise へのネットワーク トラフィックを制限する」を参照してください。
メモ
サポート チケットを作成するには、github.com/login へのアクセスが必要です。 サポートの資格を持つユーザーがヘルプを要求できるようにするには、これらのユーザーを制限から除外できます。
複数の企業のアクセス制限を有効にする
エンタープライズ所有者は、複数のエンタープライズ アカウントに制限を適用できます。
- 各エンタープライズ アカウントの機能を有効にします。 アクセス制限の有効化を参照してください。
- サポートされている特定のエンドポイントに送信されるすべてのトラフィックにヘッダーを挿入します。 ヘッダーの形式は次のとおりです。
sec-GitHub-allowed-enterprise: ENTERPRISE1-ID, ENTERPRISE2-ID, ENTERPRISE3-ID ... ENTERPRISE20-ID.
エンタープライズ所有者は、各企業のヘッダーで使用する正しいエンタープライズ ID を見つけることができます。 ヘッダーの検索を参照してください。
メモ
現在、ヘッダーに含める一意のエンタープライズ ID は最大 20 個までサポートされています。
特定のユーザーに対する制限の解除
個人アカウントを使ってオープンソース リソースに参加する必要がある特定のユーザーや、問題が発生した場合にサポート チケットを作成する必要があるユーザーの制限を解除できます。 これを処理するには、制限するユーザーにのみヘッダーを挿入するようにネットワークを構成する必要があります。
次のオプションがあります。
- ネットワークの分離: ヘッダーを挿入する "作業" ネットワークと、挿入しない "オープンソース" ネットワークを作成します。 "オープンソース" ネットワークへのアクセスは、それを必要とするユーザーに制限します。
- デバイスのグループ化: プロキシまたはファイアウォールで認証が行われる場合は、ヘッダーを必要としないユーザーのグループを収集して、挿入から選択的に除外できます。
サポートされていない機能
この制限は、エンタープライズ ヘッダーを追加するプロキシ経由で送信される要求にのみ適用されるため、特定の GitHub 機能では、ユーザーが自分の個人アカウントにアクセスまたは使用できないようにする制限はサポートされていません。 ネットワーク上のユーザーがこれらの機能にアクセスできないようにするには、以下で説明する変更を行う必要があります。
| 機能 | 関連するエンドポイント | メモ |
|---|---|---|
| GitHub Pages | github.io | これは通常、データを受け入れることができないユーザー生成コンテンツです。 アクセスを制限したくない場合があります。 |
| GitHub Codespaces | github.dev | アクセスを制限するには、エンドポイント全体をブロックします。 |
| SSH アクセス | ||
| GitHub.com のポート 22 | アクセスを制限するには、エンドポイント全体をブロックします。 | |
| HTTPS 経由の SSH | ssh.github.com | アクセスを制限するには、エンドポイント全体をブロックします。 |
| GitHubホステッド ランナー | 各種 | 特定のルーティングを適用するには、Azure プライベート ネットワークを使います。 「GitHubホストランナーのための企業内Azureプライベートネットワークについて」を参照してください。 |
| セルフホステッド・ランナー | 各種 | 特定のルーティングを適用するには、プロキシ サーバーを使用します。 「ランナーでのプロキシサーバの使用」を参照してください。 |
制限する必要がないエンドポイント
次のエンドポイントは、データを提供するだけであって、受け入れないため、制限をサポートまたは必要としません。
*.githubusercontent.com*.githubassets.com- WebSocket トラフィック(GitHub.com 上)
制限のしくみ
エンタープライズ ヘッダーを含むトラフィックの場合、ユーザーが企業のメンバーではないユーザー アカウント (またはユーザー アカウントに関連付けられたトークン) を使用して、Web、Git、または API を介して GitHub.com にアクセスしようとしたとき。
- ユーザーには、
403状態コードを含むエラー メッセージが表示されます。 「ブロックされたユーザーに表示されるエラー」をご覧ください。 business.proxy_security_header_unsatisfiedイベントが Enterprise 監査ログに記録されます。 これらのログ イベントには、プライバシー上の理由からactorフィールドは含まれませんが、actor_ipフィールドは、有効になっている場合は含まれます (「Enterprise の監査ログに IP アドレスを表示する」を参照)。 これらのイベントをさらに調査するには、環境内のプロキシ ログを確認できます。
以下のセクションでは、ユーザーの Web アクティビティと API 要求に適用されることが予想される動作について詳しく説明します。
Web アクティビティ
GitHub.com ユーザー インターフェイスのアクティビティの場合、ヘッダーはユーザーがサインインできるアカウントを制限します。
ネットワーク接続中、ユーザーは以下の操作を行います。
- 企業内の**** にサインインマネージド ユーザー アカウント。
- この Enterprise の外部のアカウントにはサインインできません。
- アカウント スイッチャーを使ってこの Enterprise の外部のアカウントに切り替えることはできません。
ユーザーが既に企業外のアカウントにサインインしている場合 (たとえば、ネットワークの外部でサインインしている場合)、ユーザーがデバイスをネットワークに持ち込むと、エラーが発生し、エンタープライズ所有のアカウントでサインインするまで GitHub.com にアクセスできなくなります。
Git アクティビティ
プロキシが HTTP(S) 要求にヘッダーを挿入するように構成されている場合、ネットワーク上のユーザーは、企業のメンバーでない限り、HTTP (S) 経由で GitHub.com への認証がブロックされます。 認証されていない匿名ユーザーのパブリック読み取り要求はブロックされません。
Enterprise ヘッダーを使って SSH 経由の Git アクティビティを制限することはできません。 代わりに、SSH 要求のポートを完全にブロックできます。 「サポートされていない機能」をご覧ください。
API 要求
GitHub CLI経由の要求を含む、api.github.com への REST および GraphQL API トラフィックの場合、ヘッダーは、ユーザーがネットワークに接続されている間のアクセス トークンの使用を制限します。
| シナリオ | 結果 | 影響を受けるトークンの種類 |
|---|---|---|
| ユーザーは、企業が所有するアカウントに関連付けられている personal access token を使用します。 | ||
| personal access tokenは、API 要求で想定どおりに動作します。 | ||
ghp_ および github_pat_ | ||
| ネットワークに接続している間、ユーザーは企業外のユーザーに関連付けられている personal access token を使用しようとします。 | トークンを用いた要求はブロックされます。 | |
ghp_ および github_pat_ | ||
| ユーザーは、このネットワークの外部にいる間に、この Enterprise の外部のアカウントを使って、自分のデバイスで動いている OAuth アプリにサインインします。 その後、ユーザーはそのデバイスをこのネットワーク内に持ち込みます。 | アプリからの OAuth トークンは動作しなくなります。 | gho_ |
| ネットワークの外部では、企業外のアカウントを使用して、ユーザーはデバイスで実行される GitHub App にサインインします。 その後、ユーザーはそのデバイスをこのネットワーク内に持ち込みます。 | アプリからのトークンは動作しなくなります。 | ghu_ |
| ネットワークに接続されている間、アプリケーションは、 GitHub App 更新トークンを使用して、企業外のユーザーのセッションを更新しようとします。 | 更新は失敗します。 | ghr_ |
| アプリケーションは、このネットワークに接続されている間に、この Enterprise の外部の organization のインストール トークン (ユーザー ID のないトークン、アプリの ID のみ) を取得しようとします。 | トークンは機能しません。 | ghs_ |
ブロックされたユーザーに表示されるエラー
制限が意図したとおりに動作すると、エラーがユーザーに表示されます。 エラーは、次の状況で発生します。
- Web アクティビティ: ユーザーが、既存の古いセッションへのサインインまたはその使用をブロックされたとき。
- API アクティビティ: ユーザーが、Enterprise の外部のユーザーに関連付けられているトークンを使おうとしたとき。
- インストール トークン: アプリケーションがインストール トークンを使って、Enterprise の外部の organization またはユーザー アカウントにアクセスしようとしたとき。 インストールの場合、書き込み要求のみがブロックされます。 Enterprise の外部のリソースに対する読み取り要求はブロックされません。 インストール トークンについて詳しくは、「GitHub App インストールとしての認証」をご覧ください。
| シナリオ | エラー コード | メッセージ |
|---|---|---|
| Web アクティビティ | 403 | ネットワーク管理者が、GitHub Enterprise を除くENTERPRISEへのアクセスをブロックしました。 |
_SHORTCODEにアクセスするには、GitHub アカウントでサインインしてください。 | ||
| API アクティビティ | 403 | ネットワーク管理者が、GitHub Enterprise を除くENTERPRISEへのアクセスをブロックしました。 |
_SHORTCODEにアクセスするには、GitHub 企業のユーザーのトークンを使用してください。 | ||
| インストール トークン | 403 | ネットワーク管理者が、GitHub Enterprise を除くENTERPRISEへのアクセスをブロックしました。 "SHORTCODE" 企業のトークンのみが GitHubにアクセスできます。 |
400 コードのエラーは、構成でのエラーを示します。
トラブルシューティングに関するページを参照します。
ローカル環境でのテストの例
Web デバッグ ツールを使って、ローカル環境でネットワーク構成をテストできます。 このセクションでは、Fiddler を使う例を示します。 Fiddler やその他の外部デバッグ ツールは、**** のスコープGitHub のサポートことに注意してください。
次の例では、すべての要求で実行する FiddlerScript をいくつか追加します。
-
Fiddlerをインストールします。
-
HTTPS トラフィックの暗号を解除するように Fiddler を構成します。 Fiddler のドキュメントをご覧ください。
-
Fiddler で [FiddlerScript] タブに移動し、次のコードを
OnBeforeRequest関数に追加します。enterpriseId変数をご自分の Enterprise ID に設定します。JavaScript // Your enterprise id var enterpriseId: String = "YOUR-ID"; //Inject on the web UI if (oSession.HostnameIs("github.com")){ oSession.oRequest.headers.Add("sec-GitHub-allowed-enterprise",enterpriseId) oSession["ui-color"] = "green"; } // Inject on API calls if (oSession.HostnameIs("api.github.com")){ oSession.oRequest.headers.Add("sec-GitHub-allowed-enterprise",enterpriseId) oSession["ui-color"] = "blue"; } // Inject on Copilot API calls if (oSession.HostnameIs("githubcopilot.com")){ oSession.oRequest.headers.Add("sec-GitHub-allowed-enterprise",enterpriseId) oSession["ui-color"] = "yellow"; }// Your enterprise id var enterpriseId: String = "YOUR-ID"; //Inject on the web UI if (oSession.HostnameIs("github.com")){ oSession.oRequest.headers.Add("sec-GitHub-allowed-enterprise",enterpriseId) oSession["ui-color"] = "green"; } // Inject on API calls if (oSession.HostnameIs("api.github.com")){ oSession.oRequest.headers.Add("sec-GitHub-allowed-enterprise",enterpriseId) oSession["ui-color"] = "blue"; } // Inject on Copilot API calls if (oSession.HostnameIs("githubcopilot.com")){ oSession.oRequest.headers.Add("sec-GitHub-allowed-enterprise",enterpriseId) oSession["ui-color"] = "yellow"; } -
[Save script] をクリックします。
パケット キャプチャがアクティブになっている間、指定した各ドメインにヘッダーが挿入されるようになります。 挿入を有効または無効にするには、[File] > [Capture Traffic] をクリックして、パケット キャプチャを切り替えることができます。
この挿入のオンとオフを切り替えて、許可されていないアカウントでサインインしてからのネットワークへのアクセスや、ネットワーク上にいる間の許可されていないアカウントへのサインインの試みを、シミュレートできます。
トラブルシューティング
ヘッダーの挿入が意図したとおりに動作していない場合、影響を受けるエンドポイントを使おうとすると、400 コードのエラーが表示されます。 これらは、機能が意図したとおりに動作しているときに表示される 403 エラーとは異なります (「ブロックされたユーザーに表示されるエラー」を参照)。
一般に、400 エラーは次の状況で発生します。
- ヘッダーに無効なスラッグまたはエンタープライズ識別子が使用されています。
- ヘッダーで複数の Enterprise がリストされています。
- 要求に複数の
sec-GitHub-allowed-enterpriseヘッダーが含まれています。
| シナリオ | エラー コード | メッセージ |
|---|---|---|
| 無効なスラッグまたは ID | 400 | |
sec-Git ヘッダーで名前が指定されている Enterprise が見つかりません。 ファイアウォールまたはプロキシの設定で "Enterprise スラッグ" が正しく入力されていることを確認してください。 このエラーが解決しない場合は、ネットワーク管理者に問い合わせてください。 | ||
| 複数の企業 | 400 | |
sec-Git ヘッダーで使用できる Enterprise は 1 つだけです。 企業とヘッダーが1つだけ提供されていることを確認してください。 この問題が解決しない場合は、ネットワーク管理者に問い合わせてください | ||
| 複数のヘッダー | 400 | 複数の sec-Git を受信しました。 このヘッダーは、1 つの Enterprise のみにアクセスが許可されるように、ファイアウォールまたはプロキシによって上書きされる必要があります。 この問題が解決しない場合は、ネットワーク管理者に問い合わせてください。 |