azure-landing-zone-checklist について
BicepまたはTerraformによるデプロイ前に、Microsoft Azure Landing Zone Acceleratorのチェックリストを作成するスキルです。決定事項を集め、CAFに基づく既定案を適用し、サブスクリプションとIP情報を対応付け、Excelで人の確認が必要な項目を示します。
主な機能
- 01Excelチェックリストの読み取りと記入
- 02質問を分けたデプロイ判断の収集
- 03サブスクリプションとALZの役割の対応付け
- 04既存のIPアドレス計画の反映
- 05推奨事項と要確認項目への注記
- 06BicepとTerraformのシートへの対応
活用シーン
- 01ALZ Acceleratorデプロイの準備
- 02インフラ構成の判断をチェックリストに反映
- 03サブスクリプションとネットワークの前提条件確認
- 04人による確認が必要な未決事項の特定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ julianobarbosa/ claude-code-skills --skill azure-landing-zone-checklistインストール後、Claude Code で/azure-landing-zone-checklistを入力して読み込まれたか確認します。
同梱ファイルreferences/alz-best-practices.md
詳細
Azure Landing Zone チェックリストスキル
このスキルは、Microsoft Azure Landing Zone(ALZ)Accelerator のチェックリスト(ALZ Accelerator ツールを使用して Bicep または Terraform で ALZ をデプロイする前に必要なすべての決定事項を記録するスプレッドシート)の記入を支援します。
目標は、すべての決定に根拠があり、ベストプラクティスがデフォルトで適用され、人による入力が必要な項目がユーザーの注意を引くよう明確に示された、記入済みの Excel チェックリストを作成することです。
重要な理由
ALZ Accelerator のチェックリストは、プラットフォームランディングゾーンのデプロイにおける唯一の信頼できる情報源です。誤りがあると、ネットワークの設定ミス、セキュリティ上の欠落、あるいは何時間ものやり直しが発生します。このスキルは、ユーザーの既存のインフラストラクチャ(IP 範囲、サブスクリプション、命名規則)を尊重しながら、Microsoft の Cloud Adoption Framework(CAF)の推奨事項を適用することで、一貫性を確保します。
ワークフロー
フェーズ 1:チェックリストを読む
openpyxl を使用してアップロードされた .xlsx チェックリストを読み込み、その構成を把握します。ALZ チェックリストには通常、次の 3 つのタブがあります。
- Accelerator - Bootstrap:IaC の種類、VCS、サブスクリプション、命名、CI/CD の設定
- Accelerator - Bicep:シナリオの選択、コンポーネントの切り替え、IP アドレス、ポリシー
- Accelerator - Terraform:Bicep と同じ項目に加え、追加オプション(AMBA、Sovereign LZ)
チェックリストを解析して、すでに値が入力されているフィールド(列 F = "Chosen Value")と空欄のフィールドを特定します。これにより、ユーザーがすでに決定した項目と、入力が必要な項目を把握できます。
フェーズ 2:ユーザーに質問する
構造化された質問を通じて決定事項を集めます。ユーザーに負担をかけないよう、3~4 問ずつまとめて質問します。次の順番で優先します。
バッチ 1 — 基本的な決定事項:
- IaC の種類(Bicep または Terraform)
- バージョン管理システム(Azure DevOps、GitHub、またはローカル)
- ネットワークトポロジーのシナリオ(Hub & Spoke と vWAN、単一リージョンと複数リージョン、Azure Firewall と NVA)
- Azure リージョン
バッチ 2 — コンポーネントに関する決定事項:
- デプロイするコンポーネント(DDoS、Private DNS、Bastion、VPN Gateway、ExpressRoute、Zero Trust)
- セキュリティ態勢(AMA、Defender プラン)
バッチ 3 — 環境固有の詳細:
- Azure DevOps / GitHub の組織名とプロジェクト名
- サブスクリプション ID(Management、Connectivity、Identity、Security)
- パイプラインの承認者
- IP アドレス設計(既存のドキュメントがあるか確認します)
ユーザーが「ベストプラクティスを使用して」と言った場合や、決定を委ねた場合は、references/alz-best-practices.md の推奨事項を適用します。推奨事項を提案する理由は必ず説明してください。ユーザーは、理解できる推奨事項を信頼します。
フェーズ 3:サブスクリプションを割り当てる
ユーザーがサブスクリプションの一覧(az account list などから取得)を提示した場合、命名パターンに基づいてサブスクリプションを ALZ の役割に割り当てます。
| パターン | ALZ の役割 |
|---|---|
*mgmt*、*management* | Management |
*connectivity*、*network*、*hub* | Connectivity |
*identity*、*ad*、*entra* | Identity |
*security*、*sentinel*、*defender* | Security |
必要なサブスクリプションが不足している場合(Security が不足していることがよくあります)、黄色でハイライトし、選択肢を説明するコメントを付けます。
- 専用のサブスクリプションを作成する(推奨)
- Management サブスクリプションと共有する(予算に制約がある場合の代替案)
フェーズ 4:IP アドレス設計を統合する
ユーザーが IP に関するドキュメント(Markdown、CSV、Excel、またはテキスト)を提示した場合、解析して次の情報を抽出します。
- サブスクリプションレベルの CIDR ブロック — ALZ のハブ/スポーク VNet に割り当てます
- 既存のハブ VNet の構成 — サブネットの割り当て(Gateway、Firewall、Bastion、共有サービス)を特定します
- オンプレミスのパブリック IP — VPN/ファイアウォールルールの参照用にコメントへ記載します
- AKS ネットワーク — 該当する場合は Pod/サービスの CIDR を記載します
ALZ ハブ VNet には、Connectivity サブスクリプションの CIDR ブロックを使用して、次のサブネット構成を推奨します。
Hub VNet: <connectivity-base>/16
GatewaySubnet: <base>.0.0/27 (30 hosts)
AzureFirewallSubnet: <base>.0.64/26 (62 hosts)
AzureFirewallManagementSubnet:<base>.0.128/26 (62 hosts)
AzureBastionSubnet: <base>.0.192/26 (62 hosts)
Shared Services: <base>.1.0/24 (254 hosts)
DNS Resolver Inbound: <base>.2.0/28
DNS Resolver Outbound: <base>.2.16/28
IP に関するドキュメントが提示されない場合は、ALZ のデフォルトを使用し、確認が必要であることを明示します。
フェーズ 5:チェックリストに記入する
openpyxl を使用して、適切なタブの列 F(「選択した値」)に値を書き込みます。一貫性のある書式を適用してください。
from openpyxl.styles import Font, PatternFill, Alignment
from openpyxl.comments import Comment
# Confirmed values — green background
green_fill = PatternFill('solid', fgColor='CCE5CC')
# Items needing user action — yellow background + red bold text
yellow_fill = PatternFill('solid', fgColor='FFFF00')
action_font = Font(bold=True, color='FF0000', size=10)
# Informational notes — italic yellow background
note_fill = PatternFill('solid', fgColor='FFFFCC')
note_font = Font(italic=True, size=10)
入力するすべてのセルについて:
- 判断理由またはベストプラクティスの参照先を説明するコメントを追加します
- 確定した判断には緑色の塗りつぶしを使用します
- ユーザーの対応が必要な項目(「未定義」「未提供」など)には、黄色の塗りつぶしと赤色のテキストを使用します
- ユーザーによる確認が必要なデフォルト値には、薄い黄色の塗りつぶしと斜体を使用します
タブごとの処理:
ユーザーが選択した IaC に該当するタブだけに記入します。以前の試行で別のタブに値が入力されている場合は、そのタブの値を消去します。アクティブなタブでは、次のように処理します。
- シナリオセクション:選択したシナリオを「はい」、それ以外をすべて「いいえ」に設定します。選択した項目は、より明るい緑色で強調表示します。
- オプションセクション:ユーザーが選択したコンポーネントを適用します。明示的に話し合われていないオプションには、ベストプラクティスのデフォルト値を適用し、その旨をコメントに記載します。
- ブートストラップタブ:IaC の選択にかかわらず、必ず記入します。このタブは共通です。
フェーズ 6:結果を提示する
チェックリストへの記入を保存した後、次の操作を行います。
- 入力した値をすべて示す概要表を出力します
- ユーザーの対応が必要な項目(黄色で強調表示された項目)を一覧表示します
- アーキテクチャ上の考慮事項(例:ALZ のリージョンが既存のインフラストラクチャと異なる場合に必要となるクロスリージョンのピアリング)を指摘します
- ダウンロード用のファイルリンクを提示します
ベストプラクティスの推奨事項
推奨事項の全容については、references/alz-best-practices.md を参照してください。ユーザーから指定がない場合に適用する主要なデフォルト値は次のとおりです。
- プライベートネットワーク:有効(true)(状態を保存するストレージをパブリックにアクセス可能にしてはいけません)
- CI/CD テンプレート専用リポジトリ:有効(true)(コードとパイプライン定義の間にセキュリティ境界を設けます)
- ブランチポリシー:有効(true)(すべての変更に PR を必須とします)
- セルフホストエージェント/ランナー:有効(true)(プライベートネットワークに必要です)
- DDoS 保護:はい(すべての VNet リソースに対するネットワーク層の保護)
- プライベート DNS ゾーン:はい(ハブ・スポーク構成でプライベートエンドポイントを使用するために必要です)
- Azure Bastion:はい(パブリック IP に公開せずに VM へ安全にアクセスできます)
- AMA(Azure Monitoring Agent):有効のままにします(監視を一元化します)
- Defender プラン:有効のままにします(すべての種類のリソースを対象に脅威を検出します)
- ゼロトラスト:はい(最小権限のアクセスとマイクロセグメンテーションを実現します)
- AMBA アラート(Terraform のみ):はい(プラットフォームリソースをプロアクティブに監視します)
- Sovereign Landing Zone:いいえ(コンプライアンス上、明示的に必要な場合を除きます)
クロスリージョンに関する考慮事項
ユーザーの既存のインフラストラクチャが ALZ のデプロイ先とは異なるリージョンにある場合は、ブートストラップタブのリージョンに関するコメントでその点を指摘します。ALZ ハブと既存のハブ・スポークトポロジーとの間のクロスリージョン VNet ピアリングを計画する必要があります。
セル参照マップ
チェックリストの構造は固定されています。行ずれによるバグを避けるため、値を書き込む際は必ず以下の正確なセル参照を使用します。列 F に書き込む前に、列 B(名前)が想定するフィールドと一致していることを必ず確認してください。
Bootstrap タブ(アクセラレーター - Bootstrap)
| 行 | セル | フィールド(列 B) | 構成設定(列 D) |
|---|---|---|---|
| 4 | F4 | Infrastructure as Code | iac_type |
| 5 | F5 | バージョン管理システム | bootstrap_module_name |
| 6 | F6 | スターターモジュール | starter_module_name |
| 8 | F8 | Bootstrap リソースのリージョン | bootstrap_location |
| 9 | F9 | 親管理グループ ID | root_parent_management_group_id |
| 10 | F10 | 管理サブスクリプション ID | subscription_id_management |
| 11 | F11 | 接続サブスクリプション ID | subscription_id_connectivity |
| 12 | F12 | ID サブスクリプション ID | subscription_id_identity |
| 13 | F13 | セキュリティサブスクリプション ID | subscription_id_identity(注:テンプレートの誤記) |
| 15 | F15 | Bootstrap サブスクリプション ID | bootstrap_subscription_id |
| 16 | F16 | リソースの命名:サービス名 | service_name |
| 17 | F17 | リソースの命名:環境名 | environment_name |
| 18 | F18 | リソースの命名:接尾辞番号 | postfix_number |
| 21 | F21 | テンプレートに別のリポジトリを使用する | use_separate_repository_for_templates |
| 22 | F22 | プライベートネットワークを使用する | use_private_networking |
| 23 | F23 | 自分の IP からのストレージアクセスを許可する | allow_storage_access_from_my_ip |
| 24 | F24 | 承認者を適用する | apply_approvers |
| 25 | F25 | ブランチポリシーを作成する | create_branch_policies |
| 28 | F28 | Azure DevOps PAT | azure_devops_personal_access_token |
| 29 | F29 | Azure DevOps エージェント PAT | azure_devops_agents_personal_access_token |
| 30 | F30 | Azure DevOps 組織 | azure_devops_organization_name |
| 31 | F31 | Azure DevOps のレガシー URL | azure_devops_use_organisation_legacy_url |
| 32 | F32 | Azure DevOps プロジェクトを作成する | azure_devops_create_project |
| 33 | F33 | Azure DevOps プロジェクト | azure_devops_project_name |
| 34 | F34 | セルフホストエージェントを使用する | use_self_hosted_agents |
注:行 7、14、19、20、26、27、35、36、41 は空欄またはセクション見出しです。スキップしてください。
Bicep タブ(アクセラレーター - Bicep)— シナリオ
| 行 | セル | シナリオ |
|---|---|---|
| 6 | F6 | マルチリージョン Hub & Spoke + Azure Firewall |
| 7 | F7 | マルチリージョン vWAN + Azure Firewall |
| 8 | F8 | マルチリージョン Hub & Spoke + NVA |
| 9 | F9 | マルチリージョン vWAN + NVA |
| 10 | F10 | 管理グループ、ポリシー、管理のみ |
| 11 | F11 | 単一リージョン Hub & Spoke + Azure Firewall |
| 12 | F12 | 単一リージョン vWAN + Azure Firewall |
| 13 | F13 | 単一リージョン Hub & Spoke + NVA |
| 14 | F14 | 単一リージョン vWAN + NVA |
Bicep タブ — オプション(行 17~30)
| 行 | セル | オプション |
|---|---|---|
| 17 | F17 | リソースの命名規則 |
| 18 | F18 | カスタム管理グループ名 |
| 19 | F19 | DDOS Protection Plan をデプロイする |
| 20 | F20 | Private DNS をデプロイする |
| 21 | F21 | Bastion Host をデプロイする |
| 22 | F22 | VPN Gateway をデプロイする |
| 23 | F23 | ExpressRoute Gateway をデプロイする |
| 24 | F24 | 2 つを超えるリージョンにデプロイする |
| 25 | F25 | IP アドレス指定 |
| 26 | F26 | ポリシー割り当ての適用モードを変更する |
| 27 | F27 | ポリシー割り当てを削除する |
| 28 | F28 | Azure Monitoring Agent を無効にする |
| 29 | F29 | Defender プランを無効にする |
| 30 | F30 | ゼロトラストセキュリティ |
Terraform タブ(Accelerator - Terraform)
Bicep と同じシナリオのレイアウトです(6~14 行)。オプションは 17~32 行です。
| 行 | セル | オプション |
|---|---|---|
| 17 | F17 | リソースの命名規則 |
| 18 | F18 | カスタム管理グループ名 |
| 19 | F19 | DDOS Protection Plan のデプロイ |
| 20 | F20 | Private DNS のデプロイ |
| 21 | F21 | Bastion Host のデプロイ |
| 22 | F22 | VPN Gateway のデプロイ |
| 23 | F23 | ExpressRoute Gateway のデプロイ |
| 24 | F24 | 3 つ以上のリージョンへのデプロイ |
| 25 | F25 | IP アドレス指定 |
| 26 | F26 | ポリシー割り当ての適用モードの変更 |
| 27 | F27 | ポリシー割り当ての削除 |
| 28 | F28 | Azure Monitoring Agent の無効化 |
| 29 | F29 | Azure Monitoring Baseline Alerts (AMBA) のデプロイ |
| 30 | F30 | Defender Plans の無効化 |
| 31 | F31 | ゼロトラストセキュリティ |
| 32 | F32 | Sovereign Landing Zone |
検証方法:値を書き込む前に、セル B{row} を読み取り、想定されるフィールド名と一致することを確認してください。一致しない場合は、シートをスキャンして正しい行を探してください。これにより、テンプレートのバージョンの違いによるデータのサイレント破損を防げます。
出力形式
最終成果物は次の内容を含む .xlsx ファイルです。
- 元のテンプレートの 3 つのタブすべてを保持
- 選択した値を列 F に入力
- 理由とベストプラクティスへの参照を記載したセルコメント
- 色分け:緑(確認済み)、黄色(対応が必要)、薄い黄色(デフォルト値の確認が必要)
- 決定事項と要確認項目をすべて記載した、会話内での明確な概要
注意点
- openpyxl の行インデックスは 1 始まりです — インデックスのずれによるバグは、誤った行を気づかないまま破損させます。確定前に
cell.valueで読み戻して確認してください。 - サブスクリプションの正規表現による照合は、標準外の命名では失敗します(例:
sub-xyz-platform-mgmt)— パターンが一致しない場合は、列挙に切り替えてください。 - リージョン間の考慮事項:リージョン間の VNet ピアリングではエグレス トラフィックに料金が発生します。既定の ALZ テンプレートではこの料金は算出されません。
- Excel のチェックボックスとセルの値:openpyxl ではチェックボックスの状態を書き込めません。チェック済みを示すには、セルの値に "✓" を使用し、名前付き範囲を設定してください。
- サブスクリプションのクォータ反映:要求したクォータの増加は、実際にクォータが適用される前に「Approved」と表示されます。
az vm list-usageで確認してください。