エンタープライズの監査ログのトークン データについて
エンタープライズの監査ログには、ユーザーまたは統合が実行する各アクションのイベントが含まれています。 アクションが GitHub の Web UI の外部で発生した場合、イベントのデータには、ユーザーまたは統合の認証方法に関する詳細が表示されます。
トークンが侵害されたことが判明した場合は、そのトークンに関連付けられているすべてのイベントに関する監査ログを検索することで、侵害されたトークンによって実行されたアクションを把握できます。
トークン データは、次の認証方法の監査ログに表示されます。
- Personal access token
- OAuth トークン
- GitHub Apps(アプリのインストールまたはユーザーの代理としての認証)
- デプロイ キー
- SSH キー
注: 監査ログ内の SSH キーとデプロイ キーのトークン データの表示は パブリック プレビュー 段階であり、変更される可能性があります。
監査ログ イベントのトークン データ
トークンの使用に関する次のデータが監査ログに表示され、ユーザーまたは統合がどのように認証されたかを理解するのに役立ちます。
情報 | 説明 |
---|---|
hashed_token | 認証に使用されるトークンの SHA-256 ハッシュ。 |
programmatic_access_type | 使用する認証の種類。 |
token_scopes | 該当する場合は、トークンのスコープ。 |
トークンに関連付けられているイベントの識別
特定のトークンに関連付けられているイベントを特定する場合は、UI または REST API を使用できます。 Git イベントを識別するには、監査ログからイベントをエクスポートする必要があります。イベントを識別するには、前提としてトークンの SHA-256 ハッシュを知っている必要があります。
トークンの SHA-256 ハッシュ値の生成
未加工のトークン値しかない場合は、トークンを検索する前に SHA-256 ハッシュを生成する必要があります。
macOS と Linux の場合は、echo -n TOKEN | openssl dgst -sha256 -binary | base64
を使用して TOKEN をトークン値に置き換えることができます。
Powershell では、次のスクリプトを使用して、指定された文字列の SHA-256 ハッシュを返すことができます。
Param ( [Parameter(Mandatory=$true)] [string] $ClearString ) $hasher = [System.Security.Cryptography.HashAlgorithm]::Create('sha256') $hash = $hasher.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($ClearString)) $hashString = [System.BitConverter]::ToString($hash) $hashString.Replace('-', '')
Param (
[Parameter(Mandatory=$true)]
[string]
$ClearString
)
$hasher = [System.Security.Cryptography.HashAlgorithm]::Create('sha256')
$hash = $hasher.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($ClearString))
$hashString = [System.BitConverter]::ToString($hash)
$hashString.Replace('-', '')
GitHub
での検索
GitHub で監査ログを検索するときに、検索クエリに hashed_token:"VALUE"
を含めて、VALUE
をトークンの SHA-256 ハッシュに置き換えます。
注: ハッシュされたトークン値を引用符で囲んでください。
GitHub を使用して検索した場合、Git イベントは返されません。
REST API を使用した検索
REST API を使用してトークンを検索する前に、SHA-256 ハッシュを生成した後、ハッシュを URI エスケープする必要もあります。 ほとんどの主要なプログラミング言語で、URI エスケープのためのユーティリティが提供されます。 たとえば、encodeURIComponent() は JavaScript の文字列をエンコードします。
次に、検索語句に hashed_token:"VALUE"
を含め、VALUE を URI エスケープ ハッシュに置き換えます。
REST API を使用した検索では、Git イベントは返されません。
たとえば、エンタープライズ アカウントの名前が octo-corp
の場合、次の curl コマンドは、URI でエンコードされた SHA-256 ハッシュが EH4L8o6PfCqipALbL%2BQT62lyqUtnI7ql0SPbkaQnjv8
であるトークンに関連付けられているすべてのイベントで @octo-corp の監査ログを検索します。
curl --header "Accept: application/vnd.github+json" --header "Authorization: Bearer YOUR-TOKEN" --header "X-GitHub-Api-Version:2022-11-28" 'https://api.github.com/enterprises/octo-corp/audit-log?phrase=hashed_token:"EH4L8o6PfCqipALbL%2BQT62lyqUtnI7ql0SPbkaQnjv8"'
Git イベントの識別
特定のトークンで認証された Git イベントを識別できます。 監査ログから Git イベント データをエクスポートすると、認証に関する詳細を含むフィールドが出力に表示されます。詳細については、「Enterprise の監査ログ アクティビティのエクスポート」を参照してください。
注: 監査ログ内の Git イベントのトークン データの表示は パブリック プレビュー であり、変更される可能性があります。