Share via


Azure ランディング ゾーン - Terraform モジュールの設計に関する考慮事項

この記事では、Azure ランディング ゾーン Terraform モジュールを使用する際に考慮すべき重要な領域について説明します。 このモジュールは、クラウド導入フレームワーク (CAF) で詳しく説明されているように、「Azure ランディング ゾーンの概念アーキテクチャ」に基づいて Azure プラットフォームをデプロイして運用するための独自のアプローチを示しています。

Terraform は、宣言型構文を使用してインフラストラクチャ リソースをデプロイする、HashiCorp によって作成されたオープンソースのコードとしてのインフラストラクチャ (IaC) ツールです。 これは拡張可能であり、クロスプラットフォーム サポートを備え、状態追跡を通じて不変のインフラストラクチャを実現できます。


重要

このモジュールは、「Terraform Registry: Azure ランディング ゾーン Terraform モジュール」で入手できます。 これを出発点として使用し、実際のニーズに合わせて構成することができます。

注意

ポータル ベース、ARM テンプレート、Terraform モジュールなど、いくつかのデプロイ テクノロジの実装があります。 デプロイ テクノロジの選択は、結果として得られる Azure ランディング ゾーンのデプロイに影響しません。

ALZ Terraform Accelerator

Terraform を使用して ALZ のデプロイをすぐに開始するには、テンプレートとして使用するように設計された ALZ Terraform Accelerator を利用します。 このリポジトリは、Azure DevOps パイプラインと GitHub アクション ワークフローを使用して、Azure ランディング ゾーン Terraform モジュールのサポート実装を提供します。

ALZ Terraform Accelerator は、3 段階のアプローチに従います。

  1. 前提条件: 資格情報とサブスクリプションを構成する手順。
  2. ブートストラップ: PowerShell スクリプトを実行して、継続的デリバリー環境を生成します。
  3. 実行: 組織のニーズに合わせて (必要に応じて) モジュールを更新し、継続的デリバリーを使用してデプロイします。

ユーザー ガイドから始めて、Azure ランディング ゾーン環境を稼働させる手順を説明します。

設計

Diagram showing the Azure landing zones conceptual architecture.

このアーキテクチャは、Terraform の構成可能な性質を利用し、プライマリ オーケストレーション モジュールで構成されます。 このモジュールにより、Azure ランディング ゾーンの概念アーキテクチャの複数の機能がカプセル化されます。 各機能は、個別にデプロイするか、部分的にデプロイできます。 たとえば、ハブ ネットワークのみ、Azure DDoS Protection のみ、または DNS リソースのみをデプロイできます。 そうする場合は、機能に依存関係があることを考慮する必要があります。

このアーキテクチャでは、オーケストレーター アプローチを使用してデプロイ エクスペリエンスを簡素化しています。 1 つ以上の専用モジュール インスタンスを使用して各機能を実装し、それぞれのインスタンスがアーキテクチャの特定の部分の専用となるようにすることもできます。 正しく構成すれば、これらはすべて実現可能です

モジュール

Terraform の中心となる概念は、モジュールを使用することです。 モジュールを使用すると、デプロイを論理グループに編成できます。 モジュールを使用して、デプロイの複雑な詳細をカプセル化することで、Terraform ファイルの読みやすさが向上します。 また、モジュールを異なるデプロイに簡単に再利用することもできます。

モジュールを再利用できると、ランディング ゾーンの定義とデプロイを行うときに大きな利点となります。 コード内に反復可能で一貫性のある環境を作成でき、大規模なデプロイに必要な労力が削減されます。

Azure ランディング ゾーンの Terraform 実装は、オーケストレーション レイヤーとして機能する 1 つのモジュールを使用して提供されます。 オーケストレーション レイヤーを使用すると、デプロイおよび管理するリソースをモジュールを使用して選択できます。 モジュールを同じ環境で複数回使用すると、複数のリソースを互いに独立してデプロイできます。 これは、さまざまなチームがさまざまな機能やサブリソースの収集を担当する組織で役立ちます。

レイヤーとステージング

この実装では、「Azure ランディング ゾーンの概念アーキテクチャ」の中央のリソース階層に重点を置いています。 この設計は、次の機能が中心となっています。

  • コア リソース
  • 管理リソース
  • 接続のリソース
  • ID リソース

これらのリソースを一緒にデプロイするために、モジュールによってリソースがこれらの機能にグループ化されます。 これらのグループは、実装の論理ステージを形成します。

これらの各機能のデプロイは、機能フラグを使用して制御します。 この方法の利点は、時間をかけて環境に段階的に追加できることです。 たとえば、少数の機能から始めることができます。 準備ができたら、後の段階で残りの機能を追加できます。

コア リソース

モジュールのコア リソース機能は、クラウド導入フレームワークのリソース組織設計領域に対応しています。 「Azure ランディング ゾーンの概念アーキテクチャ」の基本的なリソースがデプロイされます。

Diagram showing the core Azure landing zones architecture deployed by the Terraform module.

アーキタイプ

コア リソース機能内の重要な概念は、アーキタイプを含めることです。

アーキタイプにより、特定のスコープで適用する必要があるポリシー定義、ポリシー セット定義、ポリシー割り当て、ロール定義、ロールの割り当てを定義するための、再利用可能なコードベースのアプローチが提供されます。 Terraform の実装では、これらの決定はアーキタイプ定義としてカプセル化されます。

ランディング ゾーンを作成するために、管理グループがアーキタイプ定義に関連付けられます。 次の例の corp ランディング ゾーンでは、archetype_config に "es_corp" アーキタイプ定義へのポインターがあります。 この定義には、この管理グループに追加されるすべてのポリシーとロールの構成が含まれています。

  es_corp_landing_zones = {
    "contoso-corp" = {
      display_name               = "Corp"
      parent_management_group_id = "contoso-landing-zones"
      subscription_ids           = []
      archetype_config           = {
        archetype_id ="es_corp"
        parameters   = {}
        access_control = {}
    }
  }

組み込みのアーキタイプが要件に合わない場合、モジュールには新しいアーキタイプを作成するか、既存のアーキタイプを変更するためのオプションが用意されています。

管理リソース

モジュールの管理リソース機能は、クラウド導入フレームワークの管理設計領域に対応しています。 この機能により、管理および監視リソースを管理プラットフォームのランディング ゾーンにデプロイするオプションが提供されます。

接続のリソース

モジュールの接続リソース機能により、「Azure ランディング ゾーンの概念アーキテクチャ」の「ネットワーク トポロジと接続」をデプロイするオプションが提供されます。

ID リソース

モジュールの ID リソース機能は、クラウド導入フレームワークの「Azure の ID 管理とアクセス管理の設計領域」に対応しています。 この機能により、ID プラットフォーム ランディング ゾーンでポリシーを構成するオプションが提供されます。

注意

この機能では、リソースはデプロイされません。 deploy_identity_resources 変数が true に設定されている場合、ID プラットフォーム ランディング ゾーン サブスクリプションのリソースを保護する Azure Policy 割り当てが構成されます。

モジュールの説明

このセクションでは、このモジュールによってデプロイされるリソースの概要について説明します。

レイヤー リソースの種類 説明 役に立つリンク
Core 管理グループ 管理グループは、Azure テナントの最上位レベルのリソースです。 管理グループを使用すると、リソースをより簡単に管理できます。 管理グループ レベルでポリシーを適用でき、そのポリシーが下位レベルのリソースに継承されます。 具体的には、管理グループの下のサブスクリプションによって継承される次の項目を管理グループ レベルで適用できます。
  • Azure Policy
  • Azure ロール ベースのアクセス制御 (RBAC) のロールの割り当て
  • コスト管理
Core ポリシーの定義、ポリシーの割り当て、ポリシー セットの定義 DeployIfNotExists (DINE) または変更ポリシーは、ランディング ゾーンを構成するサブスクリプションとリソースが準拠しているようにするために役立ちます。 ポリシーは、ポリシーの割り当てを通じて管理グループに割り当てられます。 ポリシーにより、ランディング ゾーンの管理の負担が軽減されます。 ポリシー セットの定義では、ポリシーのセットがグループ化されます。

すべてのお客様が DINE または変更ポリシーを使用できるわけではありません。 使用できない場合は、カスタム ポリシーに関する CAF ガイダンスに関する記事にガイダンスが提供されています。
Core ロールの定義とロールの割り当て ロールベースのアクセス制御 (RBAC) により、システム内でのユーザー権限の管理が簡略化されます。 ユーザーの権限を管理する代わりに、システムのさまざまなロールに必要な権限を決定します。 Azure RBAC には、いくつかの組み込みロールがあります。 カスタム ロール定義を使用すると、環境にカスタム ロールを作成できます。

ID およびアクセス管理 (IAM) は、クラウド コンピューティングの重要なセキュリティ境界です。 Azure RBAC を使用すると、管理グループとサブスクリプション全体で、サービス プリンシパル、マネージド ID、またはセキュリティ グループに対して、組み込みロールまたはカスタム ロール定義のロール割り当てを実行できます。
管理 Azure Monitor、Azure Automation、Microsoft Sentinel Azure Monitor、Azure Automation、Microsoft Sentinel を使用すると、インフラストラクチャとワークロードを監視および管理できます。 Azure Monitor は、環境からのテレメトリを収集、分析、操作できるソリューションです。

Microsoft Sentinel は、クラウドネイティブのセキュリティ情報イベント管理 (SIEM) です。 これにより次の操作を行うことができます。
  • 収集 - インフラストラクチャ全体でデータを収集します
  • 検出 - 以前に検出されなかった脅威を検出します
  • 応答 - 組み込みのオーケストレーションを使用して本物の脅威に対応します
  • 調査 - 人工知能を使用して脅威を調査します

Azure Automation はクラウドベースの自動化システムです。 次の情報が含まれます。
  • 構成管理 - Linux および Windows 仮想マシンの変更のインベントリと追跡を行い、必要な状態構成を管理します
  • 更新管理 - Windows と Linux のシステム コンプライアンスを評価し、コンプライアンスを満たすためにスケジュールされたデプロイを作成します
  • プロセスの自動化 - 管理タスクを自動化します
接続 こちらに記載されているコア ネットワーク リソースの種類 ネットワーク トポロジは、Azure ランディング ゾーンのデプロイにおける重要な考慮事項です。 CAF では、次の 2 つのコア ネットワーク アプローチに重点を置いています
  • Azure Virtual WAN に基づくトポロジ
  • 従来のトポロジ
接続 Azure DDoS Protection Azure ランディング ゾーンのガイダンスでは、Azure DDoS ネットワーク保護を有効にすることが推奨されています。 このサービスでは、DDoS 攻撃に対するターンキー保護が提供されます。
接続 DNS ゾーン、プライベート DNS ゾーン、プライベート DNS ゾーン Virtual Network リンク プライベート DNS ゾーンは、プライベート エンドポイントの使用をサポートするためにデプロイできます。 プライベート エンドポイントは、仮想ネットワークからプライベート IP アドレスが割り当てられた NIC です。 プライベート IP アドレスを使用すると、Azure Private Link をサポートするサービスと安全に通信できます。 プライベート DNS ゾーンは、サービスの完全修飾ドメイン名 (FQDN) をプライベート エンドポイントのプライベート IP アドレスに解決するように構成できます。

Terraform モジュールの使用

コア リソースのデプロイ

既定では、モジュールによって次の階層がデプロイされます。これは、ランディング ゾーン管理グループのコア セットです。

  • Root
    • プラットフォーム
      • ID
      • 管理
      • 接続
    • ランディング ゾーン
    • 使用停止
    • サンドボックス

SAP、Corp、Online ランディング ゾーンの管理グループは、すべてのユーザーに適用されるわけではないため、既定ではデプロイされません。 これらをデプロイする方法を次に示します。

  1. デモの場合は、SAP、Corp、Online ランディング ゾーンがデプロイされるように deploy_demo_landing_zones 変数を true に設定できます
  2. 運用環境では、次の変数を true に設定することで、必要な管理グループを有効にすることができます
    • deploy_corp_landing_zones
    • deploy_online_landing_zones
    • deploy_sap_landing_zones
  3. カスタム ランディング ゾーン定義を作成することで、独自のカスタム ランディング ゾーン管理グループをデプロイできます

管理リソースのデプロイ

管理リソースをデプロイするには、deploy_management_resources 変数に true を設定し、subscription_id_management 変数にリソースをデプロイする管理サブスクリプションの ID を設定する必要があります。

deploy_management_resources = true
subscription_id_management = <management subscription id>

接続リソースのデプロイ

接続リソースのデプロイには、これらのトポロジをデプロイする方法に関するガイダンスが提供されています。

ID リソースのデプロイ

ID 機能をデプロイするには、deploy_identity_resources 変数に true を設定し、subscription_id_identity 変数にポリシーを構成する ID サブスクリプションの ID を設定する必要があります。

deploy_identity_resources = true
subscription_id_identity = <identity subscription id>

Terraform 実装のカスタマイズ

クラウド導入フレームワークの一部として提供される Azure ランディング ゾーンの実装は、さまざまな要件とユース ケースに適しています。 ただし、多くの場合、特定のビジネス ニーズを満たすためにカスタマイズが必要なシナリオがあります。

Azure ランディング ゾーン Terraform モジュールは、カスタマイズされるデプロイの基礎として使用できます。 これにより、既製のオプションが除外されてしまう特定の必要な変更のためにゼロから作成する必要がなくなり、実装を加速する方法が提供されます。

GitHub logoモジュールのカスタマイズに関する情報は、GitHub リポジトリ wiki の「GitHub: Azure ランディング ゾーン Terraform モジュール - Wiki」で入手できます。 これを出発点として使用し、実際のニーズに合わせて構成することができます。