コンテナー イメージをコードからクラウドにマップする

コンテナー レジストリに格納されているか、Kubernetes クラスターで実行されているコンテナー イメージで脆弱性が特定された場合、最初にコンテナー イメージを構築してから開発者の修復所有者を特定する CI/CD パイプラインをセキュリティ業務従事者がトレースするのが難しい場合があります。 Microsoft Defender クラウド セキュリティ態勢管理 (CSPM) の DevOps セキュリティ機能を使用すると、クラウドネイティブ アプリケーションをコードからクラウドにマップして、開発者の修復ワークフローを簡単に開始し、コンテナー イメージの脆弱性の修復にかかる時間を短縮できます。

前提条件

  • Defender for Cloud がオンボードされている Azure アカウント。 まだ Azure アカウントを持っていない場合は、無料で作成します。

  • Microsoft Defender にオンボードされた Azure DevOps または GitHub 環境は、接続されているすべての Azure DevOps 組織で自動的に共有およびインストールされます。 これにより、すべての Azure パイプラインにタスクが自動的に挿入され、コンテナー マッピング用のデータが収集されます。

  • Azure DevOps の場合、Azure DevOps 組織にインストールされた Microsoft Security DevOps (MSDO) 拡張機能

  • GitHub の場合、GitHub リポジトリで構成された Microsoft Security DevOps (MSDO) アクション。 さらに、GitHub ワークフローには、Defender for Cloud とのフェデレーションのための "id-token: write" アクセス許可が必要です。 例については、この YAMLを参照してください。

  • Defender CSPM が有効になっていること。

  • コンテナー イメージは Docker を使用してビルドする必要があります。Docker クライアントはビルド中、Docker サーバーにアクセスできなければなりません。

コンテナー イメージを Azure DevOps パイプラインからコンテナー レジストリにマップする

Azure DevOps CI/CD パイプラインでコンテナー イメージを構築し、レジストリにプッシュした後、クラウド セキュリティ エクスプローラーを使用してマッピングを確認します。

  1. Azure portal にサインインします。

  2. [Microsoft Defender for Cloud]>[クラウド セキュリティ エクスプローラー] の順に移動します。 クラウド セキュリティ エクスプローラーにコンテナー イメージ マッピングが表示されるまでに最大 4 時間かかることがあります。

  3. 基本的なマッピングを表示するには、[コンテナー イメージ]>+>[プッシュの実行者: コード リポジトリ] の順に選択します。

    コンテナーの基本的なマッピングを見つける方法を示すスクリーンショット。

  4. (省略可能) [コンテナー イメージ] の横にある [+] を選択し、クエリにその他のフィルター ([脆弱性あり] など) を追加して、CVE のあるコンテナー イメージのみをフィルター処理します。

  5. クエリを実行すると、コンテナー レジストリと Azure DevOps パイプラインの間のマッピングが表示されます。 エッジの横にある [...] を選択して、Azure DevOps パイプラインが実行された場所の詳細を表示します。

    コンテナー マッピングの結果に対する高度なクエリを示すスクリーンショット。

コンテナー イメージ マッピングを利用する高度なクエリの例を次に示します。 インターネットに公開されている Kubernetes ワークロードから開始して、重大度の高い CVE を持つすべてのコンテナー イメージをトレースして、コンテナー イメージが構築された Azure DevOps パイプラインに戻り、セキュリティ業務従事者が開発者の修復ワークフローを開始できるようします。

基本的なコンテナー マッピングの結果を示すスクリーンショット。

Note

Azure DevOps 組織が 2023 年 11 月 15 日より前に Azure DevOps コネクタを作成している場合、[組織の設定][拡張機能 > 共有] の順に移動し、コンテナー イメージ マッピング デコレーターをインストールしてください。 組織と共有されている拡張機能が表示されない場合は、次のフォームに入力します。

コンテナー イメージを GitHub ワークフローからコンテナー レジストリにマップする

  1. Defender for Cloud に GitHub コネクタがオンボードされていることを確認します。

  2. 次の MSDO ワークフローを実行します。

name: Build and Map Container Image

on: [push, workflow_dispatch]

jobs:
  build:
    runs-on: ubuntu-latest
    # Set Permissions
    permissions:
      contents: read
      id-token: write
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.8' 
    # Set Authentication to Container Registry of Choice. 
    # The example below is for Azure Container Registry. Amazon Elastic Container Registry and Google Artifact Registry are also supported. 
   - name: Azure Container Registry Login 
        uses: Azure/docker-login@v1 
        with:
        login-server: <containerRegistryLoginServer>
        username: ${{ secrets.ACR_USERNAME }}
        password: ${{ secrets.ACR_PASSWORD }}
    # Build and Push Image
    - name: Build and Push the Docker image 
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: ${{ secrets.IMAGE_TAG }}
          file: Dockerfile
     # Run Mapping Tool in MSDO
    - name: Run Microsoft Security DevOps Analysis
      uses: microsoft/security-devops-action@latest
      id: msdo

GitHub ワークフローでコンテナー イメージを構築し、レジストリにプッシュした後、クラウド セキュリティ エクスプローラーを使用してマッピングを確認します。

  1. Azure portal にサインインします。

  2. [Microsoft Defender for Cloud]>[クラウド セキュリティ エクスプローラー] の順に移動します。 クラウド セキュリティ エクスプローラーにコンテナー イメージ マッピングが表示されるまでに最大 4 時間かかることがあります。

  3. 基本的なマッピングを表示するには、[コンテナー イメージ]>+>[プッシュの実行者: コード リポジトリ] の順に選択します。

    基本的なコンテナー マッピングを示すスクリーンショット。

  4. (省略可能) [コンテナー イメージ] の横にある [+] を選択し、クエリにその他のフィルター ([脆弱性あり] など) を追加して、CVE のあるコンテナー イメージのみをフィルター処理します。

  5. クエリを実行すると、コンテナー レジストリと GitHub ワークフローの間のマッピングが表示されます。 エッジの横にある [...] を選択して、GitHub ワークフローが実行された場所の詳細を表示します。

コンテナー イメージ マッピングを利用する高度なクエリの例を次に示します。 インターネットに公開されている Kubernetes ワークロードから開始して、重大度の高い CVE を持つすべてのコンテナー イメージをトレースして、コンテナー イメージが構築された GitHub ワークフローに戻り、セキュリティ業務従事者が開発者の修復ワークフローを開始できるようします。

基本的なコンテナー マッピングの結果を示すスクリーンショット。

次のステップ