Azure Policy 割り当ての安全なデプロイ

環境が拡大するにつれて、段階的な露出制御を備えた、制御された継続的デプロイ (CD) パイプラインの需要も増加します。 そのため、Microsoft では、DevOps チームが安全なデプロイ プラクティス (SDP) フレームワークに従うことをお勧めしています。 Azure Policy の定義と割り当ての安全なデプロイは、ポリシー リソースの意図しない動作の影響を制限するのに役立ちます。

Azure Policy を使用した SDP の実装の大まかなアプローチは、重要なクラウド インフラストラクチャに影響を与える前に初期の段階で環境に影響を与えるポリシーの変更を検出するために、リング単位でポリシー割り当てを徐々にロールアウトするというものです。

デプロイのリングは、さまざまな方法で編成できます。 このハウツー チュートリアルでは、リングは、異なる Azure リージョンで分割されています。"リング 0" は、重要ではないトラフィックの少ない場所を表し、"リング 5" は、最も重要でトラフィックの最も多い場所を示します。

拒否または追加の効果を持つ Azure Policy 割り当てを安全にデプロイするための手順

deny または append のポリシー効果を使用する Azure Policy 割り当てに SDP フレームワークを適用する方法を説明していくなかで、次のフローチャートをリファレンスとして使用します。

注意

Azure ポリシー効果の詳細については、「効果のしくみを理解する」を参照してください。

Flowchart with steps one through eight showing safe deployment practices deployment of a new Azure Policy definition.

フローチャートのステップ番号:

  1. ポリシー定義を選択したら、すべての展開リングを含む最上位レベルのスコープでポリシーを割り当てます。 "リソース セレクター" を適用し、"kind": "resource location" プロパティを使用して最も重要度の低いリングに適用対象を絞り込みます。 "割り当てのオーバーライド" を使用して audit 効果の種類を構成します。 eastUS の場所と audit の効果を使用するサンプル セレクター:

    "resourceSelectors": [{ 
      "name": "SDPRegions", 
      "selectors": [{
          "kind": "resourceLocation",
          "in": [ "eastUS" ] 
      }]
    }], 
    "overrides":[{ 
      "kind": "policyEffect", 
      "value": "Audit" 
    }] 
    
  2. 割り当てがデプロイされ、最初のコンプライアンス スキャンが完了したら、コンプライアンスの結果が期待どおりであることを検証します。

    コンプライアンス チェックを実行する自動テストも構成する必要があります。 コンプライアンス チェックには、次のロジックが含まれている必要があります。

    • コンプライアンスの結果を収集する
    • コンプライアンスの結果が期待どおりの場合は、パイプラインを続行する
    • コンプライアンスの結果が期待どおりでない場合は、パイプラインを失敗とし、デバッグを開始する

    たとえば、特定の継続的インテグレーション/継続的デプロイ (CI/CD) パイプライン内で他のツールを使用して、コンプライアンス チェックを構成できます。

    ロールアウトの各段階で、アプリケーションの正常性チェックによって、サービスの安定性とポリシーの影響を確認する必要があります。 アプリケーションの構成が原因で結果が期待どおりでない場合は、必要に応じてアプリケーションをリファクターします。

  3. リソース セレクターのプロパティ値を展開して次のリングの場所を含めるとともに、 想定されるコンプライアンス結果とアプリケーションの正常性を検証して、繰り返します。 場所の値を追加したセレクターの例を以下に示します。

    "resourceSelectors": [{ 
      "name": "SDPRegions", 
      "selectors": [{
          "kind": "resourceLocation",
          "in": [ "eastUS", "westUS"] 
      }]
    }]
    
  4. audit モードを使用してポリシーがすべてのリングに正常に割り当てられたら、パイプラインはポリシー効果を deny に変更するタスクをトリガーし、リソース セレクターを "リング 0" に関連付けられている場所にリセットする必要があります。 1 つのリージョンと効果を deny に設定したセレクターの例を以下に示します。

    "resourceSelectors": [{ 
      "name": "SDPRegions", 
      "selectors": [{
          "kind": "resourceLocation",
          "in": [ "eastUS" ] 
      }]
    }], 
    "overrides":[{ 
      "kind": "policyEffect", 
      "value": "Deny" 
    }] 
    
  5. 効果が変更されたら、自動テストでは、想定どおりに適用されているかどうかをチェックする必要があります。

  6. リソース セレクターの構成にリングを追加して、繰り返します。

  7. 運用環境のすべてリングに対してこのプロセスを繰り返します。

modify または deployIfNotExists 効果を使用してAzure Policy 割り当てを安全にデプロイするための手順

modify 効果や deployIfNotExists 効果を使用するポリシーの手順では、前に説明した手順と同様に、"適用モード" を使用して修復タスクをトリガーする追加のアクションを使用します。 手順 5 から 9 が変更された次のフローチャートを確認してください。

Flowchart showing steps 5 through 9 in the Azure Policy safe deployment practices workflow.

フローチャートのステップ番号:

  1. ポリシー定義を選択したら、すべての展開リングを含む最上位レベルのスコープでポリシーを割り当てます。 "リソース セレクター" を適用し、"kind": "resource location" プロパティを使用して最も重要度の低いリングに適用対象を絞り込みます。 DoNotEnforce への割り当ての "適用モード" を構成します。 eastUS の場所と、enforcementModeDoNotEnforce として使用するサンプル セレクターは次のとおりです。

    "resourceSelectors": [{ 
      "name": "SDPRegions", 
      "selectors": [{
          "kind": "resourceLocation",
          "in": [ "eastUS" ] 
      }]
    }], 
    "enforcementMode": "DoNotEnforce"
    
  2. 割り当てがデプロイされ、最初のコンプライアンス スキャンが完了したら、コンプライアンスの結果が期待どおりであることを検証します。

    コンプライアンス チェックを実行する自動テストも構成する必要があります。 コンプライアンス チェックには、次のロジックが含まれている必要があります。

    • コンプライアンスの結果を収集する
    • コンプライアンスの結果が期待どおりの場合は、パイプラインを続行する
    • コンプライアンスの結果が期待どおりでない場合は、パイプラインを失敗とし、デバッグを開始する

    コンプライアンス チェックは、継続的インテグレーションと継続的デプロイ (CI/CD) パイプライン内の他のツールを使用して構成できます。

    ロールアウトの各段階で、アプリケーションの正常性チェックによって、サービスの安定性とポリシーの影響を確認する必要があります。 アプリケーションの構成が原因で結果が期待どおりでない場合は、必要に応じてアプリケーションをリファクターします。

    また、既存の準拠していないリソースを修復するには、修復タスクをトリガーすることもできます。 修復タスクによってリソースが想定どおりにコンプライアンスに移行していることを確認します。

  3. リソース セレクターのプロパティ値を展開して次のリングの場所を含めるとともに、想定されるコンプライアンス結果とアプリケーションの正常性を検証して、繰り返します。 場所の値を追加したセレクターの例を以下に示します。

    "resourceSelectors": [{ 
      "name": "SDPRegions", 
      "selectors": [{
          "kind": "resourceLocation",
          "in": [ "eastUS", "westUS"] 
      }]
    }]
    
  4. DoNotEnforce モードを使用してすべてのリングにポリシーを正常に割り当てたら、パイプラインによって、ポリシー enforcementMode を "既定の" 有効化に変更するタスクがトリガーされ、リソース セレクターは Ring 0 に関連付けられている場所にリセットされます。 1 つのリージョンと効果を deny に設定したセレクターの例を以下に示します。

    "resourceSelectors": [{ 
      "name": "SDPRegions", 
      "selectors": [{
          "kind": "resourceLocation",
          "in": [ "eastUS" ] 
      }]
    }], 
    "enforcementMode": "Default",
    
  5. 効果が変更されたら、自動テストでは、想定どおりに適用されているかどうかをチェックする必要があります。

  6. リソース セレクターの構成にリングを追加して、繰り返します。

  7. 運用環境のすべてリングに対してこのプロセスを繰り返します。

次のステップ