一覧CL-01-1 · クラウドの基本モデル

クラウドの責任共有モデル

問題がある層と管理主体を照合し、自分で直す作業と提供側へ確認する作業を具体的に整理します。

説明

クラウドへ移すと、機器やソフトウェアを管理する範囲が変わります。ただし、提供側が管理する範囲が増えても、利用者のデータ共有や権限の設定まで自動的に適切になるわけではありません。障害や設定不備に対して、誰がどこを変更するかを確認する必要があります。

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

1
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
2
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=False
3
python3 review.py fix --service VM --layer guest_os --value patched python3 review.py inspect --service VM
VM 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
4
python3 review.py inspect --service managed_runtime
I1 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
5
python3 review.py fix --service managed_runtime --layer runtime --value patched
change rejected: provider-managed layer
6
python3 review.py fix --service managed_runtime --layer app --value escaped python3 review.py inspect --service managed_runtime
managed_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
7
python3 review.py inspect --service SaaS
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=everyone resolved=False
8
python3 review.py fix --service SaaS --layer data_access --value team-only python3 review.py inspect --service SaaS
SaaS 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

演習完了