コンテナー イメージをコードからクラウドにマップする
コンテナー レジストリに格納されているか、Kubernetes クラスターで実行されているコンテナー イメージで脆弱性が特定された場合、最初にコンテナー イメージを構築してから開発者の修復所有者を特定する CI/CD パイプラインをセキュリティ業務従事者がトレースするのが難しい場合があります。 Microsoft Defender クラウド セキュリティ態勢管理 (CSPM) の DevOps セキュリティ機能を使用すると、クラウドネイティブ アプリケーションをコードからクラウドにマップして、開発者の修復ワークフローを簡単に開始し、コンテナー イメージの脆弱性の修復にかかる時間を短縮できます。
前提条件
Defender for Cloud がオンボードされている Azure アカウント。 まだ Azure アカウントを持っていない場合は、無料で作成します。
Azure DevOps の場合:
Microsoft Security DevOps (MSDO) 拡張機能は、Azure DevOps 組織にインストールする必要があります。
Microsoft Defender for DevOps 拡張機能が共有され、接続されているすべての Azure DevOps 組織にインストールされていることを確かめます。 新しくオンボードされたコネクタの場合、これは自動的に行われます。 この拡張機能では、コンテナー マッピング用のデータを収集するために、すべての Azure Pipelines にタスクを自動的に挿入します。
クラシック パイプラインはサポートされなくなったので、YAML パイプラインを使用する必要があります。
GitHub の場合:
Microsoft Security DevOps (MSDO) アクションは、GitHub ワークフローで構成する必要があります。
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 セキュリティの詳細を確認する。