「本番のセキュリティ要件で、tfstateを置くStorage Accountを閉域化(パブリックアクセス無効+Private Endpoint)したら、terraform planが急にタイムアウトや403で落ちるようになった」——閉域環境でTerraformを回すとき、多くの人がここで詰まります。
この記事では、Managed DevOps Pool(MDP)を使って閉域ネットワーク経由で安全にTerraformを実行するための考え方を、要点だけ整理しました。詳しい構築手順(4ステップ)はブログにまとめています。
📘 VNet・ストレージ閉域化・MDP・Service Connectionの具体的な設定手順はこちら
Terraformのパイプラインを閉域化した環境で実行する方法
なぜ今、閉域ネットワークが「標準」なのか
ひと昔前まで、システム全体を閉域に閉じ込める構成は、金融や医療など一部の大規模システムに限られた話でした。
しかし現在は、小・中規模のアプリでも本番環境の閉域化が主流になりつつあります。セキュリティ要件の厳格化に伴い、「パブリックアクセス無効+Private Endpoint」がデフォルトの選択肢になってきました。
つまずきの正体は「経路」と「権限」の2つ
tfstateを置くStorageを閉域化したときに起きるトラブルは、原因がシンプルに切り分けられます。
- タイムアウト → ネットワーク経路 の問題(閉域Storageに到達できていない)
- 403 認可エラー → RBAC権限 の問題(到達できても権限がない)
この2つのレイヤーを順にクリアすれば、閉域パイプラインは必ず動きます。逆に言うと、「経路の確立」と「正しいRBAC付与」の両方 が揃わないと動きません。
Managed DevOps Pool(MDP)という選択肢
閉域環境でCI/CDを回すには、従来は セルフホストエージェント をVNet内に立てて運用管理する必要がありました。これがなかなかの手間です。
Managed DevOps Pool(MDP) は、この運用管理コストを大きく下げてくれます。VNetに接続したエージェントプールをマネージドで用意できるので、「閉域Storageに到達できるエージェント」を自前で維持しなくて済みます。
tfstateはどこに置くべきか
ちなみに、tfstateの保管場所は選択肢がいくつかあります。
- ローカルPC … 個人検証用。チーム開発では不可
- AWS S3 / Terraform Cloud … 使えるが、Azure閉域環境なら経路が増える
- Azure Storage Account(推奨) … 同じAzure内で閉域完結できる
Azureで閉じた環境を組むなら、tfstateもAzure Storageに置いて閉域完結させるのが素直です。
構築手順の詳細はブログで
この記事では「なぜ詰まるのか」と「考え方」に絞りました。実際の構築は、次の4ステップで進めます(ブログで図解つき・コマンド例つきで解説しています)。
- VNetとサブネットの作成
- ストレージアカウントの作成と閉域化
- Managed DevOps Pool(MDP)の作成
- Azure DevOps の Service Connection設定
閉域化は一見複雑ですが、「経路」と「権限」の2レイヤーに分けて考えれば確実に構築できます。同じところで詰まっている方の参考になれば嬉しいです。
最後まで読んでいただきありがとうございました。参考になれば LGTM で応援いただけると励みになります🙌