計算・保存・ネットワーク|クラウドの基本・IAM・責任

このページはプロモーション(広告)を含みます。

クラウドの基本・IAM・責任(初級・読む30分+演習35分)

この授業のゴール

仕事でどう使うか

クラウドで借りるものは、大きく計算(処理を動かす場所)、保存(データを置く場所)、ネットワーク(つなぎ方と通してよい通信)の3つに分かれます。構成図はこの3つの組合せで描かれ、費用や事故の多くもこの3つの選び方で決まります。

路線 この授業の使いどころ
DS 分析用のCSVや画像をどこに置くか(オブジェクト保存か、DBか)を、読み方と量から決める
ML 学習は短時間の大きな計算、推論APIは常時稼働の小さな計算。計算の種類を分けて選ぶ
DX ベンダーの構成図を読み、「DBがインターネットから直接届く位置にないか」を確認する
RS 実験データの保管場所と計算環境を分け、共有範囲をネットワークと権限で制限する

サービス名は提供者ごとに違いますが、この授業では一般名で説明します(名前の対応は 「サービス名と役割」(有料版))。料金やサービスの細部は変わるため、執筆時点(2026年)の一般的な説明として読み、最新は公式情報で確認してください。ネットワークの判定はPythonによる模擬で、実際のクラウドの設定画面とは表記が異なります。

前提

次の言葉を使います。

Pythonでは、標準ライブラリ ipaddress を使います。リストと辞書、for 文、any() が読めれば十分です。

身近な状況:画像分類の試作を「全部1台」で作る

みなと商店の分析者が、商品画像の自動分類を試作しています。最初の構成は次のとおりでした。

1か月後に起きたこと:

  1. 学習中はAPIの応答が極端に遅くなった(同じ機械で重い計算と常時の処理が取り合った)。
  2. ディスクが満杯になり、DBが止まった。
  3. インターネット中から、DBのポート5432にログインを試す通信が大量に届いていた。

どれも「機能が足りない」のではなく、計算・保存・ネットワークの選び方の問題です。この授業の最後には、この構成を次のように分けられるようになります。

役割 選ぶ資源 置き場所
画像の保管 オブジェクト保存 ネットワークの外(権限で制御)
学習 必要な時だけ起動する計算(バッチ) 非公開サブネット
予測API 常時稼働の小さな計算 公開側はHTTPS(443)だけ受け付ける
メタデータ(商品ID・ラベル) マネージドDB 非公開サブネット、APIからだけ接続可

直感的な説明:工場・倉庫・道路と門番

3つの柱を、町の設備にたとえます。

ポイントは、大事な帳簿(DB)を表通りに置かないこと、そして門番の名簿に「誰でも・どの窓口でも」と書かないことです。

たとえ話の限界:実際のオブジェクト保存は「敷地の外」にあり、ネットワークの区画ではなく権限設定(IAMと最小権限)と公開設定で守ります。区画だけ見て安心すると、保存場所の公開設定の誤りを見落とします。

正確な定義:3つの柱の種類

計算(compute)

種類 説明 向く処理 注意点
仮想サーバー(VM:Virtual Machine) OSから自分で管理する仮想的なコンピューター 常時稼働のAPI、自由な環境が必要な分析 OS更新は利用者。止めないと課金が続く
コンテナ アプリと必要なライブラリを1つの箱にまとめて動かす 同じ環境を何度も再現したい処理、API 箱の作り方(イメージ)の管理が必要
関数実行(サーバーレス) イベント(ファイル到着など)のたびに短い関数を動かす 小さく短い処理、たまにしか起きない処理 実行時間・メモリに上限がある。長い学習には不向き
バッチ実行 ジョブを投入し、終わったら資源を返す 学習、夜間の集計 待ち時間が発生しうる

保存(storage)

種類 アクセスの仕方 向く用途
オブジェクト保存 「入れ物(バケット)+キー(名前)」でファイル単位にHTTPのAPIで読み書き 画像・CSV・ログ・バックアップ。容量が大きく、ファイル単位で扱うもの
ブロック保存 1台のVMにディスクとして接続 OSやDBのデータ領域
ファイル保存 複数のVMから同じフォルダとして共有 共同で編集する作業フォルダ
マネージドDB SQLなどで行単位に検索・更新 商品・顧客・ラベルなど、条件で検索・更新する表

ネットワーク(network)

$$N = 2^{32-p}$$

$p=24$ なら $N=2^{8}=256$ 個(10.0.1.0〜10.0.1.255)、$p=26$ なら $2^{6}=64$ 個。提供者によっては、範囲の先頭などの数個が予約されて使えません。0.0.0.0/0 は $p=0$ で、すべてのアドレス(=インターネット全体)を表します。
- 受信ルール(ファイアウォールルール、セキュリティグループなどと呼ばれる):「送信元の範囲(CIDR)」「ポート」の組を許可として列挙し、どれにも当たらない通信は拒否する(既定拒否)。

段階付き例題:受信ルールで通信の可否を判定する

問題:予測APIのサーバーには次の受信ルールが設定されている。3つの通信は許可されるか。

ルール 送信元CIDR ポート 意図
R1 0.0.0.0/0 443 誰でもHTTPSでAPIを使える
R2 10.0.2.0/24 22 管理用サブネットからだけSSH

通信:(a) 203.0.113.5 から443、(b) 203.0.113.5 から22、(c) 10.0.2.77 から22。

ステップ1:ポートが一致するルールを探す。(a)はR1、(b)と(c)はR2。

ステップ2:送信元がCIDRの範囲に入るか調べる。

ステップ3:Pythonで確かめる。ipaddress.ip_network(文字列) はCIDRを表すオブジェクトを返し、ipaddress.ip_address(文字列) in ネットワーク で範囲に含まれるか(True/False)を判定できます。

import ipaddress

rules = [
    {"name": "R1", "cidr": "0.0.0.0/0",   "port": 443},
    {"name": "R2", "cidr": "10.0.2.0/24", "port": 22},
]

def matched_rule(rules, src_ip, port):
    # 一致した最初のルール名を返す。なければ None(=既定拒否)
    ip = ipaddress.ip_address(src_ip)
    for r in rules:
        if r["port"] == port and ip in ipaddress.ip_network(r["cidr"]):
            return r["name"]
    return None

for src, port in [("203.0.113.5", 443), ("203.0.113.5", 22), ("10.0.2.77", 22)]:
    m = matched_rule(rules, src, port)
    print(src, port, "->", f"許可({m})" if m else "拒否")

net = ipaddress.ip_network("10.0.2.0/24")
print("アドレス数:", net.num_addresses, "範囲:", net[0], "-", net[-1])

出力:

203.0.113.5 443 -> 許可(R1)
203.0.113.5 22 -> 拒否
10.0.2.77 22 -> 許可(R2)
アドレス数: 256 範囲: 10.0.2.0 - 10.0.2.255

意味:APIは世界中から使えるが、管理用のSSHは社内の管理サブネットからしか届かない、という意図どおりの設定であることが確認できました。

操作して理解する:CIDRを変えて範囲の広さを見る

/ の後ろの数を変えると、許可する範囲の広さが何倍も変わります。次のコードで、範囲の個数と、ある送信元が含まれるかを確認してください。

import ipaddress

src = ipaddress.ip_address("10.0.3.20")
for cidr in ["10.0.2.0/24", "10.0.0.0/22", "10.0.0.0/16", "0.0.0.0/0"]:
    net = ipaddress.ip_network(cidr)
    print(f"{cidr:<13} 個数={net.num_addresses:>13,}  10.0.3.20を含む? {src in net}")

出力:

10.0.2.0/24   個数=          256  10.0.3.20を含む? False
10.0.0.0/22   個数=        1,024  10.0.3.20を含む? True
10.0.0.0/16   個数=       65,536  10.0.3.20を含む? True
0.0.0.0/0     個数=4,294,967,296  10.0.3.20を含む? True

考えてみましょう。

発展:外向きの通信・私設接続・ネットワークだけに頼らない設計

よくある失敗

失敗1:「とりあえず全開放」で接続を通す

誤った設定:接続できない原因を調べずに、受信ルールを「0.0.0.0/0 から、ポート0〜65535を許可」にした。

import ipaddress
rules_bad = [{"cidr": "0.0.0.0/0", "from": 0, "to": 65535}]
def allowed(rules, src, port):
    ip = ipaddress.ip_address(src)
    return any(r["from"] <= port <= r["to"] and ip in ipaddress.ip_network(r["cidr"]) for r in rules)
print("外部からDB(5432):", allowed(rules_bad, "198.51.100.9", 5432))
print("外部からSSH(22):", allowed(rules_bad, "198.51.100.9", 22))

出力はどちらも True です。

なぜ誤りか:接続できない原因(送信元のアドレス違い、アプリが起動していない等)は解決しておらず、代わりにDBやSSHが世界中に開きます。

直し方:必要な通信を「誰から・どのポートへ」で書き出し、それだけを許可する。例:APIは 0.0.0.0/0 から443、DBは APIサーバーのサブネットから5432だけ。

失敗2:大きなファイルをDBに入れる・VMのディスクに置き続ける

誤った設計:200GBの画像をDBの列(バイナリ型)に格納した。あるいはVMのディスクに置き、VMを削除したら画像も消えた。

なぜ誤りか:DBは「条件で行を探して更新する」のが得意で、大きなファイルを大量に入れるとバックアップや複製が重くなります。VMのディスク(ブロック保存)は、そのVMの一部として扱われることが多く、削除の設定によってはVMと一緒に消えます。

直し方:画像そのものはオブジェクト保存に置き、DBには product_id, image_key(オブジェクトのキー), label のような参照情報だけを入れる。

列 例
product_id 1012
image_key images/2025/1012_front.jpg
label 飲料

失敗3:長時間の学習を関数実行(サーバーレス)で動かす

誤った設計:「サーバー管理が不要で安い」として、2時間かかるモデル学習を関数実行で動かした。途中で実行時間の上限に達して強制終了し、毎回最初からやり直しになった。

なぜ誤りか:関数実行は、短く小さな処理をイベントごとに動かすための仕組みで、一般に1回の実行時間やメモリに上限があります(上限値は提供者・設定により異なり、変わり得ます)。

直し方:処理の時間とメモリを見積もってから選ぶ。数秒〜数分の小さな処理(ファイル到着時の形式チェックなど)は関数実行、時間のかかる学習はバッチ実行やVMにする。途中結果を保存して再開できるようにしておくと、失敗時の損失も減ります。

まとめ

用語

オブジェクト保存(object storage)

バケットとキーでファイル単位に、HTTPのAPIで読み書きする保存方式。

ブロック保存(block storage)

VMにディスクとして接続して使う保存方式。

関数実行(サーバーレス)(serverless functions)

イベントのたびに短い関数を実行し、サーバーの管理を利用者が行わない計算方式。実行時間などに上限がある。

仮想ネットワーク(virtual private cloud (VPC))

クラウドの中に作る、自分専用の論理的なネットワーク。

サブネット(subnet)

仮想ネットワークを区切ったアドレス範囲。公開・非公開に分けて資源を配置する。

CIDR表記(CIDR notation)

アドレス/固定ビット数 でアドレス範囲を表す書き方。/p の範囲は 2^(32-p) 個。

受信ルール(inbound rule / firewall rule)

どの送信元からどのポートへの通信を許可するかを列挙した設定。一致しない通信は拒否される。

よくある質問

なぜ計算と保存を分けるのですか?

寿命と増え方が違うからです。計算は必要なときだけ起動して止めたい一方、データは長く残したい。分けておけば、計算を止めたり作り直したりしてもデータは消えず、それぞれ独立に増減できます。

オブジェクト保存とファイル保存の違いは何ですか?

オブジェクト保存はファイル単位でAPIを通して丸ごと読み書きし、途中の一部だけを書き換える使い方は想定していません。ファイル保存は複数のサーバーから普通のフォルダとして使え、ファイルの一部の更新もできます。大量に貯めて読むならオブジェクト、共同編集の作業フォルダならファイル保存が向きます。

受信ルールの設定でどこを間違えやすいですか?

CIDRの範囲を広げすぎる(/24のつもりで/16)、検証用に開けたポートを閉じ忘れる、送信元をIPアドレスで固定したのに相手のアドレスが変わる、の3つが典型です。ルールには意図と担当者と期限をメモしておき、定期的に棚卸しします。

サブネットの大きさはどう決めますか?

将来置くサーバーやコンテナの数に余裕を持たせます。後から広げるのは手間がかかることが多いため、仮想ネットワーク全体を /16 など大きめに確保し、用途別に /24 程度のサブネットに分ける例がよく見られます(具体的な推奨は提供者の公式情報で確認)。

VMとコンテナのどちらを選べばよいか、仕事ではどう判断しますか?

「同じ環境を何度も再現する必要があるか」「OSの細かい設定が必要か」「チームにコンテナの運用経験があるか」で判断します。試作は使い慣れたVMで始め、本番運用で再現性が重要になったらコンテナに移す、という段階的な判断もよくあります。

確認問題

問1 10.0.4.0/26 に含まれるIPv4アドレスの個数(予約分を考えない)はどれか。

  1. ① 26個
  2. ② 64個
  3. ③ 256個
  4. ④ 1,024個
解答と解説

正解:②

個数は $2^{32-26}=2^{6}=64$ 個です。

問2 受信ルールが「0.0.0.0/0 から443」と「10.0.2.0/24 から22」だけのとき、10.0.3.5 からポート22への通信はどうなるか。

  1. ① 許可される(10.0で始まるので社内)
  2. ② 拒否される(どのルールにも当たらない)
  3. ③ 許可される(443が開いているので)
  4. ④ ルールの順番によって変わる
解答と解説

正解:②

10.0.3.5 は 10.0.2.0/24(10.0.2.0〜10.0.2.255)の範囲外で、ポート22の他のルールもないので既定拒否です。

問3 データベースのポート(例:5432)を 0.0.0.0/0 に開けることの問題として最も適切なものはどれか。

  1. ① 通信が遅くなるだけで安全上の問題はない
  2. ② パスワードがあれば問題はない
  3. ③ インターネット全体からログイン試行や脆弱性を突く攻撃が届く状態になり、1つの弱点で侵入され得る
  4. ④ クラウドでは自動的に防がれるので問題はない
解答と解説

正解:③

到達できる相手を最小にすることが防御の第一層です。DBはアプリのサブネットからだけ到達できるようにします。

問4 商品画像10万枚を保管し、学習処理がファイル単位でまとめて読む。最も向く保存はどれか。

  1. ① オブジェクト保存
  2. ② 1台のVMに接続したブロック保存
  3. ③ マネージドDBのバイナリ列
  4. ④ 関数実行の一時領域
解答と解説

正解:①

大量のファイルをキーで読み書きする用途にはオブジェクト保存が向きます。DBには画像のキーだけを入れます。

問5 ファイルが届くたびに数秒で形式を確認する処理に向く計算の種類はどれか。

  1. ① 常時稼働の大きなVM
  2. ② 関数実行(サーバーレス)
  3. ③ 数時間かかるバッチ実行を毎回起動
  4. ④ オンプレミスのサーバーを追加購入
解答と解説

正解:②

イベントごとに短く動く処理は関数実行が向き、待っている時間に計算資源を確保し続けずに済みます。

問6 非公開サブネットについての説明として正しいものはどれか。

  1. ① インターネットへの出入口への経路がなく、外部から直接届かない区画
  2. ② 誰も接続できないので、中のサーバーは使えない
  3. ③ 非公開サブネットに置けば、保存データの権限設定は不要になる
  4. ④ 非公開サブネットは自動的にデータを暗号化する
解答と解説

正解:①

非公開サブネットは外部から直接到達できない区画です。内部の他の資源からは接続でき、権限や暗号は別に設計します。

次に学ぶこと

次は リージョンと可用性 で、資源を「どの地域に、何か所に分けて」置くかを、可用性の計算とともに学びます。

権限による保存データの守り方は IAMと最小権限、保存場所の公開設定の確認は 責任共有とログ で扱います。HTTPやポートの基本に不安があれば 「HTTPと要求応答」(有料版) に戻ってください。保存形式と保存費用の詳細は 「オブジェクト保存」(有料版) で学びます。

キャリア学習:データサイエンティスト・機械学習エンジニア・DX推進・研究者を目指す人の学習アプリ。164モジュール・984授業を、ブラウザで動くSQLとPythonの演習で。基礎と各分野の最初のモジュールは無料。全部は2,980円の買い切り。

アプリを無料で開く有料版と無料版の違い