一覧SP-20-2 · NAC・ZTNA:接続単位のアクセス制御

アプリケーション単位のアクセス制御

接続許可、継続中の再評価、アプリ内の操作権限を分けて確認します。

説明

ZTNAでは利用者や端末の条件を評価し、対象アプリへの接続を許可します。接続が認められた後も、そのアプリ内でどの文書を操作できるかは別に判断します。

固定の接続台帳で、アプリ範囲、端末状態の再評価、既存セッションを比較します。最後に同じ接続主体の文書アクセスをSQLで照合します。

接続許可、継続中の再評価、アプリ内の操作権限を分けて確認します。

1接続の対象アプリと主体を読む

s7はalice/dev7からdocsへのセッションです。

from sp20 import * from sp02 import show接続の対象アプリと主体を読む db=connect() show(db,"SELECT * FROM session") show(db,"SELECT * FROM policy")

対象はdocsだけです。ネットワーク全体や別アプリへの許可を表す行ではありません。

2許可したアプリと別アプリを比較する

期限内で接続先を変えます。

print(gateway許可したアプリと別アプリを比較する(db,'s7','docs',120)) print(gateway(db,'s7','admin',120))

docsはalice、adminはdeniedです。アプリを接続条件へ含めることで範囲を限定します。

3接続後に他人の文書を要求する

文書8をaliceの認可条件で検索します。

subject=gateway(db,'s7','docs',120) show(db,"SELECT id,body FROM document WHERE id=8 AND owner=?接続後に他人の文書を要求する",(subject,))

該当なしです。ZTNA接続の成功だけでbobの文書への権限は得られません。

4自身の文書へアクセスする

同じ主体で文書7を検索します。

show自身の文書へアクセスする(db,"SELECT id,body FROM document WHERE id=7 AND owner=?",(subject,))

public Aが返ります。通信路の許可と、資源ごとの所有者条件を両方満たしています。

5継続中に端末状態を変更する

dev7の状態を不適合へ変えます。

db.execute("UPDATE device SET healthy=0 WHERE id='dev7'") print(gateway(db,'s7','docs',130,recheck=False)) print(gateway(db,'s7','docs',130,recheck=True継続中に端末状態を変更する))

再評価なしはalice、現在状態を参照する評価はdeniedです。継続評価の頻度と参照先が適用時点に影響します。

6セッションを明示的に失効させる

s7のactiveを0にします。

db.execute("UPDATE session SET active=0 WHERE id='s7'") print(gatewayセッションを明示的に失効させる(db,'s7','docs',140,recheck=False))

再評価を省く経路でもdeniedになります。このモデルでは接続ごとにsessionのactiveを参照するためです。

7適合へ戻しても古いセッションを復活させない

端末の状態だけを戻します。

db.execute("UPDATE device SET healthy=1 WHERE id='dev7'") print(gateway適合へ戻しても古いセッションを復活させない(db,'s7','docs',150)) show(db,"SELECT id,active FROM session")

deniedでactiveは0です。端末の復旧とセッションの再発行を分け、必要な再認証を行います。

まとめ

接続先アプリを許可範囲へ含めます。

接続後も文書などの資源単位で認可します。

端末再評価とセッション失効を確認します。

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

Python 3.15 / 固定パケット・SQLiteの接続資料

1
from sp20 import * from sp02 import show db=connect() show(db,"SELECT * FROM session") show(db,"SELECT * FROM policy")
id | subject | device | app | expires | active
s7 | alice | dev7 | docs | 200 | 1
subject | device | app | allowed
alice | dev7 | docs | 1
2
print(gateway(db,'s7','docs',120)) print(gateway(db,'s7','admin',120))
alice
denied
3
subject=gateway(db,'s7','docs',120) show(db,"SELECT id,body FROM document WHERE id=8 AND owner=?",(subject,))
id | body
4
show(db,"SELECT id,body FROM document WHERE id=7 AND owner=?",(subject,))
id | body
7 | public A
5
db.execute("UPDATE device SET healthy=0 WHERE id='dev7'") print(gateway(db,'s7','docs',130,recheck=False)) print(gateway(db,'s7','docs',130,recheck=True))
alice
denied
6
db.execute("UPDATE session SET active=0 WHERE id='s7'") print(gateway(db,'s7','docs',140,recheck=False))
denied
7
db.execute("UPDATE device SET healthy=1 WHERE id='dev7'") print(gateway(db,'s7','docs',150)) show(db,"SELECT id,active FROM session")
denied
id | active
s7 | 0

演習完了