コードとしてのインフラストラクチャ (IaC) 向け DevSecOps

Microsoft Sentinel
Azure Monitor
GitHub

ソリューションのアイデア

このアーティクルはソリューションのアイデアです。 このコンテンツにさらに多くの情報 (想定されるユース ケース、代替サービス、実装に関する考慮事項、価格ガイダンスなど) の掲載をご希望の方は、GitHub のフィードバックでお知らせください。

このソリューションのアイデアは、IaC のために GitHub を使う DevSecOps パイプラインと、優れた運用、セキュリティ、コストの最適化のためにワークフローを管理する方法を示しています。

Terraform は Hashicorp の商標です。 このマークを使用することは、保証を意味するものではありません。

アーキテクチャ

IaC 向け DevSecOps のアーキテクチャを示す図。

このアーキテクチャの Visio ファイルをダウンロードします。

データフロー

  1. テスト駆動型開発を使い、IaC テンプレートのようなインフラストラクチャ定義のコード変更を GitHub リポジトリにチェックインします。 IaC の品質をテストするために、単体テスト、統合テスト、PaC を同時に開発します。
  2. pull request (PR) を使い、GitHub Actions を介して自動単体テストをトリガーします。
  3. インフラストラクチャの状態と計画をローカルにデプロイして IaC をテストするように GitHub Actions ワークフロー プロセスを構成します。
  4. コードの品質とセキュリティの問題をスキャンするように GitHub Actions を構成します。 次に、GitHub の CodeQL に基づいて構築されたセキュリティ スキャン ツールを使って、IaC のセキュリティ脆弱性をスキャンします。 脆弱性が検出された場合、GitHub から組織またはリポジトリの所有者とメンテナーにアラートが送信されます。
  5. IaC ツールにより、各環境のリソースがプロビジョニングおよび変更され、サイズ、インスタンス数、その他のプロパティが調整されます。 プロビジョニングされたリソースに対して、IaC の自動統合テストを実行することができます。
  6. インフラストラクチャの手動更新が必要な場合、指定した管理者のアクセス権が変更を実行できるように昇格されます。 変更後、昇格されたアクセス権は削除されます。IaC の調整のために、issue は GitHub のログに記録する必要があります。 調整の手順と可能性は、各 IaC ツールによって異なります。
  7. SecOps により、セキュリティの脅威と脆弱性を継続的に監視し、防御します。 Azure Policy により、クラウド ガバナンスを適用します。
  8. 異常が検出された場合、修正のために自動的に GitHub に issue が提出される必要があります。

コンポーネント

  • GitHub は、バージョン管理とコラボレーションのためのコード ホスティング プラットフォームです。 GitHub のソース管理リポジトリには、すべてのプロジェクト ファイルとそのリビジョン履歴が含まれます。 開発者は、リポジトリ内のコードの投稿、ディスカッション、管理を共同で行うことができます。
  • GitHub Actions には、継続的インテグレーション (CI)、自動テスト、コンテナーのデプロイを対象とする、ビルドとリリースのワークフローのスイートが用意されています。
  • GitHub Advanced Security には、IaC のセキュリティを保護する機能があります。 別のライセンスが必要です。
  • CodeQL には、静的コードに対して動作するセキュリティ スキャン ツールが用意されており、インフラストラクチャの誤った構成を検出できます。
  • Terraform は HashiCorp によって開発されたパートナー製品であり、Azure やその他の環境でインフラストラクチャの自動化を可能にします。
  • Microsoft Defender for Cloud では、統合されたセキュリティ管理と高度な脅威に対する保護がハイブリッド クラウド ワークロード全体に提供されます。
  • Microsoft Sentinel は、クラウドネイティブの SIEM およびセキュリティ オーケストレーション自動応答 (SOAR) ソリューションです。 高度な AI およびセキュリティ分析を使用して、企業全体で脅威を検出し、対応することができます。
  • Azure Policy は、チームがクラウド リソースにルールを適用できるポリシー定義によって、IT の問題を管理し防止するのに役立ちます。 たとえば、プロジェクトで、認識されていない SKU がある仮想マシンをデプロイしようとしている場合は、Azure Policy によって、問題が警告され、デプロイが中止されます。
  • Azure Monitor によって、パフォーマンス メトリックやアクティビティ ログなどのアプリ テレメトリが収集され、分析されます。 このサービスで、不規則な状態が特定されると、アプリと担当者に通知されます。

シナリオの詳細

コードとしてのインフラストラクチャ (IaC) 向け DevSecOps は、概念的には AKS 上のアプリケーション コード向け DevSecOps と似ています。 ただし、IaC の継続的インテグレーションと継続的デリバリー (CI/CD) を管理し、自動化するには、異なるパイプラインとツールのセットが必要です。

IaC を採用する場合、コードを開発するときに自動化テストを作成することが重要です。 このようなテストを実行することで、ワークロードのスケール時に IaC をテストする複雑さを軽減できます。 Terraform の状態や計画のようなローカル インフラストラクチャの構成状態を使って、IaC 向けのテスト駆動型開発 (TDD) を開発できます。 これらの構成状態は、実際のデプロイをエミュレートするものです。 Azure Resource Graph REST API を使って、実際のインフラストラクチャのデプロイに対して IaC の統合テストを実行することができます。

コードとしてのポリシー (PaC) も、規制とコーポレート ガバナンスに準拠したインフラストラクチャを用意する上で重要な手法です。 パイプラインに PaC ワークフローを追加することで、クラウド ガバナンスを自動化することができます。

開発段階の早期にインフラストラクチャをセキュリティで保護することで、インフラストラクチャの不適切な構成によってデプロイ後の攻撃ポイントを広げるリスクを軽減できます。 Synk のようなインフラストラクチャ向け静的コード分析ツールや Aquasecurity tfsec を GitHub の CodeQL を使って統合し、インフラストラクチャ コードのセキュリティ問題をスキャンすることができます。 このプロセスは、静的アプリケーション セキュリティ テスト (SAST) に似ています。

インフラストラクチャをデプロイし、稼働状態になると、特に運用環境では、クラウド構成のドリフトを解決するのが困難になることがあります。

運用環境のクラウド インフラストラクチャをデプロイまたは変更するために、専用のサービス プリンシパルを設定します。 次に、環境の手動構成を可能にする他のすべてのアクセスを削除します。 手動構成が必要な場合は、指定した管理者のアクセス権を昇格し、変更の実行後に昇格したアクセス権を削除します。 開発者が GitHub で issue を提出して変更を調整できるように Azure Monitor を構成する必要があります。 ただし、手動で構成することはできるだけ避けてください。

セキュリティ インシデントを防ぐために、クラウド環境の脅威と脆弱性を継続的に監視することが重要です。 脅威保護とセキュリティ情報イベント管理 (SIEM) のツールを使って、異常なトラフィックを検出することができます。 これらのツールを使うと、セキュリティ管理者に自動的に警告し、GitHub に issue を提出して注意を喚起することができます。

考えられるユース ケース

あなたは、架空の会社 Contoso でマルチクラウド戦略を使う IaC 開発者の中心的なチームの一員です。 あなたは、デプロイのセキュリティと品質を確保するために、IaC 向け DevSecOps を使って新しい Azure ランディング ゾーンにクラウド インフラストラクチャをデプロイしたいと考えています。 また、インフラストラクチャに対するすべての変更を追跡し、監査したいと考えています。

共同作成者

この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。

プリンシパルの作成者:

  • Vito Chin | SR クラウド ソリューション アーキテクト
  • Yee Shian Lee | SR クラウド ソリューション アーキテクト

次のステップ