クラウドの責任共有モデル
問題がある層と管理主体を照合し、自分で直す作業と提供側へ確認する作業を具体的に整理します。
説明
クラウドへ移すと、機器やソフトウェアを管理する範囲が変わります。ただし、提供側が管理する範囲が増えても、利用者のデータ共有や権限の設定まで自動的に適切になるわけではありません。障害や設定不備に対して、誰がどこを変更するかを確認する必要があります。
VM、管理された実行環境、SaaSの三つの契約例を使います。OS、実行環境、アプリ、データ共有の問題を同じ表で調べ、利用者が変更できる設定記録と、提供側へ対応を求める部分を確認します。管理範囲はこの契約例に従い、実際のサービスでは個別の仕様と契約を確認します。
問題がある層と管理主体を照合し、自分で直す作業と提供側へ確認する作業を具体的に整理します。
1比較する三つの契約
guest_osはVM内のOS、runtimeはアプリの実行環境、appはアプリ本体、data_accessはデータの共有設定です。
cat contract.txt三構成の管理範囲を読む
python3 review.py matrix層ごとのproviderとcustomerを並べるVMでは利用者がゲストOS以上を管理し、管理された実行環境ではアプリ以上、SaaSでは共有設定を管理します。同じ名前のサービス分類でも設定範囲は製品ごとに異なるため、契約例の条件を先に確認します。
2VMで利用者が担当する修正
問題記録とVMの設定記録を照合します。resolvedは、この例で決めた修正条件を設定値が満たすかを表します。
cat issues.json問題と修正条件を読む
python3 review.py inspect --service VMVMの責任と現在値を調べる四つとも未解決で、管理主体はcustomerです。OSだけを更新しても、アプリのHTML処理や帳票の共有範囲は別に残ります。
3OSの修正だけを完了させた記録
VMのゲストOSを修正済みにした記録へ更新し、残る問題を確認します。
python3 review.py fix --service VM --layer guest_os --value patchedゲストOSの対応状況を修正済みにする
python3 review.py inspect --service VM他の問題が残っているかを再確認するI1だけがresolved=Trueです。実行環境、アプリ、共有設定の三つはFalseのまま。ある層の修正完了を、サービス全体の安全性と同一視できません。
4管理された実行環境へ変える場合
同じ四つの問題を、managed_runtimeの管理範囲で読みます。
python3 review.py inspect --service managed_runtime提供側がOSと実行環境を管理する構成を調べるOSと実行環境はprovider、アプリと共有設定はcustomerです。管理主体が変わっても、記録にある不具合自体が解決したとは限りません。提供側の修正状況も確認対象になります。
5利用者の変更範囲を越える操作
提供側が管理する実行環境について、利用者の変更として記録しようとします。
python3 review.py fix --service managed_runtime --layer runtime --value patched実行環境の修正を利用者の操作として要求するprovider-managed layerとして拒否されます。この契約例では利用者の作業として直接修正できず、提供側の更新状況や適用方法を確認する必要があります。
6利用者が持つアプリ側の責任
管理された実行環境でも、入力値をHTMLとしてそのまま出すアプリは利用者の修正対象です。文字として扱う修正の記録へ更新します。
python3 review.py fix --service managed_runtime --layer app --value escapedアプリの修正記録を更新する
python3 review.py inspect --service managed_runtime責任と未解決項目を再確認するI3だけが解決しました。OSと実行環境の修正を提供側へ任せても、アプリの入力処理や共有設定まで任せたことにはなりません。
7SaaSでも残る共有設定
SaaSの設定を表示します。ここでは提供側がアプリまで管理します。
python3 review.py inspect --service SaaSアプリまで提供される契約の管理範囲を読むI1〜I3の管理主体はproviderですが、I4の共有先はcustomerです。アプリを自作しないサービスでも、誰へデータを公開するかという利用者側の判断が残ります。
8帳票の共有先を担当チームへ限定
SaaSの共有先を全員から担当チームへ変更した記録を反映します。
python3 review.py fix --service SaaS --layer data_access --value team-only共有先を担当チームに限定した記録へ更新する
python3 review.py inspect --service SaaS変更した項目と提供側の項目を確認するI4は解決し、提供側の三項目は未解決のままです。共有先の修正と提供側の不具合修正を、別の担当・確認事項として管理できます。
まとめ
管理責任はサービス分類の名前だけでなく、契約と設定範囲に照らして確認します。
管理主体が変わったことと、問題が解決したことは別です。
利用者側の共有・権限設定は、管理されたサービスでも確認が必要です。
操作履歴と解説を振り返れます。
シェル / Python 3
cat contract.txt
python3 review.py matrixこの演習で比較する三つの契約: VM: 利用者がゲストOS・実行環境・アプリを管理する。 managed_runtime: 事業者がOSと実行環境を管理し、利用者がアプリを管理する。 SaaS: 事業者がアプリまで管理し、利用者が共有先を設定する。 修正責任と障害が存在するかは別々に調べる。実際のサービスでは個別契約・設定範囲を確認する。 hardware VM=provider managed_runtime=provider SaaS=provider host_os VM=provider managed_runtime=provider SaaS=provider guest_os VM=customer managed_runtime=provider SaaS=provider runtime VM=customer managed_runtime=provider SaaS=provider app VM=customer managed_runtime=customer SaaS=provider data_access VM=customer managed_runtime=customer SaaS=customer
cat issues.json
python3 review.py inspect --service VM[
{
"id": "I1",
"layer": "guest_os",
"finding": "OSの修正が未適用",
"required": "patched"
},
{
"id": "I2",
"layer": "runtime",
"finding": "実行環境の修正が未適用",
"required": "patched"
},
{
"id": "I3",
"layer": "app",
"finding": "入力値をHTMLとして表示する",
"required": "escaped"
},
{
"id": "I4",
"layer": "data_access",
"finding": "帳票の共有先が全員になっている",
"required": "team-only"
}
]
I1 guest_os owner=customer value=unpatched resolved=False
I2 runtime owner=customer value=unpatched resolved=False
I3 app owner=customer value=raw resolved=False
I4 data_access owner=customer value=everyone resolved=Falsepython3 review.py fix --service VM --layer guest_os --value patched
python3 review.py inspect --service VMVM guest_os=patched I1 guest_os owner=customer value=patched resolved=True I2 runtime owner=customer value=unpatched resolved=False I3 app owner=customer value=raw resolved=False I4 data_access owner=customer value=everyone resolved=False
python3 review.py inspect --service managed_runtimeI1 guest_os owner=provider value=unpatched resolved=False I2 runtime owner=provider value=unpatched resolved=False I3 app owner=customer value=raw resolved=False I4 data_access owner=customer value=everyone resolved=False
python3 review.py fix --service managed_runtime --layer runtime --value patchedchange rejected: provider-managed layer
python3 review.py fix --service managed_runtime --layer app --value escaped
python3 review.py inspect --service managed_runtimemanaged_runtime app=escaped I1 guest_os owner=provider value=unpatched resolved=False I2 runtime owner=provider value=unpatched resolved=False I3 app owner=customer value=escaped resolved=True I4 data_access owner=customer value=everyone resolved=False
python3 review.py inspect --service SaaSI1 guest_os owner=provider value=unpatched resolved=False I2 runtime owner=provider value=unpatched resolved=False I3 app owner=provider value=raw resolved=False I4 data_access owner=customer value=everyone resolved=False
python3 review.py fix --service SaaS --layer data_access --value team-only
python3 review.py inspect --service SaaSSaaS data_access=team-only I1 guest_os owner=provider value=unpatched resolved=False I2 runtime owner=provider value=unpatched resolved=False I3 app owner=provider value=raw resolved=False I4 data_access owner=customer value=team-only resolved=True
演習完了