一覧OP-06-2 · クラウド・SaaSの監査記録

SaaSの認証・同意・共有ログ

テナント7の固定監査記録で、誰が設定し誰が利用したかを確認します。同名の利用者や文書が別テナントにある例も含め、テナントIDと対象IDを組み合わせて検索します。

説明

SaaSでは、アプリへの同意、文書の共有、利用者のサインイン、文書のダウンロードが別の記録になります。設定が作られたことと、その権限を使った活動があったことを分けて調べます。

テナント7の固定監査記録で、誰が設定し誰が利用したかを確認します。同名の利用者や文書が別テナントにある例も含め、テナントIDと対象IDを組み合わせて検索します。

1テナントを含めて一覧する

同じactorやtargetでもtenantが異なる行があります。

from oplab import * db=connect(6) show(db, 'SELECTテナントを含めて一覧する * FROM saas ORDER BY t')

tenant8にもaliceとdoc7が現れます。表示名が一致するだけで同じ主体や文書とは扱えません。

2同意したアプリの権限を見る

権限名と付与先の種別を確認します。

show(db, 'SELECT同意したアプリの権限を見る * FROM permissions WHERE tenant="tenant7" AND target="app7"')

app7にはapplicationとしてFiles.Read.Allが付与された設定です。実際のアクセス範囲はサービス側の権限仕様や追加制約も確認します。

3共有の作成者を絞る

テナントを固定して共有作成を探します。

show(db, 'SELECT共有の作成者を絞る id,actor,target,t FROM saas WHERE tenant="tenant7" AND action="share"')

aliceがdoc7を共有しています。共有者と、リンクや権限を使って読んだ利用者を分けて調査します。

4共有先と読取りを照合する

テナント、文書ID、利用主体を対応させます。

show(db, 'SELECT共有先と読取りを照合する s.id,s.actor,s.target,p.permission FROM saas s JOIN permissions p ON s.tenant=p.tenant AND s.target=p.target AND s.actor=p.grantee WHERE s.action="download"')

bobによるdoc7のダウンロードがread権限と対応しました。共有作成だけの段階より、実利用の裏付けが増えます。

5サインインと利用を別の行で読む

同じ主体の活動を並べますが、相関IDは異なる点に注目します。

show(db, 'SELECTサインインと利用を別の行で読む id,t,action,target,correlation FROM saas WHERE tenant="tenant7" AND actor="bob" ORDER BY t')

サインインのc3とダウンロードのc4は別の操作です。この資料だけで、そのサインインセッションがダウンロードに使われたと一意には証明できません。

6別テナントの設定を除外する

対象範囲を明示した証拠一覧を残します。

show(db, 'SELECT別テナントの設定を除外する id,action,actor,target FROM saas WHERE tenant="tenant7" ORDER BY t')

対象内は4件です。アプリへの同意、文書共有、サインイン、利用をそれぞれの証拠に対応付けて説明します。

まとめ

対象内は4件です。アプリへの同意、文書共有、サインイン、利用をそれぞれの証拠に対応付けて説明します。

表示された証拠IDと検索条件を残すと、調査結果を元の記録までたどれます。

操作履歴と解説を振り返れます。

Python 3.15 / SQLite・固定の調査記録

1
from oplab import * db=connect(6) show(db, 'SELECT * FROM saas ORDER BY t')
id | t | tenant | actor | action | target | correlation | result
a1 | 10 | tenant7 | alice | consent | app7 | c1 | success
a2 | 12 | tenant7 | alice | share | doc7 | c2 | success
a3 | 14 | tenant7 | bob | signin | app7 | c3 | success
a4 | 16 | tenant7 | bob | download | doc7 | c4 | success
a5 | 18 | tenant8 | alice | share | doc7 | c5 | success
2
show(db, 'SELECT * FROM permissions WHERE tenant="tenant7" AND target="app7"')
tenant | target | permission | grantee
tenant7 | app7 | Files.Read.All | application
3
show(db, 'SELECT id,actor,target,t FROM saas WHERE tenant="tenant7" AND action="share"')
id | actor | target | t
a2 | alice | doc7 | 12
4
show(db, 'SELECT s.id,s.actor,s.target,p.permission FROM saas s JOIN permissions p ON s.tenant=p.tenant AND s.target=p.target AND s.actor=p.grantee WHERE s.action="download"')
id | actor | target | permission
a4 | bob | doc7 | read
5
show(db, 'SELECT id,t,action,target,correlation FROM saas WHERE tenant="tenant7" AND actor="bob" ORDER BY t')
id | t | action | target | correlation
a3 | 14 | signin | app7 | c3
a4 | 16 | download | doc7 | c4
6
show(db, 'SELECT id,action,actor,target FROM saas WHERE tenant="tenant7" ORDER BY t')
id | action | actor | target
a1 | consent | alice | app7
a2 | share | alice | doc7
a3 | signin | bob | app7
a4 | download | bob | doc7

演習完了