コンテナー イメージをコードからクラウドにマップする
コンテナー レジストリに格納されているか、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 パイプラインでコンテナー イメージを構築し、レジストリにプッシュした後、クラウド セキュリティ エクスプローラーを使用してマッピングを確認します。
Azure portal にサインインします。
[Microsoft Defender for Cloud]>[クラウド セキュリティ エクスプローラー] の順に移動します。 クラウド セキュリティ エクスプローラーにコンテナー イメージ マッピングが表示されるまでに最大 4 時間かかることがあります。
基本的なマッピングを表示するには、[コンテナー イメージ]>+>[プッシュの実行者: コード リポジトリ] の順に選択します。
(省略可能) [コンテナー イメージ] の横にある [+] を選択し、クエリにその他のフィルター ([脆弱性あり] など) を追加して、CVE のあるコンテナー イメージのみをフィルター処理します。
クエリを実行すると、コンテナー レジストリと Azure DevOps パイプラインの間のマッピングが表示されます。 エッジの横にある [...] を選択して、Azure DevOps パイプラインが実行された場所の詳細を表示します。
コンテナー イメージ マッピングを利用する高度なクエリの例を次に示します。 インターネットに公開されている Kubernetes ワークロードから開始して、重大度の高い CVE を持つすべてのコンテナー イメージをトレースして、コンテナー イメージが構築された Azure DevOps パイプラインに戻り、セキュリティ業務従事者が開発者の修復ワークフローを開始できるようします。
Note
Azure DevOps 組織が 2023 年 11 月 15 日より前に Azure DevOps コネクタを作成している場合、[組織の設定]、[拡張機能 > 共有] の順に移動し、コンテナー イメージ マッピング デコレーターをインストールしてください。 組織と共有されている拡張機能が表示されない場合は、次のフォームに入力します。
コンテナー イメージを GitHub ワークフローからコンテナー レジストリにマップする
Defender for Cloud に GitHub コネクタがオンボードされていることを確認します。
次の 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 ワークフローでコンテナー イメージを構築し、レジストリにプッシュした後、クラウド セキュリティ エクスプローラーを使用してマッピングを確認します。
Azure portal にサインインします。
[Microsoft Defender for Cloud]>[クラウド セキュリティ エクスプローラー] の順に移動します。 クラウド セキュリティ エクスプローラーにコンテナー イメージ マッピングが表示されるまでに最大 4 時間かかることがあります。
基本的なマッピングを表示するには、[コンテナー イメージ]>+>[プッシュの実行者: コード リポジトリ] の順に選択します。
(省略可能) [コンテナー イメージ] の横にある [+] を選択し、クエリにその他のフィルター ([脆弱性あり] など) を追加して、CVE のあるコンテナー イメージのみをフィルター処理します。
クエリを実行すると、コンテナー レジストリと GitHub ワークフローの間のマッピングが表示されます。 エッジの横にある [...] を選択して、GitHub ワークフローが実行された場所の詳細を表示します。
コンテナー イメージ マッピングを利用する高度なクエリの例を次に示します。 インターネットに公開されている Kubernetes ワークロードから開始して、重大度の高い CVE を持つすべてのコンテナー イメージをトレースして、コンテナー イメージが構築された GitHub ワークフローに戻り、セキュリティ業務従事者が開発者の修復ワークフローを開始できるようします。
次のステップ
- Defender for Cloud での DevOps セキュリティの詳細を確認する。