シークレット検出有効性チェック トラブルシューティング
このランブックをいつ使用しますか?
このランブックは、有効性チェック機能に関連する本番環境の問題をトラブルシューティングする際に使用します。
モニタリング
有効性チェックモニタリング は、信頼性の問題を特定するための推奨ダッシュボードです。 Sidekiq ダッシュボード を補助として使用できます。ランブック を参照してください。
パートナー API の高エラー率
症状
ダッシュボード でエラー率が 10% を超えている
(アラート: SecretDetectionPartnerAPIHighErrorRate)。
調査
ダッシュボードの内訳で影響を受けたパートナーを特定します。
エラー種別を確認します:
network_error: 接続の問題rate_limit: レート制限超過response_error: 無効または解析できないレスポンス
パートナーのステータスページを確認します:
最近のデプロイを確認します:
git log --oneline -10 ee/lib/security/secret_detection/partner_tokens/
解決策
- パートナーに既知のインシデントがある場合(1 時間未満): 回復を待ちます
- ネットワークエラーの場合(複数パートナー):
#productionで SRE と調整します - レスポンスエラーの場合: API コントラクトの変更の可能性があります —
#g_ast-secret-detectionに Issue を登録してください - 継続的に発生する場合(6 時間以上): パートナーを無効化します
パートナー API の高レイテンシ
症状
ダッシュボード で P95 レイテンシが 5 秒を超えている(アラート: SecretDetectionPartnerAPIHighLatency)。
調査
システム全体の問題か、特定パートナーの問題かを確認します。
パートナーのステータスページでパフォーマンス低下を確認します。
teleport Rails コンソールからパートナー API をテストします:
uri = URI('https://sts.amazonaws.com/') start = Time.now Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http| http.request(Net::HTTP::Get.new(uri.path)) end puts "Latency: #{Time.now - start}s"
解決策
- P95 が 10 秒未満で改善中: 監視を継続します — 問題は自然に解消します
- P95 が 10 秒超で継続中(24 時間以上): パートナーを無効化します
レート制限の頻繁なヒット
症状
ダッシュボード で 5 分以上持続して 0.1 リクエスト/秒を超えている(アラート: SecretDetectionPartnerAPIRateLimitHit)。
調査
制限にヒットしているパートナーを特定します。
ee/lib/gitlab/application_rate_limiter.rbの現在の制限を確認します:partner_aws_api: { threshold: -> { 400 }, interval: 1.second } partner_gcp_api: { threshold: -> { 500 }, interval: 1.second } partner_postman_api: { threshold: -> { 4 }, interval: 1.second }teleport を使用して Sidekiq キューの深度を確認します:
Sidekiq::Queue.new('security_secret_detection_partner_token_verification').sizeバーストパターンを確認します: 大規模なパイプラインまたは複数プロジェクトのスキャン。
解決策
- キューが 1k ジョブ未満: 正常、1 時間以内にクリアされます
- キューが 1k〜10k ジョブ: キューサイズを監視します — レートリミッターが自動的に処理を絞ります
- キューが 50k ジョブを超える: 一時的にパートナーを無効化します
- 継続的なスロットリング(24 時間以上): レート制限を更新するかパートナーを無効化します
パートナー API へのネットワークエラー
症状
ダッシュボード で 5 分以上 0.5 エラー/秒を超えている(アラート: SecretDetectionPartnerAPINetworkErrors)。
調査
影響を受けたパートナーを確認します。
teleport を使用して Rails コンソールから接続を確認します:
# AWS のテスト uri = URI('https://sts.amazonaws.com/') begin Net::HTTP.get_response(uri) puts "✓ AWS reachable" rescue => e puts "✗ AWS unreachable: #{e.message}" end # GCP のテスト uri = URI('https://www.googleapis.com/oauth2/v1/tokeninfo') begin Net::HTTP.get_response(uri) puts "✓ GCP reachable" rescue => e puts "✗ GCP unreachable: #{e.message}" endDNS を確認します:
dig sts.amazonaws.com#infrastructureでファイアウォールの変更を確認します。データビュー
pubsub-sidekiq-inf-gprd*を使用して SSL エラーのログを確認します:json.class:PartnerTokenVerificationWorker AND "SSL"
解決策
- 単一パートナーが影響を受けている: パートナー側で無効化されている可能性があります。ステータスページを監視してください。
- 複数パートナーが影響を受けている: GitLab のネットワーク問題の可能性があります。SRE と調整してください。
- SSL/TLS エラー: 証明書の有効性を確認してください。CA バンドルの更新が必要な場合があります。
パートナーの無効化
緊急無効化 (GitLab.com)
ee/lib/security/secret_detection/partner_tokens/registry.rb を編集します:
'AWS' => {
client_class: ::Security::SecretDetection::PartnerTokens::AwsClient,
rate_limit_key: :partner_aws_api,
enabled: false # ← false に設定
}
インシデント後の再有効化
- 問題が解決されたことを確認します: パートナーのステータスが正常、ネットワーク OK、エラー率が低下。
- パートナーを再有効化するコード変更を行います。
- ダッシュボード を 10 分間監視します: エラー率が 2% 未満、キュー深度が 1k 未満、P95 が 5 秒未満。
手動トークン検証
バックグラウンドジョブを待たずにトークンを検証するには、Rails コンソール(teleport)を使用します:
finding = Vulnerabilities::Finding.find(FINDING_ID)
token_type = finding.identifiers.find { |i|
i['external_type'] == 'gitleaks_rule_id'
}&.dig('external_id')
partner_config = Security::SecretDetection::PartnerTokens::Registry.partner_for(token_type)
client = partner_config[:client_class].new
result = client.verify_token(finding.metadata['raw_source_code_extract'])
puts "Valid: #{result.valid}"
puts "Metadata: #{result.metadata}"
エスカレーション
- チーム: Secret Detection (@gitlab-org/secure/secret-detection)
- Slack:
#g_ast-secret-detection - オンコール: SRE の対応状況は
#productionを確認してください - クイックチェックリスト:
- ダッシュボード で問題を確認した
- パートナーのステータスページを確認した
- 最近のコードデプロイを確認した
- エラーのログを確認した
- パートナーのオフを試みた(緊急時)
