Skip to main content

企業プロキシを使用して GitHub.com へのアクセスを制限する

ユーザーが個人アカウントを使用して GitHub.com にアクセスできないようにプロキシを構成します。

この機能を使用できるユーザーについて

Enterprises with Enterprise Managed Users on GitHub.com

Note

現在、GitHub.com へのアクセスの制限のヘッダーは パブリック プレビュー 段階であり、変更される可能性があります。 通常、GitHub サポートではプレビュー リリースはサポートされていませんが (「機能プレビューで早期アクセスリリースに触れる」を参照してください)、パブリック プレビュー 段階の間、この機能は GitHub サポートによってサポートされています。

Enterprise Managed Users をお使いの場合、このネットワーク上のユーザーがこの Enterprise のメンバーではないアカウントを使って GitHub.com への認証を行うのをブロックできます。 これは、会社のデータが一般に公開されるリスクを減らすのに役立ちます。

この制限を適用するには、GitHub.com へのユーザーの Web と API の要求にヘッダーを挿入するよう、ネットワーク プロキシまたはファイアウォールを構成します。

この機能には、外部のファイアウォールまたはプロキシが必要です。 GitHub Support は、このような外部ツールのセットアップやトラブルシューティングを支援できません。 サポートの範囲について詳しくは、「GitHub Supportについて」をご覧ください。

アクセス権の要求

この機能は、規定では有効ではありません。 アクセスを要求するには、GitHub の営業チームのアカウント マネージャーに問い合わせるか、こちらでサインアップしてください。

前提条件

  • GitHub.com 上の マネージド ユーザーを含む Enterprise を使う必要があります。
    • すべてのユーザーのユーザー名の後に Enterprise のショートコードが追加されている場合、マネージド ユーザーを含む Enterprise を使っていることがわかります。
    • データ所在地付き GitHub Enterprise Cloud をお使いの場合、Enterprise は GHE.com の専用サブドメインに存在するため、Enterprise のリソースへのトラフィックを区別するためにヘッダーは必要ありません。
  • 制限を適用するには、すべてのトラフィックがプロキシまたはファイアウォールを通過する必要があります。 プロキシまたはファイアウォールには次のことが求められます。
    • トラフィックをインターセプトして編集できる (一般に "中断と検査" プロキシと呼ばれます)
    • 任意のヘッダー挿入をサポートする
  • GitHub で、この機能へのアクセスを許可している必要があります。

ヘッダーの検索

制限を適用するには、サポートされている特定のエンドポイントに送信されるすべてのトラフィックにヘッダーを挿入します。 ヘッダーの形式は次のとおりです。

sec-GitHub-allowed-enterprise: ENTERPRISE-ID

Enterprise 所有者は、Enterprise 用のヘッダーで使用する正しい Enterprise ID を確認できます。

  1. GitHub の右上隅にあるプロフィール写真をクリックして、[Your enterprise] をクリックします。
  2. ページの左側にある Enterprise アカウントのサイドバーで、 [設定] をクリックします。
  3. [設定] で、 [認証セキュリティ] をクリックします。
  4. [Enterprise access restrictions] セクションで、ご自分の Enterprise のヘッダーを見つけます。 このセクションは、この機能が有効になっている Enterprise に対してのみ表示されます。

ヘッダーの使用

最良の結果を得るには、次のサポートされているエンドポイントへのすべてのトラフィックにヘッダーを挿入するようにプロキシを構成します。

エンドポイントパーパス
github.com/*GitHub.com への Web トラフィック
api.github.com/*REST と GraphQL API の要求
*.githubcopilot.com特定の GitHub Copilot 機能に必要なトラフィック

これにより、このネットワーク上のユーザーは、この Enterprise によって所有されていないユーザー アカウントを使って、これらのエンドポイントにアクセスできなくなります。 この機能に加えて、IP 許可リストを設定して、このネットワークの外部からのトラフィックをブロックできます。 「IP 許可リストを使用して Enterprise へのネットワーク トラフィックを制限する」を参照してください。

Note

サポート チケットを作成するには、github.com/login へのアクセスが必要です。 サポートの資格を持つユーザーがヘルプを要求できるようにするには、これらのユーザーを制限から除外できます。

特定のユーザーに対する制限の解除

個人アカウントを使ってオープンソース リソースに参加する必要がある特定のユーザーや、問題が発生した場合にサポート チケットを作成する必要があるユーザーの制限を解除できます。 これを処理するには、制限するユーザーにのみヘッダーを挿入するようにネットワークを構成する必要があります。

次のオプションがあります。

  • ネットワークの分離: ヘッダーを挿入する "作業" ネットワークと、挿入しない "オープンソース" ネットワークを作成します。 "オープンソース" ネットワークへのアクセスは、それを必要とするユーザーに制限します。
  • デバイスのグループ化: プロキシまたはファイアウォールで認証が行われる場合は、ヘッダーを必要としないユーザーのグループを収集して、挿入から選択的に除外できます。

サポートされていない機能

この制限は、Enterprise ヘッダーを追加するプロキシを介して送信される要求にのみ適用されるため、特定の GitHub 機能では、ユーザーによる自分の個人アカウントへのアクセスやその使用をブロックする制限はサポートされていません。 このネットワーク上のユーザーがこれらの機能にアクセスするのをブロックするには、以下で説明する変更を行う必要があります。

機能関連するエンドポイントメモ
GitHub Pagesgithub.ioこれは通常、データを受け入れることができないユーザー生成コンテンツです。 アクセスを制限したくない場合があります。
GitHub Codespacesgithub.devアクセスを制限するには、エンドポイント全体をブロックします。
SSH アクセスGitHub.com のポート 22アクセスを制限するには、エンドポイント全体をブロックします。
GitHub ホステッド ランナー各種特定のルーティングを適用するには、Azure プライベート ネットワークを使います。 「企業内の GitHub ホストランナー向けの Azure プライベート ネットワークについて」を参照してください。

制限する必要がないエンドポイント

次のエンドポイントは、データを提供するだけであって、受け入れないため、制限をサポートまたは必要としません。

  • *.githubusercontent.com
  • *.githubassets.com
  • GitHub.com 上の WebSocket トラフィック

制限のしくみ

Enterprise ヘッダーを含むトラフィックの場合、ユーザーが、Enterprise のメンバーではないユーザー アカウント (またはユーザー アカウントに関連付けられているトークン) を使って、Web、Git、または API 経由で GitHub.com にアクセスしようとすると、次のようになります。

  • ユーザーには、403 状態コードを含むエラー メッセージが表示されます。 「ブロックされたユーザーに表示されるエラー」をご覧ください。
  • business.proxy_security_header_unsatisfied イベントが Enterprise 監査ログに記録されます。 これらのログ イベントには、プライバシー上の理由から actor フィールドは含まれませんが、actor_ip フィールドは、有効になっている場合は含まれます (「Enterprise の監査ログに IP アドレスを表示する」を参照)。 これらのイベントをさらに調査するには、環境内のプロキシ ログを確認できます。

以下のセクションでは、ユーザーの Web アクティビティと API 要求に適用されることが予想される動作について詳しく説明します。

Web アクティビティ

GitHub.com ユーザー インターフェイスでのアクティビティの場合、ヘッダーはユーザーがサインインできるアカウントを制限します。

ネットワーク上で、ユーザーは次のようになります。

  • この Enterprise 内の マネージド ユーザー アカウント にはサインインできます
  • この Enterprise の外部のアカウントにはサインインできません
  • アカウント スイッチャーを使ってこの Enterprise の外部のアカウントに切り替えることはできません

ユーザーが既にこの Enterprise の外部のアカウントにサインインしている場合 (たとえば、このネットワークの外部にいる間にサインインした場合)、ユーザーがデバイスをこのネットワークに持ち込むと、ユーザーはエラーを受け取り、Enterprise 所有のアカウントでサインインするまで GitHub.com にアクセスすることはできません。

Git アクティビティ

プロキシが HTTP(S) 要求にヘッダーを挿入するように構成されている場合、このネットワーク上のユーザーは、この Enterprise のメンバーでない限り、HTTP(S) での GitHub.com への認証をブロックされます。 認証されていない匿名ユーザーのパブリック読み取り要求はブロックされません。

Enterprise ヘッダーを使って SSH 経由の Git アクティビティを制限することはできません。 代わりに、SSH 要求のポートを完全にブロックできます。 「サポートされていない機能」をご覧ください。

API 要求

GitHub CLI による要求を含め、api.github.com への REST および GraphQL API トラフィックの場合、ユーザーがこのネットワークに接続されている間、ヘッダーはアクセス トークンの使用を制限します。

シナリオ結果影響を受けるトークンの種類
ユーザーは、この Enterprise が所有するアカウントに関連付けられている personal access token を使います。personal access token は、API 要求では想定どおりに動作します。ghp_ および github_pat_
ユーザーは、このネットワークに接続している間に、この Enterprise の外部のユーザーに関連付けられている personal access token の使用を試みます。トークンを用いた要求はブロックされます。ghp_ および github_pat_
ユーザーは、このネットワークの外部にいる間に、この Enterprise の外部のアカウントを使って、自分のデバイスで動いている OAuth アプリにサインインします。 その後、ユーザーはそのデバイスをこのネットワーク内に持ち込みます。アプリからの OAuth トークンは動作しなくなります。gho_
ユーザーは、このネットワークの外部にいる間に、この Enterprise の外部のアカウントを使って、自分のデバイスで動いている GitHub App にサインインします。 その後、ユーザーはそのデバイスをこのネットワーク内に持ち込みます。アプリからのトークンは動作しなくなります。ghu_
アプリケーションは、このネットワークに接続されている間に、GitHub App 更新トークンを使って、この Enterprise の外部のユーザーのセッションを更新しようとします。更新は失敗します。ghr_
アプリケーションは、このネットワークに接続されている間に、この Enterprise の外部の organization のインストール トークン (ユーザー ID のないトークン、アプリの ID のみ) を取得しようとします。トークンは機能しません。ghs_

ブロックされたユーザーに表示されるエラー

制限が意図したとおりに動作すると、エラーがユーザーに表示されます。 エラーは、次の状況で発生します。

  • Web アクティビティ: ユーザーが、既存の古いセッションへのサインインまたはその使用をブロックされたとき。
  • API アクティビティ: ユーザーが、Enterprise の外部のユーザーに関連付けられているトークンを使おうとしたとき。
  • インストール トークン: アプリケーションがインストール トークンを使って、Enterprise の外部の organization またはユーザー アカウントにアクセスしようとしたとき。 インストールの場合、書き込み要求のみがブロックされます。 Enterprise の外部のリソースに対する読み取り要求はブロックされません。 インストール トークンについて詳しくは、「GitHub App インストールとしての認証」をご覧ください。
シナリオエラー コードMessage
Web アクティビティ403ネットワーク管理者が、ENTERPRISE Enterprise の場合を除き、GitHub へのアクセスをブロックしています。 GitHub にアクセスするには、ご自分の _SHORTCODE アカウントでサインインしてください。
API アクティビティ403ネットワーク管理者が、ENTERPRISE Enterprise の場合を除き、GitHub へのアクセスをブロックしています。 GitHub にアクセスするには、_SHORTCODE Enterprise からユーザーへのトークンをお使いください。
インストール トークン403ネットワーク管理者が、ENTERPRISE Enterprise の場合を除き、GitHub へのアクセスをブロックしています。 "SHORTCODE" Enterprise に対するトークンのみが GitHub にアクセスできます。

400 コードのエラーは、構成でのエラーを示します。 トラブルシューティングに関するページを参照します。

ローカル環境でのテストの例

Web デバッグ ツールを使って、ローカル環境でネットワーク構成をテストできます。 このセクションでは、Fiddler を使う例を示します。 Fiddler や他の外部デバッグ ツールは、GitHub Support の対象ではないことに注意してください。

次の例では、すべての要求で実行する FiddlerScript をいくつか追加します。

  1. Fiddlerをインストールします。

  2. HTTPS トラフィックの暗号を解除するように Fiddler を構成します。 Fiddler のドキュメントをご覧ください。

  3. 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";
     }
    
  4. [Save script] をクリックします。

パケット キャプチャがアクティブになっている間、指定した各ドメインにヘッダーが挿入されるようになります。 挿入を有効または無効にするには、[File] > [Capture Traffic] をクリックして、パケット キャプチャを切り替えることができます。

この挿入のオンとオフを切り替えて、許可されていないアカウントでサインインしてからのネットワークへのアクセスや、ネットワーク上にいる間の許可されていないアカウントへのサインインの試みを、シミュレートできます。

トラブルシューティング

ヘッダーの挿入が意図したとおりに動作していない場合、影響を受けるエンドポイントを使おうとすると、400 コードのエラーが表示されます。 これらは、機能が意図したとおりに動作しているときに表示される 403 エラーとは異なります (「ブロックされたユーザーに表示されるエラー」を参照)。

一般に、400 エラーは次の状況で発生します。

  • ヘッダーで無効なスラッグまたは Enterprise ID が使われています。
  • ヘッダーで複数の Enterprise がリストされています。
  • 要求に複数の sec-GitHub-allowed-enterprise ヘッダーが含まれています。
シナリオエラー コードMessage
無効なスラッグまたは ID400sec-GitHub-allowed-enterprise ヘッダーで名前が指定されている Enterprise が見つかりません。 ファイアウォールまたはプロキシの設定で "Enterprise スラッグ" が正しく入力されていることを確認してください。 このエラーが解決しない場合は、ネットワーク管理者に問い合わせてください。
複数の Enterprise400sec-GitHub-allowed-enterprise ヘッダーで使用できる Enterprise は 1 つだけです。 Enterprise とヘッダーが 1 つだけ指定されていることを確認してください。 この問題が解決しない場合は、ネットワーク管理者に問い合わせてください
複数のヘッダー400複数の sec-GitHub-allowed-enterprise を受信しました。 このヘッダーは、1 つの Enterprise のみにアクセスが許可されるように、ファイアウォールまたはプロキシによって上書きされる必要があります。 この問題が解決しない場合は、ネットワーク管理者に問い合わせてください。

参考資料