クラウド設定の修正と動作確認
是正後の安全性と業務への影響を同じ試験条件で比較します。
説明
公開範囲を狭める修正は、正常な利用にも影響します。修正対象だけでなく、その設定に依存する通信を用意し、事前評価、適用、再取得の順に確認します。
固定の通信一覧を使い、ルール変更をSQLiteのトランザクション内で試します。影響が大きい変更は戻し、監視通信を保つ条件へ調整します。
是正後の安全性と業務への影響を同じ試験条件で比較します。
1必要な通信と現状を確認する
customer、monitor、adminを個別の条件として扱います。
from sp16 import *
from sp02 import show
db=connect()
show(db,"SELECT * FROM dependency ORDER BY name")
checks=db.execute("SELECT name,src,target,port FROM dependency ORDER BY name").fetchall()
for name,src,target,port in checks:print(name,reachable必要な通信と現状を確認する(db,target,src,port))customerとmonitorはTrue、adminはFalseです。adminが既に通らないことも変更前の比較基準になります。
2修正前の設定を保存する
変更対象の行と世代を取得します。
before=db.execute("SELECT修正前の設定を保存する * FROM rule WHERE sg='sg7'").fetchall()
print(before)
show(db,"SELECT version FROM config")現状は全IPv4から443、世代1です。戻す場合の設定と対象を記録します。
3許可規則を削除する案を試す
SAVEPOINTで試験変更を戻せる位置を作ります。
db.execute("SAVEPOINT許可規則を削除する案を試す candidate")
db.execute("DELETE FROM rule WHERE sg='sg7'")
for name,src,target,port in checks:print(name,reachable(db,target,src,port))すべてFalseです。監視通信も失われるため、この案をそのまま適用しません。
4試験変更を戻して再確認する
保存点へ戻します。
db.execute("ROLLBACK TO試験変更を戻して再確認する candidate");db.execute("RELEASE candidate")
print(db.execute("SELECT * FROM rule WHERE sg='sg7'").fetchall()==before)Trueです。実サービスの変更ではDBのROLLBACKが使えるとは限らず、サービス固有の戻し手順と再確認が必要です。
5監視範囲を残す案へ変える
許可範囲を192.0.2.0/24にします。
db.execute("UPDATE rule SET cidr='192.0.2.0/24' WHERE sg='sg7'")
for name,src,target,port in checks:print(name,reachable監視範囲を残す案へ変える(db,target,src,port))monitorだけTrueです。この目的が公開Webの停止である場合の案で、customerの継続が必要なら別の構成を検討します。
6変更世代を進めて設定を読み直す
反映した値をそのまま再検索します。
db.execute("UPDATE config SET version=2 WHERE id=1");db.commit()
show変更世代を進めて設定を読み直す(db,"SELECT * FROM rule WHERE sg='sg7'")
show(db,"SELECT version FROM config")範囲と世代が期待値に一致します。変更要求の送信だけを適用完了として扱いません。
7変化した通信を一覧にする
今回の変更前後の差を表示します。
baseline={'admin':False,'customer':True,'monitor':True}
for name,src,target,port in checks:
print(name,baseline[name],reachable変化した通信を一覧にする(db,target,src,port))customerだけがTrueからFalseです。到達候補のモデル評価と実通信での確認は、根拠を分けて記録します。
まとめ
変更前から通らない通信も記録します。
依存通信を使って変更案を評価します。
修正後の値と業務上の影響を読み直します。
操作履歴と解説を振り返れます。
Python 3.15 / 固定のクラウド構成と限定した評価モデル
from sp16 import *
from sp02 import show
db=connect()
show(db,"SELECT * FROM dependency ORDER BY name")
checks=db.execute("SELECT name,src,target,port FROM dependency ORDER BY name").fetchall()
for name,src,target,port in checks:print(name,reachable(db,target,src,port))name | src | target | port admin | 192.0.2.30 | web7 | 22 customer | 198.51.100.10 | web7 | 443 monitor | 192.0.2.20 | web7 | 443 admin False customer True monitor True
before=db.execute("SELECT * FROM rule WHERE sg='sg7'").fetchall()
print(before)
show(db,"SELECT version FROM config")[('sg7', '0.0.0.0/0', 443)]
version
1db.execute("SAVEPOINT candidate")
db.execute("DELETE FROM rule WHERE sg='sg7'")
for name,src,target,port in checks:print(name,reachable(db,target,src,port))admin False customer False monitor False
db.execute("ROLLBACK TO candidate");db.execute("RELEASE candidate")
print(db.execute("SELECT * FROM rule WHERE sg='sg7'").fetchall()==before)True
db.execute("UPDATE rule SET cidr='192.0.2.0/24' WHERE sg='sg7'")
for name,src,target,port in checks:print(name,reachable(db,target,src,port))admin False customer False monitor True
db.execute("UPDATE config SET version=2 WHERE id=1");db.commit()
show(db,"SELECT * FROM rule WHERE sg='sg7'")
show(db,"SELECT version FROM config")sg | cidr | port sg7 | 192.0.2.0/24 | 443 version 2
baseline={'admin':False,'customer':True,'monitor':True}
for name,src,target,port in checks:
print(name,baseline[name],reachable(db,target,src,port))admin False False customer True False monitor True True
演習完了