AWS Cloud WAN
ポリシールールと評価順序
タグベースセグメントマッピング
空港のセキュリティチェックと搭乗ゲート振り分けのたとえ話で、複雑なポリシー評価の仕組みを直感的に理解しましょう
🎯 最初に押さえる4つの結論
ルールは番号順に上から評価され、最初に一致したルールだけが適用される(first-match方式)。NACLやファイアウォールと同じ動作。
条件のAND/ORで柔軟に制御。AND=全条件一致、OR=いずれか一致。複雑なマッチングを実現できる。
タグベースで自動的にセグメント振り分け。VPCにタグを付けるだけで、ポリシーが自動的に正しいセグメントへマッピング。
具体的→汎用的の順にルールを配置。具体的なルール(複数条件)を上位に、汎用的なルール(単一条件)を下位に置くのが鉄則。
✈️ たとえ話:空港セキュリティ&搭乗ゲート振り分け
Cloud WANのポリシールールは、国際空港のセキュリティチェックと搭乗ゲート振り分けシステムにそっくりです。
図1: 空港のたとえ話全体像 — 乗客(VPC)がゲート(ルール)を番号順に通過し、ターミナル(セグメント)に振り分けられる
| 空港のたとえ ✈ | Cloud WAN の実際 | ポイント |
|---|---|---|
| セキュリティゲート(#1, #2, #3...) | ポリシールール(Rule 100, 200, 300...) | 番号の小さいゲートから順に通過チェック |
| パスポート+搭乗券の両方確認 | AND条件(tag=Prod かつ Region=us-east-1) | すべての条件を満たす必要がある |
| ビジネスクラスまたはVIP会員 | OR条件(tag=Prod または tag=Staging) | いずれかの条件を満たせばOK |
| スーツケースの荷物タグ | VPCに付けたAWSタグ(Environment=Prod) | 自動的に正しいターミナルへ振り分け |
| VIPラウンジ入場に承認が必要 | 承認要求設定(require-acceptance: true) | 重要セグメントへの接続に承認ワークフロー |
| 搭乗ターミナル(国内線/国際線) | セグメント(Production / Development) | 用途ごとに分離されたネットワーク区画 |
🗺 全体像:VPCライフサイクルと評価フロー
VPCが作成されてからCloud WANのセグメントに配置されるまでの完全なライフサイクルを図解します。
図2: VPCライフサイクル — 作成 → タグ付与 → アタッチメント → ポリシー評価 → セグメント配置
ポリシールール評価の詳細フロー
図3: ポリシールール評価フロー — first-match方式で最初に一致したルールで処理が確定し、STOP
🔢 ルール番号と評価順序(first-match方式)
Cloud WANのポリシールールには番号が割り当てられ、小さい番号から順に評価されます。
最優先
第2優先
第3優先
Default
🔄 NACLとの比較図
Cloud WANのfirst-match方式は、NACLとまったく同じ評価ロジックです。両方を並べて理解しましょう。
図4: NACLもCloud WANも同じfirst-match方式 — 最初に一致したルールで処理が確定し、以降のルールは評価されない
🧰 条件の論理演算子(AND / OR)
各ルールには複数の条件を設定でき、AND(かつ)またはOR(または)で組み合わせられます。
図5: AND条件は「すべて一致」、OR条件は「いずれか一致」— 空港での確認方法の違い
🔎 条件タイプの全体マップ
ポリシールールで使用できるすべての条件タイプを図解します。
図6: 5つの条件タイプ — tag-value, region, account-id, resource-id, any(キャッチオール)
🏷️ タグベースセグメントマッピング
VPCに付けたタグに基づいて、アタッチメントを自動的に適切なセグメントへ振り分けます。空港の荷物タグが正しいベルトコンベアに流れるのと同じです。
図7: タグベースマッピング — VPCのタグ値がポリシーエンジンで照合され、自動的に正しいセグメントへ振り分け
🏷️ タグ命名規則ビジュアルガイド
タグの表記揺れはマッチング失敗の最大の原因です。組織全体で統一しましょう。
図8: タグ命名の統一が自動マッピング成功の鍵 — 表記揺れは配置失敗の最大原因
👤 承認ワークフロー
特定のセグメントへの接続に管理者の承認を必須にできます。VIPラウンジ入場に上司の承認が必要なイメージです。
図9: 承認ワークフロー — 開発環境は自動承認、本番環境は手動承認(またはLambdaで条件付き自動化)
📈 ルール階層設計パターン
ルールを具体的→汎用的の順に並べる設計パターンを図解します。
図10: ピラミッド型ルール配置 — 頂点が最も具体的で優先度が高く、底辺がキャッチオール
💻 設定コード例
{
"attachment-policies": [
{
"rule-number": 100,
"description": "Production VPCs in us-east-1",
"conditions": [
{ "type": "tag-value", "operator": "equals",
"key": "Environment", "value": "Production" },
{ "type": "region", "operator": "equals",
"value": "us-east-1" }
],
"condition-logic": "and",
"action": {
"association-method": "tag",
"segment": "production",
"require-acceptance": true
}
},
{
"rule-number": 200,
"description": "All Development VPCs",
"conditions": [
{ "type": "tag-value", "operator": "equals",
"key": "Environment", "value": "Development" }
],
"condition-logic": "or",
"action": {
"association-method": "tag",
"segment": "development",
"require-acceptance": false
}
},
{
"rule-number": 999,
"description": "Default catch-all",
"conditions": [ { "type": "any" } ],
"condition-logic": "or",
"action": {
"association-method": "constant",
"segment": "default",
"require-acceptance": false
}
}
]
}
AWSTemplateFormatVersion: '2010-09-09'
Resources:
CoreNetwork:
Type: AWS::NetworkManager::CoreNetwork
Properties:
GlobalNetworkId: !Ref GlobalNetwork
PolicyDocument:
version: "2021.12"
segments:
- name: production
require-attachment-acceptance: true
- name: development
require-attachment-acceptance: false
- name: default
attachment-policies:
- rule-number: 100
conditions:
- type: tag-value
key: Environment
value: Production
- type: region
value: us-east-1
condition-logic: and
action:
association-method: tag
segment: production
- rule-number: 200
conditions:
- type: tag-value
key: Environment
value: Development
action:
association-method: tag
segment: development
- rule-number: 999
conditions:
- type: any
action:
association-method: constant
segment: default
resource "aws_networkmanager_core_network" "main" {
global_network_id = aws_networkmanager_global_network.main.id
policy_document = jsonencode({
version = "2021.12"
segments = [
{ name = "production",
require-attachment-acceptance = true },
{ name = "development",
require-attachment-acceptance = false },
{ name = "default" }
]
attachment-policies = [
{
rule-number = 100
condition-logic = "and"
conditions = [
{ type = "tag-value", key = "Environment",
value = "Production", operator = "equals" },
{ type = "region", value = "us-east-1",
operator = "equals" }
]
action = { association-method = "tag",
segment = "production",
require-acceptance = true }
},
{
rule-number = 200
conditions = [
{ type = "tag-value", key = "Environment",
value = "Development", operator = "equals" }
]
action = { association-method = "tag",
segment = "development" }
},
{
rule-number = 999
conditions = [ { type = "any" } ]
action = { association-method = "constant",
segment = "default" }
}
]
})
}
✅ ベストプラクティス vs ❌ アンチパターン
✅ ベストプラクティス
❌ アンチパターン
🔧 トラブルシューティング判定フロー
問題発生時の判定フローチャートで、原因を素早く特定しましょう。
図11: トラブルシューティング判定フロー — 3つのチェックポイントで原因を素早く特定
📚 試験対策(ANS-C01 / SAP-C02)
「ルール100と200の両方に一致する場合は?」→ ルール100のみ適用。NACLと同じ動作を問う問題が頻出。
「tag=Prod AND Region=us-east-1」vs「tag=Prod OR Region=us-east-1」の結果の違いを正確に説明できるか。
「100以上のVPCを効率的にセグメント分けする方法は?」→ タグベースのアタッチメントポリシー。
「本番への意図しないVPC接続を防ぐ方法は?」→ require-acceptance: true。
「複数条件ルールと単一条件ルールの配置順は?」→ 具体的(複数条件)を上位に。