Skip to main content

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

監査イベントと Git イベントのデータを GitHub から外部データ管理システムにストリーミングする方法について説明します。

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

Enterprise owners

Note

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

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

ストリーミングを使用して監査ログ データのコピーを保持することで、知的財産権を保護し、会社のコンプライアンスを維持できます。 監査ログでは、設定とアクセスの変更、ユーザー メンバーシップ、アプリのアクセス許可などのイベントが詳細に表示されます。 「エンタープライズの監査ログ イベント」、「組織の監査ログ イベント」、および「セキュリティ ログのイベント」を参照してください。

監査ログ データのストリーミングには、次の利点があります。

  • データの探索。 大量のデータに対してクエリを実行するために、推奨されるツールを使用して、ストリーミングされたイベントを調べます。 ストリーミングには、Enterprise アカウント全体の監査イベントと Git イベントの両方が含まれます。
  • データの継続性。 ストリームを一時停止する場合、バッファーが 7 日間保持されるため、最初の 1 週間はデータが失われません。 ストリームが 7 日間より長く一時停止し続けた場合、現在の時刻の 1 週間前の時点から再開します。 3 週間以上一時停止した場合、ストリームはデータを保持せず、現在のタイムスタンプから新たに開始します。
  • データ保有。 エクスポートされた監査ログと Git イベント データを必要な期間だけ保持します。

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

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

Note

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

監査ログ ストリームの正常性のチェック

24 時間ごとに、正常性チェックが各ストリームに実行されます。 ストリームが正しく設定されていない場合、エンタープライズ所有者に電子メールが送信されます。 監査ログ イベントがストリームから削除されないようにするには、誤って構成されたストリームを 6 日以内に修正することが必要です。

ストリーミング構成を修正するには、「監査ログ ストリーミングの設定」の手順に従います。

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

監査ログ ストリームを設定するには、プロバイダーの指示に従います。

Note

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

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

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

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

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

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

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

AWS から:

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

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

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

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

GitHub から:

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

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

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

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

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

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

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

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

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

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

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

AWS から:

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

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

  3. GitHub によるバケットへの書き込みを許可するポリシーを作成します。 次の JSON をコピーし、EXAMPLE-BUCKET をバケットの名前に置き換えます。 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) を記録しておきます。

GitHub から:

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

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

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

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

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

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

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

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

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

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

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

OIDC を使用した S3 へのストリーミングを無効にするには、ストリーミングの設定時に AWS で作成した GitHub OIDC プロバイダーを削除します。 AWS ドキュメントの「OpenID Connect (OIDC) ID プロバイダーの作成」をご覧ください。

OIDC のセキュリティの脆弱性のためにストリーミングを無効にした場合は、プロバイダーを削除した後、脆弱性が解決されるまでアクセス キーを使用してストリーミングを設定します。 「アクセス キーを使用して S3 へのストリーミングを設定する」を参照してください。

AWS CloudTrail Lake との統合

S3 へのストリーミングと AWS CloudTrail Lake を統合することで、監査ログを統合できます。 AWS CloudTrail ドキュメントか、aws-samples/aws-cloudtrail-lake-github-audit-log リポジトリの「GitHub 監査ログと CloudTrail オープン監査の統合」をご覧ください。

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

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

ストリームを構成するには、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 の右上の自分のプロフィール写真をクリックし、[自分の 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 を使用したイベント ハブの作成」を参照してください。

また、イベント ハブのインスタンス名と接続文字列も必要です。

Microsoft Azure portal から:

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

GitHub から:

  1. GitHub の右上の自分のプロフィール写真をクリックし、[自分の 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 の右上の自分のプロフィール写真をクリックし、[自分の Enterprise] をクリックします。

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

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

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

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

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

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

  10. [サイト] ドロップダウンを選び、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 の右上の自分のプロフィール写真をクリックし、[自分の 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 ドキュメントの「Splunk Web で HTTP Event Collector を設定および作成する」を参照してください。

Note

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

  1. GitHub の右上の自分のプロフィール写真をクリックし、[自分の 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 の右上の自分のプロフィール写真をクリックし、[自分の Enterprise] をクリックします。

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

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

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

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

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

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

ストリーミングを再開するには、[ストリームを再開する] をクリックします。

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

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

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

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

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

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

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

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

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

Note

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

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

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

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

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

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

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

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