クラウド監査ログの収集範囲
ダウンロードの収集が途中で停止した固定記録を調べます。別テナントの同名対象も含め、対象範囲、停止時刻、設定変更者を確認し、未観測の区間を明示する方法を学びます。
説明
ログ検索で結果が出ない場合、活動がなかったのか、記録対象外だったのかを調べる必要があります。監査設定の変更と収集側の範囲を確認すると、検索で答えられる時間帯を限定できます。
ダウンロードの収集が途中で停止した固定記録を調べます。別テナントの同名対象も含め、対象範囲、停止時刻、設定変更者を確認し、未観測の区間を明示する方法を学びます。
1収集対象を一覧する
start以上end未満の期間にenabledの設定が有効だったものとして扱います。
from oplab import *
db=connect(6)
show(db, 'SELECT収集対象を一覧する * FROM coverage ORDER BY tenant,source,start')tenant7のダウンロードは20で停止し、tenant8は全期間が対象外です。サインインとダウンロードの収集条件も異なります。
2設定変更の主体を調べる
監査設定を変更した記録は、対象ログとは別に保管された固定資料です。
show(db, 'SELECT設定変更の主体を調べる * FROM config')q1はadminが時刻20に収集を無効化した記録です。変更の理由や承認の有無は、この行だけでは分かりません。
3観測した利用が有効期間内か調べる
テナント、ログ種別、時間帯を合わせて結合します。
show(db, 'SELECT観測した利用が有効期間内か調べる s.id,c.id,c.enabled FROM saas s JOIN coverage c ON s.tenant=c.tenant AND s.action=c.source AND s.t>=c.start AND s.t<c.end ORDER BY s.id')a3とa4は有効期間内の記録です。記録が存在する範囲と、設定上収集するはずの範囲を照合できます。
4停止後の検索結果を確認する
tenant7の時刻20以後のダウンロードを検索します。
show(db, 'SELECT停止後の検索結果を確認する id,t,action FROM saas WHERE tenant="tenant7" AND action="download" AND t>=20')行はありませんが、その期間は収集が無効です。「ダウンロードはなかった」という結論には使えません。
5未観測の区間を抽出する
enabled=0の期間を、追加確認が必要な範囲として取り出します。
show(db, 'SELECT未観測の区間を抽出する tenant,source,start,end FROM coverage WHERE enabled=0 ORDER BY tenant,start')tenant7の後半とtenant8の全区間が残ります。別サービスの監査や端末側の記録が補足資料の候補です。
6収集できた時間の長さを比較する
この表の区間は重複していません。テナントと種別ごとに有効時間を合計します。
show(db, 'SELECT収集できた時間の長さを比較する tenant,source,SUM(CASE WHEN enabled=1 THEN end-start ELSE 0 END) AS covered_seconds FROM coverage GROUP BY tenant,source ORDER BY tenant,source')同じ30秒の調査期間でも有効時間は0、20、30秒です。検索結果の件数を比較する前に、分母となる観測時間をそろえます。
まとめ
同じ30秒の調査期間でも有効時間は0、20、30秒です。検索結果の件数を比較する前に、分母となる観測時間をそろえます。
表示された証拠IDと検索条件を残すと、調査結果を元の記録までたどれます。
操作履歴と解説を振り返れます。
Python 3.15 / SQLite・固定の調査記録
from oplab import *
db=connect(6)
show(db, 'SELECT * FROM coverage ORDER BY tenant,source,start')id | tenant | source | start | end | enabled c2 | tenant7 | download | 0 | 20 | 1 c3 | tenant7 | download | 20 | 30 | 0 c1 | tenant7 | signin | 0 | 30 | 1 c4 | tenant8 | download | 0 | 30 | 0
show(db, 'SELECT * FROM config')id | t | tenant | actor | change q1 | 20 | tenant7 | admin | download collection disabled
show(db, 'SELECT s.id,c.id,c.enabled FROM saas s JOIN coverage c ON s.tenant=c.tenant AND s.action=c.source AND s.t>=c.start AND s.t<c.end ORDER BY s.id')id | id | enabled a3 | c1 | 1 a4 | c2 | 1
show(db, 'SELECT id,t,action FROM saas WHERE tenant="tenant7" AND action="download" AND t>=20')id | t | action
show(db, 'SELECT tenant,source,start,end FROM coverage WHERE enabled=0 ORDER BY tenant,start')tenant | source | start | end tenant7 | download | 20 | 30 tenant8 | download | 0 | 30
show(db, 'SELECT tenant,source,SUM(CASE WHEN enabled=1 THEN end-start ELSE 0 END) AS covered_seconds FROM coverage GROUP BY tenant,source ORDER BY tenant,source')tenant | source | covered_seconds tenant7 | download | 20 tenant7 | signin | 30 tenant8 | download | 0
演習完了