GITHUB

以下でサポートされています。

このドキュメントでは、Amazon S3 を使用して GitHub 監査ログを Google Security Operations に取り込む方法について説明します。パーサーは、さまざまな grok パターンを使用して「message」フィールドからデータを抽出し、JSON 形式と JSON 以外の形式の両方を処理しようとします。抽出された「process_type」に基づいて、grok、kv、その他のフィルタを使用して特定の解析ロジックを適用し、未加工のログデータを統合データモデル(UDM)スキーマにマッピングします。

始める前に

次の前提条件を満たしていることを確認してください。

  • Google SecOps インスタンス。
  • エンタープライズ オーナー権限を持つ GitHub Enterprise Cloud テナントへの特権アクセス。
  • AWS(S3、IAM)への特権アクセス。

GitHub Enterprise Cloud の前提条件を収集する(Enterprise アクセス)

  1. GitHub Enterprise Cloud 管理コンソールにログインします。
  2. [Enterprise settings] > [Settings] > [Audit log] > [Log streaming] に移動します。
  3. 監査ログのストリーミングを構成するには、エンタープライズの所有者権限が必要です。
  4. 次の詳細をコピーして安全な場所に保存します。
    • GitHub Enterprise 名
    • 企業内の組織名

Google SecOps 用に AWS S3 バケットと Identity and Access Management を構成する

  1. バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
  2. 後で参照できるように、バケットの名前リージョンを保存します(例: github-audit-logs)。
  3. IAM ユーザーの作成のユーザーガイドに沿って、ユーザーを作成します。
  4. 作成したユーザーを選択します。
  5. [セキュリティ認証情報] タブを選択します。
  6. [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
  7. [ユースケース] として [サードパーティ サービス] を選択します。
  8. [次へ] をクリックします。
  9. 省略可: 説明タグを追加します。
  10. [アクセスキーを作成] をクリックします。
  11. [.csv ファイルをダウンロード] をクリックし、[アクセスキー] と [シークレット アクセスキー] を保存して、今後の参照に備えます。
  12. [完了] をクリックします。

GitHub S3 ストリーミングの IAM ポリシーを構成する

  1. AWS コンソールで、[IAM> ポリシー> ポリシーの作成> JSON タブ] に移動します。
  2. 次のポリシーをコピーして貼り付けます。
  3. ポリシー JSON(別のバケット名を入力した場合は github-audit-logs を置き換えます):

    {
    "Version": "2012-10-17",
    "Statement": [
        {
        "Sid": "AllowPutObjects",
        "Effect": "Allow",
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::github-audit-logs/*"
        }
    ]
    }
    
  4. [次へ] > [ポリシーを作成] をクリックします。

  5. ポリシーに GitHubAuditStreamingPolicy という名前を付けて、[ポリシーを作成] をクリックします。

  6. 先ほど作成した IAM ユーザーに戻ります。

  7. [権限] タブを選択します。

  8. [権限を追加> ポリシーを直接アタッチする] をクリックします。

  9. GitHubAuditStreamingPolicy を検索して選択します。

  10. [次へ> 権限を追加] をクリックします。

GitHub Enterprise Cloud の監査ログ ストリーミングを構成する

  1. 企業オーナーとして GitHub Enterprise Cloud にログインします。
  2. プロフィール写真をクリックし、[Enterprise settings] をクリックします。
  3. エンタープライズ アカウントのサイドバーで、[設定> 監査ログ > ログ ストリーミング] をクリックします。
  4. [ストリームを構成] を選択し、[Amazon S3] をクリックします。
  5. [認証] で [アクセスキー] をクリックします。
  6. 次の構成の詳細を入力します。
    • リージョン: バケットのリージョン(us-east-1 など)を選択します。
    • バケット: ストリーミングするバケットの名前を入力します(例: github-audit-logs)。
    • アクセスキー ID: IAM ユーザーのアクセスキー ID を入力します。
    • シークレット キー: IAM ユーザーのシークレット キーを入力します。
  7. [エンドポイントを確認] をクリックして、GitHub が Amazon S3 エンドポイントに接続して書き込むことができることを確認します。
  8. エンドポイントの検証が完了したら、[保存] をクリックします。

Google SecOps 用の読み取り専用の IAM ユーザーと鍵を作成する

  1. AWS コンソール > IAM > ユーザー > ユーザーを追加 に移動します。
  2. [ユーザーを追加] をクリックします。
  3. 次の構成の詳細を入力します。
    • ユーザー: 「secops-reader」と入力します。
    • アクセスの種類: [アクセスキー - プログラムによるアクセス] を選択します。
  4. [ユーザーを作成] をクリックします。
  5. 最小限の読み取りポリシー(カスタム)を関連付ける: [ユーザー] > [secops-reader] > [権限] > [権限を追加] > [ポリシーを直接関連付ける] > [ポリシーを作成]
  6. JSON:

    {
    "Version": "2012-10-17",
    "Statement": [
        {
        "Effect": "Allow",
        "Action": ["s3:GetObject"],
        "Resource": "arn:aws:s3:::github-audit-logs/*"
        },
        {
        "Effect": "Allow",
        "Action": ["s3:ListBucket"],
        "Resource": "arn:aws:s3:::github-audit-logs"
        }
    ]
    }
    
  7. 名前 = secops-reader-policy

  8. [ポリシーを作成> 検索/選択> 次へ> 権限を追加] をクリックします。

  9. secops-reader のアクセスキーを作成します: [セキュリティ認証情報> アクセスキー> アクセスキーを作成> .CSV をダウンロード](これらの値はフィードに貼り付けます)。

GitHub のログを取り込むように Google SecOps でフィードを構成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [+ 新しいフィードを追加] をクリックします。
  3. [フィード名] フィールドに、フィードの名前を入力します(例: GitHub audit logs)。
  4. [ソースタイプ] として [Amazon S3 V2] を選択します。
  5. [ログタイプ] として [GitHub] を選択します。
  6. [次へ] をクリックします。
  7. 次の入力パラメータの値を指定します。
    • S3 URI: s3://github-audit-logs/
    • Source deletion options: 必要に応じて削除オプションを選択します。
    • ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。
    • アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー。
    • シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー。
    • Asset namespace: アセットの名前空間
    • Ingestion labels: このフィードのイベントに適用されるラベル。
  8. [次へ] をクリックします。
  9. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
actor principal.user.userid 値は actor フィールドから取得されます。
actor_id principal.user.attribute.labels.value 値は actor_id フィールドから取得されます。
actor_ip principal.ip 値は actor_ip フィールドから取得されます。
actor_location.country_code principal.location.country_or_region 値は actor_location.country_code フィールドから取得されます。
application_name target.application 値は application_name フィールドから取得されます。
business target.user.company_name 値は business フィールドから取得されます。
business_id target.resource.attribute.labels.value 値は business_id フィールドから取得されます。
config.url target.url 値は config.url フィールドから取得されます。
created_at metadata.event_timestamp 値は UNIX ミリ秒からタイムスタンプに変換されます。
data.cancelled_at extensions.vulns.vulnerabilities.scan_end_time 値は ISO8601 形式からタイムスタンプに変換されます。
data.email target.email 値は data.email フィールドから取得されます。
data.event security_result.about.labels.value 値は data.event フィールドから取得されます。
data.events security_result.about.labels.value 値は data.events フィールドから取得されます。
data.head_branch security_result.about.labels.value 値は data.head_branch フィールドから取得されます。
data.head_sha target.file.sha256 値は data.head_sha フィールドから取得されます。
data.hook_id target.resource.attribute.labels.value 値は data.hook_id フィールドから取得されます。
data.started_at extensions.vulns.vulnerabilities.scan_start_time 値は ISO8601 形式からタイムスタンプに変換されます。
data.team target.user.group_identifiers 値は data.team フィールドから取得されます。
data.trigger_id security_result.about.labels.value 値は data.trigger_id フィールドから取得されます。
data.workflow_id security_result.about.labels.value 値は data.workflow_id フィールドから取得されます。
data.workflow_run_id security_result.about.labels.value 値は data.workflow_run_id フィールドから取得されます。
enterprise.name additional.fields.value.string_value 値は enterprise.name フィールドから取得されます。
external_identity_nameid target.user.email_addresses 値がメールアドレスの場合は、target.user.email_addresses 配列に追加されます。
external_identity_nameid target.user.userid 値は external_identity_nameid フィールドから取得されます。
external_identity_username target.user.user_display_name 値は external_identity_username フィールドから取得されます。
hashed_token network.session_id 値は hashed_token フィールドから取得されます。
job_name target.resource.attribute.labels.value 値は job_name フィールドから取得されます。
job_workflow_ref target.resource.attribute.labels.value 値は job_workflow_ref フィールドから取得されます。
org target.administrative_domain 値は org フィールドから取得されます。
org_id additional.fields.value.string_value 値は org_id フィールドから取得されます。
programmatic_access_type additional.fields.value.string_value 値は programmatic_access_type フィールドから取得されます。
public_repo additional.fields.value.string_value 値は public_repo フィールドから取得されます。
public_repo target.location.name 値が「false」の場合、「PRIVATE」にマッピングされます。それ以外の場合は、「PUBLIC」にマッピングされます。
query_string additional.fields.value.string_value 値は query_string フィールドから取得されます。
rate_limit_remaining additional.fields.value.string_value 値は rate_limit_remaining フィールドから取得されます。
repo target.resource.name 値は repo フィールドから取得されます。
repo_id additional.fields.value.string_value 値は repo_id フィールドから取得されます。
repository_public additional.fields.value.string_value 値は repository_public フィールドから取得されます。
request_body additional.fields.value.string_value 値は request_body フィールドから取得されます。
request_method network.http.method 値は大文字に変換されます。
route additional.fields.value.string_value 値は route フィールドから取得されます。
status_code network.http.response_code 値は整数に変換されます。
timestamp metadata.event_timestamp 値は UNIX ミリ秒からタイムスタンプに変換されます。
token_id additional.fields.value.string_value 値は token_id フィールドから取得されます。
token_scopes additional.fields.value.string_value 値は token_scopes フィールドから取得されます。
transport_protocol_name network.application_protocol 値は大文字に変換されます。
url_path target.url 値は url_path フィールドから取得されます。
user target.user.user_display_name 値は user フィールドから取得されます。
user_agent network.http.user_agent 値は user_agent フィールドから取得されます。
user_agent network.http.parsed_user_agent 値が解析されます。
user_id target.user.userid 値は user_id フィールドから取得されます。
workflow.name security_result.about.labels.value 値は workflow.name フィールドから取得されます。
workflow_run.actor.login principal.user.userid 値は workflow_run.actor.login フィールドから取得されます。
workflow_run.event additional.fields.value.string_value 値は workflow_run.event フィールドから取得されます。
workflow_run.head_branch security_result.about.labels.value 値は workflow_run.head_branch フィールドから取得されます。
workflow_run.head_sha target.file.sha256 値は workflow_run.head_sha フィールドから取得されます。
workflow_run.id target.resource.attribute.labels.value 値は workflow_run.id フィールドから取得されます。
workflow_run.workflow_id security_result.about.labels.value 値は workflow_run.workflow_id フィールドから取得されます。
なし metadata.event_type 値は action フィールドと actor フィールドに基づいて決定されます。action フィールドに「_member」が含まれている場合、値は「USER_RESOURCE_UPDATE_PERMISSIONS」に設定されます。action フィールドが空でなく、actor フィールドが空でない場合、値は「USER_RESOURCE_UPDATE_CONTENT」に設定されます。それ以外の場合、値は「USER_RESOURCE_ACCESS」に設定されます。
なし metadata.log_type 値は「GITHUB」に設定されます。
なし metadata.product_name 値は「GITHUB」に設定されます。
なし metadata.vendor_name 値は「GITHUB」に設定されます。
なし target.resource.resource_type 値は「STORAGE_OBJECT」に設定されます。
なし security_result.about.labels.key 値は、対応する data フィールドに基づいて定数文字列に設定されます。たとえば、data.workflow_id の場合、キーは「ワークフロー ID」に設定されます。
なし target.resource.attribute.labels.key 値は、対応する data フィールドに基づいて定数文字列に設定されます。たとえば、data.hook_id の場合、キーは「フック ID」に設定されます。

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。