Skip to main content

Enterprise の監査ログのストリーミング

監査イベントと Git イベントのデータを GitHub から外部のデータ管理システムにストリーミングできます。

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

Enterprise owners can configure audit log streaming.

注: Webhook は、特定のユース ケースの監査ログまたは API ポーリングの代替策として適している場合があります。 Webhook は、リポジトリ、Organization、または Enterprise で特定のイベントが発生したときに GitHub がサーバーに通知する方法です。 Enterprise、Organization、またはリポジトリで特定のイベントが発生したときに学習してログを記録するだけの場合、API や監査ログの検索と比較して、Webhook がより効率的である可能性があります。 詳しくは、「Webhook ドキュメント」を参照してください。

監査ログのストリーミングについて

知的財産権を保護し、会社のコンプライアンスを維持するために、ストリーミングを使用して監査ログ データのコピーを保持できます。 監査ログでは、設定とアクセスの変更、ユーザー メンバーシップ、アプリのアクセス許可などのイベントが詳細に表示されます。 監査ログ データをストリーミングする場合は、次の利点をベネフィットできます。

  • データの探索。 大量のデータに対してクエリを実行するために、推奨されるツールを使用して、ストリーミングされたイベントを調べることができます。 ストリーミングには、Enterprise アカウント全体の監査イベントと Git イベントの両方が含まれます。
  • データの継続性。 ストリーミングは、最長 7 日間、監査データを失うことなく一時停止できます。
  • データ保有。 エクスポートされた監査ログと Git イベント データを必要な期間だけ保持できます。

Enterprise 所有者は、ストリームをいつでも設定、一時停止、または削除することができます。 ストリームは、ストリームが有効になった時点以降のアクティビティについて、企業内のすべての組織の監査イベントと Git イベント データをエクスポートします。

ストリーミングされたすべての監査ログは、圧縮された JSON ファイルとして送信されます。 ファイル名の形式は YYYY/MM/HH/MM/<uuid>.json.gz です。

: GitHub は、最低1回の配信方法を使用します。 特定のネットワークまたはシステムの問題により、一部のイベントが重複する可能性があります。

監査ログ ストリームに表示されるイベント

ストリーミングされた監査ログに表示される特定のイベントをレビューできます。 詳細については、次の記事を参照してください。

監査ログのストリーミングの設定

プロバイダーの指示に従って、GitHub Enterprise Cloud での監査ログのストリーミングを設定します。

Amazon S3 へのストリーミングの設定

アクセス キーを使用して S3 へのストリーミングを設定したり、OpenID Connect (OIDC) を使用して GitHub Enterprise Cloud に有効期間の長いシークレットを格納するのを回避したりできます。

アクセス キーを使用して S3 へのストリーミングを設定する

GitHub から監査ログのストリーミングを設定するには、次のものが必要です:

  • AWS アクセス キー ID
  • AWS 秘密鍵

アクセス キー ID と秘密鍵の作成またはアクセスについては、AWS ドキュメントの「Understanding and getting your AWS credentials」 (AWS 資格情報の理解と取得) を参照してください。

  1. AWS でバケットを作成し、バケットへのパブリック アクセスをブロックします。 詳しくは、AWS のドキュメント「Amazon S3 バケットの作成、設定、操作」をご覧ください。

  2. 次の JSON をコピーし、EXAMPLE-BUCKET を自分のバケットの名前に変えて、GitHub がバケットに書き込まれることを許可するポリシーを AWS で作成します。 GitHub では、この JSON のアクセス許可のみが必要になります。

    {
       "Version": "2012-10-17",
       "Statement": [
          {
             "Sid": "VisualEditor0",
             "Effect": "Allow",
             "Action": [
                "s3:PutObject"
             ],
             "Resource": "arn:aws:s3:::EXAMPLE-BUCKET/*"
         }
       ]
    }
    

    詳しくは、AWS のドキュメント「IAM ポリシーの作成」をご覧ください。

  3. GitHub.com の右上の自分のプロファイル写真をクリックし、 [自分の Enterprise] をクリックします。

  4. Enterpriseのリストで、表示したいEnterpriseをクリックしてください。

  5. Enterprise アカウントのサイドバーで、 [設定] をクリックします。

  6. [ 設定] で、 [監査ログ] をクリックします。

  7. [Audit log](監査ログ) の [Log streaming](ログ ストリーミング) をクリックします。

  8. [ストリームの構成] ドロップダウン メニューを選び、 [Amazon S3] をクリックします。

  9. [認証] で [アクセス キー] をクリックします。

  10. ストリームの設定を構成します。

    • [バケット] に、ストリーミング先のバケットの名前を入力します。 たとえば、auditlog-streaming-test のようにします。
    • [アクセス キー ID] に、アクセス キーの ID を入力します。 たとえば、ABCAIOSFODNN7EXAMPLE1 のようにします。
    • [シークレット キー] に、シークレット キーを入力します。 たとえば、aBcJalrXUtnWXYZ/A1MDENG/zPxRfiCYEXAMPLEKEY のようにします。
  11. GitHub で Amazon S3 エンドポイントに接続して書き込めることを確認するには、 [Check endpoint](エンドポイントのチェック) をクリックします。

  12. エンドポイントを正常に確認したら、 [保存] をクリックします。

OpenID Connect を使用して S3 へのストリーミングを設定する

  1. AWS では、GitHub の OIDC プロバイダーを IAM に追加します。 詳しくは、AWS のドキュメント「OpenID Connect (OIDC) ID プロバイダーの作成」をご覧ください。

    • プロバイダーの URL には、https://oidc-configuration.audit-log.githubusercontent.com を使います。
    • [対象者] には、sts.amazonaws.com を使います。
  2. AWS でバケットを作成し、バケットへのパブリック アクセスをブロックします。 詳しくは、AWS のドキュメント「Amazon S3 バケットの作成、設定、操作」をご覧ください。

  3. 次の JSON をコピーし、EXAMPLE-BUCKET を自分のバケットの名前に変えて、GitHub がバケットに書き込まれることを許可するポリシーを AWS で作成します。 GitHub では、この JSON のアクセス許可のみが必要になります。

    {
       "Version": "2012-10-17",
       "Statement": [
          {
             "Sid": "VisualEditor0",
             "Effect": "Allow",
             "Action": [
                "s3:PutObject"
             ],
             "Resource": "arn:aws:s3:::EXAMPLE-BUCKET/*"
         }
       ]
    }
    

    詳しくは、AWS のドキュメント「IAM ポリシーの作成」をご覧ください。

  4. GitHub IdP のロールと信頼ポリシーを構成します。 詳しくは、AWS のドキュメント「ウェブ ID または OpenID Connect フェデレーション用のロールを作成する (コンソール)」をご覧ください。

    • 上で作成したアクセス許可ポリシーを追加して、バケットへの書き込みを許可します。

    • 信頼関係を編集して、sub フィールドを検証条件に追加し、ENTERPRISE を自分の Enterprise の名前に置き換えます。

      "Condition": {
         "StringEquals": {
            "oidc-configuration.audit-log.githubusercontent.com:aud": "sts.amazonaws.com",
            "oidc-configuration.audit-log.githubusercontent.com:sub": "https://github.com/ENTERPRISE"
          }
       }
      
    • 作成されたロールの Amazon Resource Name (ARN) を記録しておきます。

  5. GitHub.com の右上の自分のプロファイル写真をクリックし、 [自分の Enterprise] をクリックします。

  6. Enterpriseのリストで、表示したいEnterpriseをクリックしてください。

  7. Enterprise アカウントのサイドバーで、 [設定] をクリックします。

  8. [ 設定] で、 [監査ログ] をクリックします。

  9. [Audit log](監査ログ) の [Log streaming](ログ ストリーミング) をクリックします。

  10. [ストリームの構成] ドロップダウン メニューを選び、 [Amazon S3] をクリックします。

  11. [認証] の [OpenID Connect] をクリックします。

  12. ストリームの設定を構成します。

    • [バケット] に、ストリーミング先のバケットの名前を入力します。 たとえば、auditlog-streaming-test のようにします。
    • [ARN ロール] に、前に記録した ARN ロールを入力します。 たとえば、arn:aws::iam::1234567890:role/github-audit-log-streaming-role のようにします。
  13. GitHub で Amazon S3 エンドポイントに接続して書き込めることを確認するには、 [Check endpoint](エンドポイントのチェック) をクリックします。

  14. エンドポイントを正常に確認したら、 [保存] をクリックします。

OpenID Connect を使用して S3 へのストリーミングを無効にする

OIDC のセキュリティ脆弱性を検出したなど、何らかの理由で OIDC を使用した S3 へのストリーミングを無効にする場合は、ストリーミングの設定時に AWS で作成した GitHub OIDC プロバイダーを削除します。 詳しくは、AWS のドキュメント「OpenID Connect (OIDC) ID プロバイダーの作成」をご覧ください。

その後は、脆弱性が解決されるまで、アクセス キーを使用してストリーミングを設定します。 詳しい情報については、「アクセス キーを使用して S3 へのストリーミングを設定する」を参照してください。

AWS CloudTrail Lake との統合

監査ログの S3 ストリーミングを AWS CloudTrail Lake と統合することで、GitHub Enterprise Cloud からの監査ログは AWS アクティビティ ログと連結できます。 詳しくは、AWS CloudTrail ドキュメントか、aws-samples/aws-cloudtrail-lake-github-audit-log リポジトリの「GitHub 監査ログと CloudTrail オープン監査の統合」をご覧ください。

Azure Blob Storage へのストリーミングの設定

GitHub でのストリーミングを設定する前に、まず、Microsoft Azure でストレージ アカウントとコンテナーを作成しておく必要があります。 詳細については、Microsoft のドキュメント「Azure Blob Storage の概要」を参照してください。

GitHub でストリーミングを構成するには、SAS トークンの URL が必要です。

Microsoft Azure portal で次の操作を行います。

  1. [ホーム] ページで、 [ストレージ アカウント] をクリックします。
  2. [名前] で、使用するストレージ アカウントの名前をクリックします。
  3. [データ ストレージ] で、 [コンテナー] をクリックします。
  4. 使用するコンテナーの名前をクリックします。
  5. 左側のサイドバーの [設定] で、 [共有アクセス トークン] をクリックします。
  6. [アクセス許可] ドロップダウン メニューを選択し、CreateWrite を選択して他のすべてのオプションの選択を解除します。
  7. シークレット ローテーション ポリシーに準拠する有効期限を設定します。
  8. [SAS トークンおよび URL を生成] をクリックします。
  9. 表示される BLOB SAS URL フィールドの値をコピーします。 この URL を GitHub で使用します。

GitHub で次の操作を行います。

  1. GitHub.com の右上の自分のプロファイル写真をクリックし、 [自分の Enterprise] をクリックします。

  2. Enterpriseのリストで、表示したいEnterpriseをクリックしてください。

  3. Enterprise アカウントのサイドバーで、 [設定] をクリックします。

  4. [ 設定] で、 [監査ログ] をクリックします。

  5. [Audit log](監査ログ) の [Log streaming](ログ ストリーミング) をクリックします。

  6. [ストリームの構成] ドロップダウン メニューを選び、 [Azure Blob Storage] をクリックします。

  7. 構成ページで、Azure でコピーした BLOB SAS URL を入力します。 [Container] フィールドは、その URL に基づいて自動入力されます。

  8. [Check endpoint] をクリックして、GitHub で Azure Blob Storage エンドポイントに接続して書き込むことができることを確認します。

  9. エンドポイントを正常に確認したら、 [保存] をクリックします。

Azure Event Hubs へのストリーミングの設定

GitHub でのストリーミングを設定する前に、まず、Microsoft Azure でイベント ハブ名前空間が必要です。 次に、その名前空間内にイベント ハブ インスタンスを作成する必要があります。 ストリーミングを設定するときに、このイベント ハブ インスタンスの詳細が必要になります。 詳細については、Microsoft のドキュメント「クイック スタート:Azure portal を使用したイベント ハブの作成」を参照してください。

イベント ハブに関する 2 つの情報 (インスタント名と接続文字列) が必要です。

Microsoft Azure portal で次の操作を行います:

  1. ページの上部にある [Microsoft Azure] の横にある検索ボックスを使用して、"Event Hubs" を検索します。
  2. [Event Hubs] を選択します。 イベント ハブの名前が一覧表示されます。
  3. ストリーミング先のイベント ハブの名前をメモします。 イベント ハブをクリックします。
  4. 左側のメニューで、 [共有アクセス ポリシー] を選びます。
  5. ポリシーの一覧から共有アクセス ポリシーを選ぶか、新しいポリシーを作成します。
  6. [接続文字列 -主キー] フィールドから接続文字列をコピーします。

GitHub で次の操作を行います。

  1. GitHub.com の右上の自分のプロファイル写真をクリックし、 [自分の Enterprise] をクリックします。

  2. Enterpriseのリストで、表示したいEnterpriseをクリックしてください。

  3. Enterprise アカウントのサイドバーで、 [設定] をクリックします。

  4. [ 設定] で、 [監査ログ] をクリックします。

  5. [Audit log](監査ログ) の [Log streaming](ログ ストリーミング) をクリックします。

  6. [ストリームの構成] ドロップダウン メニューを選び、 [Azure Event Hubs] をクリックします。

  7. 構成ページで、次の項目を入力します:

    • Azure Event Hubs インスタンスの名前。
    • 接続文字列。
  8. [Check endpoint] をクリックして、GitHub で Azure Events Hubs エンドポイントに接続して書き込むことができることを確認します。

  9. エンドポイントを正常に確認したら、 [保存] をクリックします。

Datadog へのストリーミングの設定

Datadog へのストリーミングを設定するには、Datadog でクライアント トークンまたは API キーを作成し、次に認証用のトークンを使用して GitHub Enterprise Cloud で監査ログ ストリーミングを構成する必要があります。 Datadog でバケットやその他のストレージ コンテナーを作成する必要はありません。

Datadog へのストリーミングを設定した後は、「github.audit.streaming」でフィルター処理することで自分の監査ログ データを確認できます。 詳しくは、「ログ管理」を参照してください。

  1. まだ Datadog アカウントがない場合は、それを作成します。

  2. Datadog で、クライアント トークンまたは API キーを生成して、 [キーのコピー] をクリックします。 詳しくは、Datadog Docs の「API キーとアプリケーション キー」を参照してください。

  3. GitHub.com の右上の自分のプロファイル写真をクリックし、 [自分の Enterprise] をクリックします。

  4. Enterpriseのリストで、表示したいEnterpriseをクリックしてください。

  5. Enterprise アカウントのサイドバーで、 [設定] をクリックします。

  6. [ 設定] で、 [監査ログ] をクリックします。

  7. [Audit log](監査ログ) の [Log streaming](ログ ストリーミング) をクリックします。

  8. [ストリームの構成] ドロップダウンを選び、 [Datadog] をクリックします。

  9. [トークン] フィールドで、先ほどコピーしたトークンを貼り付けます。

  10. [サイト] ドロップダウン メニューを選び、Datadog サイトをクリックします。 ご利用の Datadog サイトを特定するには、その Datadog の URL を Datadog Docs にある Datadog サイト 内のテーブルと比較します。

  11. GitHub で Datadog エンドポイントに接続して書き込みができることを確認するには、 [エンドポイントのチェック] をクリックします。

  12. エンドポイントを正常に確認したら、 [保存] をクリックします。

  13. 数分後、Datadog の [ログ] タブに監査ログ データが表示されていることを確認します。 監査ログ データが表示されない場合は、トークンとサイトが正しいことを GitHub で確認します。

Google Cloud Storage へのストリーミングの設定

Google Cloud Storage へのストリーミングを設定するには、適切な資格情報とアクセス許可を使用して、Google Cloud にサービス アカウントを作成し、そのサービス アカウントの資格情報を認証に使用して GitHub Enterprise Cloud での監査ログのストリーミングを構成します。

  1. Google Cloud のサービス アカウントを作成します。 サービス アカウントのアクセス制御または IAM ロールを設定する必要はありません。 詳細については、Google Cloud のドキュメント「サービス アカウントの作成と管理」を参照してください。

  2. サービス アカウントの JSON キーを作成し、キーを安全に格納します。 詳細については、Google Cloud のドキュメント「サービス アカウント キーの作成と管理」を参照してください。

  3. バケットをまだ作成していない場合は、作成します。 詳細については、Google Cloud のドキュメント「ストレージ バケットの作成」を参照してください。

  4. バケットのストレージ オブジェクト作成者のロールをサービス アカウントに付与します。 詳細については、Google Cloud のドキュメント「クラウド IAM 権限を使用する」を参照してください。

  5. GitHub.com の右上の自分のプロファイル写真をクリックし、 [自分の Enterprise] をクリックします。

  6. Enterpriseのリストで、表示したいEnterpriseをクリックしてください。

  7. Enterprise アカウントのサイドバーで、 [設定] をクリックします。

  8. [ 設定] で、 [監査ログ] をクリックします。

  9. [Audit log](監査ログ) の [Log streaming](ログ ストリーミング) をクリックします。

  10. [ストリームの構成] ドロップダウン メニューを選び、 [Google Cloud Storage] をクリックします。

  11. [Bucket] で、Google Cloud Storage バケットの名前を入力します。

  12. [JSON Credentials] で、サービス アカウントの JSON キーのファイルの内容全体を貼り付けます。

  13. GitHub で Google Cloud Storage バケットに接続して書き込めることを確認するには、 [Check endpoint] をクリックします。

  14. エンドポイントを正常に確認したら、 [保存] をクリックします。

Splunk へのストリーミングの設定

監査ログを Splunk の HTTP Event Collector (HEC) エンドポイントにストリーミングするには、エンドポイントが HTTPS 接続を受け入れるように構成されていることを確認する必要があります。 詳細については、Splunk のドキュメント「Set up and use HTTP Event Collector in Splunk Web」 (Splunk Web で HTTP Event Collector を設定および作成する) を参照してください。

: GitHub では、<Domain>:port/services/collector を使用して HEC エンドポイントを検証します。 HEC エンドポイント (OpenTelemetry 経由の Splunk HEC Receiver など) をセルフホストする場合は、この目的地でエンドポイントに到達できることを確認します。

GitHub が HEC エンドポイントへの接続に使う IP アドレスの範囲の一覧を取得するには、REST API を使用できます。 GitHub Enterprise Cloud の meta エンドポイントには、IP アドレスの一覧を含む hooks キーが含まれています。 詳しくは、「メタデータ用 REST API エンドポイント」を参照してください。

  1. GitHub.com の右上の自分のプロファイル写真をクリックし、 [自分の Enterprise] をクリックします。

  2. Enterpriseのリストで、表示したいEnterpriseをクリックしてください。

  3. Enterprise アカウントのサイドバーで、 [設定] をクリックします。

  4. [ 設定] で、 [監査ログ] をクリックします。

  5. [Audit log](監査ログ) の [Log streaming](ログ ストリーミング) をクリックします。

  6. [ストリームの構成] ドロップダウン メニューを選び、 [Splunk] をクリックします。

  7. 構成ページで、次の項目を入力します:

    • ストリーミング先のアプリケーションがホストされているドメイン。

      Splunk Cloud を使っている場合、Domainhttp-inputs-<host> である必要があります。ここで、host は、Splunk Cloud で使うドメインです。 たとえば、「 http-inputs-mycompany.splunkcloud.com 」のように入力します。

      無料試用版の Splunk Cloud を使っている場合、Domaininputs.<host> である必要があります。ここで、host は、Splunk Cloud で使うドメインです。 たとえば、「inputs.mycompany.splunkcloud.com」のようにします。

    • アプリケーションでデータを受け入れるポート。

      Splunk Cloud を使っていて、ポート構成を変えない場合、Port443 にしてください。

      無料試用版の Splunk Cloud を使っている場合、Port8088 にしてください。

    • GitHub でサードパーティ アプリケーションに対する認証に使用できるトークン。

  8. [Enable SSL verification] チェック ボックスはオンのままにします。

    監査ログは常に、暗号化されたデータとしてストリーミングされます。ただし、このオプションを選択すると、GitHub によって、イベントの配信前に Splunk インスタンスの SSL 証明書が検証されます。 SSL 検証は、イベントが URL エンドポイントに安全に配信されることを保証するために役立ちます。 このオプションの選択をオフにすることはできますが、SSL 検証を有効のままにすることをお勧めします。

  9. [Check endpoint] をクリックして、GitHub で Splunk エンドポイントに接続して書き込むことができることを確認します。

  10. エンドポイントを正常に確認したら、 [保存] をクリックします。

監査ログのストリーミングの一時停止

ストリーミングを一時停止すると、監査ログ データを失うことなく、受信側のアプリケーションでメンテナンスを実行できます。 監査ログは、最長 7 日間 GitHub.com に格納され、ストリーミングの一時停止を解除するとエクスポートされます。

Datadog で受け入れるログは過去 18 時間以降のものに限られます。 Datadog エンドポイントへのストリームを 18 時間以上一時停止した場合、ストリーミングを再開した後に Datadog で受け入れられないログが失われるリスクがあります。

  1. GitHub.com の右上の自分のプロファイル写真をクリックし、 [自分の Enterprise] をクリックします。

  2. Enterpriseのリストで、表示したいEnterpriseをクリックしてください。

  3. Enterprise アカウントのサイドバーで、 [設定] をクリックします。

  4. [ 設定] で、 [監査ログ] をクリックします。

  5. [Audit log](監査ログ) の [Log streaming](ログ ストリーミング) をクリックします。

  6. 構成したストリームの右側にある [ストリームの一時停止] をクリックします。

  7. 確認メッセージが表示されます。 [Pause stream] をクリックして確定します。

アプリケーションが、監査ログを再び受信できるようになったら、 [Resume stream] をクリックして監査ログのストリーミングを再開します。

監査ログのストリーミングの削除

  1. GitHub.com の右上の自分のプロファイル写真をクリックし、 [自分の Enterprise] をクリックします。

  2. Enterpriseのリストで、表示したいEnterpriseをクリックしてください。

  3. Enterprise アカウントのサイドバーで、 [設定] をクリックします。

  4. [ 設定] で、 [監査ログ] をクリックします。

  5. [Audit log](監査ログ) の [Log streaming](ログ ストリーミング) をクリックします。

  6. [危険なゾーン] の [ストリームの削除] をクリックします。

  7. 確認メッセージが表示されます。 [Delete stream] をクリックして確定します。

API 要求の監査ログ ストリーミングの有効化

注: この機能は現在パブリック ベータ版であり、変更されることがあります。

  1. GitHub.com の右上の自分のプロファイル写真をクリックし、 [自分の Enterprise] をクリックします。

  2. Enterpriseのリストで、表示したいEnterpriseをクリックしてください。

  3. Enterprise アカウントのサイドバーで、 [設定] をクリックします。

  4. [ 設定] で、 [監査ログ] をクリックします。

  5. [監査ログ] の [設定] をクリックします。

  6. [API 要求] で、 [API 要求イベントを有効にする] を選びます。

  7. [保存] をクリックします。