Microsoft Defender for Cloud でのエージェントレス コード スキャン
Microsoft Defender for Cloud のエージェントレス コード スキャンでは、Azure DevOps 内のすべてのリポジトリに対して高速でスケーラブルなセキュリティ カバレッジが提供されます。 コード内の脆弱性とコードとしてのインフラストラクチャ (IaC) のセットアップがすばやく検出され、エージェントや、継続的インテグレーションと継続的デプロイ (CI/CD) パイプラインの変更は必要ありません。 このアプローチにより、単一の Azure DevOps コネクタによるセットアップとメンテナンスが簡単になり、広範なカバレッジ、継続的な分析情報、アクションにつながるセキュリティ調査結果が提供されます。 これにより、セキュリティ チームと開発チームは、開発ワークフローを中断することなく、リスクをスムーズに修正することに集中できます。
前提条件
リリース状態: パブリック プレビュー
サポートされているユース ケース:
クラウド: Azure 商用クラウド
サポートされているリージョン: オーストラリア東部、カナダ中部、米国中部、東アジア、米国東部、北ヨーロッパ、スウェーデン中部、英国南部、西ヨーロッパ
サポートされている環境: Azure DevOps コネクタ
ロールとアクセス許可:
コネクタの設定と構成のため:
- プロジェクト コレクション管理者: 初期セットアップを実行するために Azure DevOps で必要です。
- サブスクリプション共同作成者: コネクタを作成して構成するために Azure サブスクリプションで必要です。
セキュリティの結果を表示するため:
- セキュリティ管理者: セキュリティ設定、ポリシー、アラートを管理できますが、コネクタは変更できません。
- セキュリティ閲覧者: 推奨事項、アラート、ポリシーを表示できますが、変更することはできません。
主な利点
- プロアクティブなリスク管理: 開発プロセスの早い段階でリスクを特定します。 これにより、セキュリティで保護されたコーディング プラクティスがサポートされ、運用環境に達する前に脆弱性が減ります。
- 簡単なオンボード: 最小限の構成ですばやく設定でき、パイプラインの変更はありません。
- エンタープライズ規模の一元管理: 1 つのコネクタを使って、複数のリポジトリでコードを自動的にスキャンします。 これにより、大きな環境のための広範なカバレッジが提供されます。
- 速やかな修復のためのすばやい分析情報: オンボードの直後にアクションにつながる脆弱性分析情報を受け取ります。 これにより、すばやく修正でき、露出時間が短縮されます。
- 開発者に優しくシームレス: 継続的インテグレーションと継続的デプロイ (CI/CD) のパイプラインとは独立して動作し、変更や開発者の直接的関与は必要ありません。 これにより、開発者の生産性やワークフローを中断することなく、継続的なセキュリティ監視が可能になります。
リスク検出機能
エージェントレス コード スキャンにより、コードとコードとしてのインフラストラクチャ (IaC) テンプレートの両方についてのセキュリティに関する推奨事項が提供されて、セキュリティが向上します。 これは、コネクタを通じて提供される基本的なクラウド セキュリティ態勢管理 (CSPM) のセキュリティに関する推奨事項に加えて提供されます。 主な検出機能は次のとおりです。
- コードの脆弱性: 複数のプログラミング言語で一般的なコーディング エラー、安全でないコーディング手法、既知の脆弱性を見つけます。
- コードとしてのインフラストラクチャの構成ミス: 安全でないデプロイにつながる可能性がある IaC テンプレートでの誤ったセキュリティ構成を検出します。
コネクタを作成すると、リポジトリ、パイプライン、サービス接続に関する基本的なセキュリティ推奨事項のセットが提供され、セキュリティが強化されます。
スキャン ツール
エージェントレス コード スキャンでは、さまざまなオープンソース ツールを使って、コードおよびコードとしてのインフラストラクチャ (IaC) テンプレートの脆弱性と構成の誤りが検出されます。
ツール | サポートされている IaC と言語 | ライセンス |
---|---|---|
Bandit | Python | Apache 2.0 |
Checkov | Terraform IaC テンプレート、Terraform プラン ファイル、AWS CloudFormation テンプレート、Kubernetes マニフェスト ファイル、Helm チャート ファイル、Dockerfile、Azure Resource Manager (ARM) IaC テンプレート、Azure Bicep IaC テンプレート、AWS SAM テンプレート (サーバーレス アプリケーション モデル)、Kustomize ファイル、サーバーレス フレームワーク テンプレート、OpenAPI 仕様ファイル | Apache 2.0 |
ESLint | JavaScript、TypeScript、JSX、TSX | MIT |
Template Analyzer | ARM IaC テンプレート、Bicep IaC テンプレート | MIT |
Terrascan | Terraform IaC テンプレート (HCL2)、Kubernetes マニフェスト ファイル (YAML/JSON)、Dockerfile、AWS CloudFormation テンプレート (YAML/JSON)、Azure ARM IaC テンプレート、Helm チャート ファイル (v3)、Kustomize ファイル | Apache 2.0 |
これらのツールは、さまざまな言語と IaC フレームワークをサポートし、コードベース全体のセキュリティ分析を徹底的に行います。
サポートされているプラットフォームとファイルの種類
バージョン コントロール システム
- Azure DevOps: Azure DevOps コネクタ経由で接続されたリポジトリの完全なサポート。
プログラミング言語
- Python
- JavaScript/TypeScript
コードとしてのインフラストラクチャ (IaC) のプラットフォームと構成
IaC プラットフォーム | サポートされているファイルの種類 | ノート |
---|---|---|
Terraform | .tf 、.tfvars |
.tfvars 内の変数ファイルなど、HCL2 言語での Terraform IaC テンプレートをサポートします。 |
Terraform プラン | JSON ファイル | 分析とスキャンに使われる、計画された構成を表す JSON ファイルを含みます。 |
AWS CloudFormation | JSON、YAML ファイル | AWS リソースを定義するための AWS CloudFormation テンプレートをサポートします。 |
Kubernetes | YAML、JSON ファイル | クラスターでの構成を定義するための Kubernetes マニフェスト ファイルをサポートします。 |
Helm | Helm チャート ディレクトリ構造、YAML ファイル | Helm の標準チャート構造に従います。Helm v3 チャート ファイルをサポートします。 |
Docker | Dockerfile という名前のファイル | コンテナー構成のための Dockerfile をサポートします。 |
Azure ARM テンプレート | JSON ファイル | JSON 形式の Azure Resource Manager (ARM) IaC テンプレートをサポートします。 |
Azure Bicep | .bicep ファイル | ARM 用のドメイン固有言語 (DSL) である Bicep IaC テンプレートをサポートします。 |
AWS SAM | YAML ファイル | サーバーレス リソース用の AWS サーバーレス アプリケーション モデル (SAM) テンプレートをサポートします。 |
Kustomize | YAML ファイル | Kubernetes カスタマイズ (Kustomize) 用の構成ファイルをサポートします。 |
Serverless Framework | YAML ファイル | サーバーレス アーキテクチャの定義でサーバーレス フレームワーク用のテンプレートをサポートします。 |
OpenAPI | YAML、JSON ファイル | RESTful API を定義するための OpenAPI 仕様ファイルをサポートします。 |
Azure DevOps 組織でエージェントレス コード スキャンを有効にする
Azure DevOps 組織を Defender for Cloud に接続して、エージェントレス コード スキャンを有効にするには、「Azure DevOps 組織を接続する」の手順を参照してください。 次に示す迅速で簡単なセットアップ プロセスのビジュアルでは、シームレスなオンボードのための各ステップが案内されています。
エージェントレス コード スキャンのしくみ
エージェントレス コード スキャンは、CI/CD パイプラインとは独立して機能します。 Azure DevOps コネクタを使って、コードおよびコードとしてのインフラストラクチャ (IaC) の構成が自動的にスキャンされます。 パイプラインを変更したり、拡張機能を追加したりする必要はありません。 このセットアップにより、複数のリポジトリを対象にした広範で継続的なセキュリティ分析が可能になります。 処理された結果は、Microsoft Defender for Cloud に直接表示されます。
スキャン プロセス
コネクタ内でエージェントレス コード スキャン機能を有効にすると、次の手順でスキャン プロセスが行われます。
- リポジトリの検出: システムは、コネクタの作成直後とその後 8 時間ごとに、Azure DevOps コネクタを介してリンクされているすべてのリポジトリを自動的に識別します。
- コードの取得: コネクタ セットアップ後の初回と、その後 3 から 4 日ごとに、分析のために各リポジトリの既定の (メイン) ブランチから最新のコードを安全に取得します。
- 分析: システムは、Microsoft Defender for Cloud 内で管理および更新されている一連の組み込みスキャン ツールを使って、コードと IaC テンプレートに存在する脆弱性と構成ミスを検出します。
- 検出結果の処理: Defender for Cloud のバックエンドを介してスキャンの検出結果を処理し、アクションにつながるセキュリティの推奨事項を作成します。
- 結果の配信: システムは、Defender for Cloud のセキュリティの推奨事項として検出結果を示し、セキュリティ チームが問題を確認して対処できるようにします。
スキャンの頻度と期間
- スキャンの頻度:
- リポジトリ、パイプライン、サービス接続のセキュリティ態勢は、コネクタの作成時と、その後の 8 時間ごとに評価されます。
- システムは、コネクタが作成された後と、その後の 3 日から 4 日ごとに、コードおよびコードとしてのインフラストラクチャ (IaC) テンプレートで脆弱性をスキャンします。
- スキャンの期間: 通常、スキャンはリポジトリのサイズと複雑さに応じて 15 から 60 分以内に完了します。
スキャン結果の表示と管理
スキャンが完了すると、ユーザーは Microsoft Defender for Cloud 内でセキュリティの検出結果にアクセスできます。
アクセスの結果
Microsoft Defender for Cloud の [セキュリティに関する推奨事項] タブに移動します。
次のような検出結果を含む推奨事項のリストを確認します。
Azure DevOps リポジトリでコード スキャンの検出結果を解決する必要がある - コード リポジトリで見つかった脆弱性を示します。
Azure DevOps リポジトリでコードとしてのインフラストラクチャ スキャンの検出結果を解決する必要がある - リポジトリ内の IaC テンプレート ファイルで検出されたセキュリティの不適切な構成を指します。
Azure DevOps コネクタによって生成されるその他のセキュリティに関する推奨事項には、次のようなものがあります。
- Azure DevOps リポジトリで Azure DevOps の GitHub Advanced Security (GHAzDO) を有効にする必要がある
- Azure Pipelines はフォークのビルドに使用できるシークレットを保持してはならない
- Azure DevOps サービス接続ですべてのパイプラインへのアクセスを許可しないこと
- シークレット変数を含む Azure DevOps 変数グループですべてのパイプラインへのアクセスを許可しないこと
- Azure DevOps クラシック Azure サービス接続を使用してサブスクリプションにアクセスしないこと
- (プレビュー) Azure DevOps リポジトリはコードのプッシュに対して 2 人以上のレビュー担当者の承認を求める必要がある
- (プレビュー) Azure DevOps リポジトリは要求者が自身の pull request を承認できないようにする必要がある
- (プレビュー) Azure DevOps Projects はクラシック パイプラインの作成を無効にする必要がある
- Azure DevOps セキュア ファイルですべてのパイプラインへのアクセスを許可しないこと
推奨事項を選んで、影響を受けるファイル、重大度レベル、修復ガイダンスなどの詳細情報を確認します。
エージェントレス コード スキャンとパイプライン内スキャンの違い
エージェントレス コード スキャンと、Microsoft Security DevOps 拡張機能を使うパイプライン内スキャンは、どちらも Azure DevOps 内でのセキュリティ スキャンを提供します。 これらは異なるニーズに対応しますが、問題なく併用できます。 次の表は、セキュリティと開発のニーズに適したオプションの選択に役立つよう、主な違いがよくわかるように示したものです。
特徴 | エージェントレス コード スキャン | パイプライン内スキャン |
---|---|---|
適したユース ケース | 開発者に対する中断を最小限にして幅広いカバレッジを提供します | カスタマイズ可能なコントロールにより、詳細なパイプライン統合スキャンを提供します |
スキャンのスコープとカバレッジ | コードとしてのインフラストラクチャ (IaC) とコードの脆弱性のスキャンに重点を置き、3 日から 4 日ごとにスケジュールされます | バイナリやコンテナー イメージを含む広範なカバレッジを提供し、パイプラインの実行のたびにトリガーされます |
セットアップと構成 | コネクタを作成した後、それ以上セットアップする必要はありません | CI/CD パイプラインごとに手動でインストールと構成を行う必要があります |
パイプラインの統合 | ワークフローの変更なしに、(CI/CD) パイプラインとは独立して実行します | CI/CD パイプライン内に統合され、パイプラインごとに構成する必要があります |
スキャナーのカスタマイズ | スキャナーをカスタマイズしたり、選択的に実行したりすることはできません | 特定のスキャナー、カテゴリ、言語、秘密度レベル、Microsoft 以外のツールを使ってカスタマイズできます |
結果とフィードバック | Defender for Cloud 内の検出結果へのアクセスを提供します | CI/CD パイプライン内で準リアルタイムのフィードバックを提供し、Defender for Cloud で結果を見ることもできます |
中断と失敗の条件 | ビルドを中断することはできません | セキュリティ検出結果の重大度に基づいてビルドを中断するように構成できます |
スケーラビリティとパフォーマンスへの影響
エージェントレス コード スキャンでは、サブスクリプションにリソースは作成されず、パイプライン プロセス中にスキャンを行う必要はありません。 Azure DevOps REST API を使ってメタデータとコードがプルされます。 つまり、API 呼び出しは Azure DevOps のレート制限にカウントされますが、データ転送コストが直接発生することはありません。 サービスがスキャンを管理し、開発環境を中断することなく、Azure DevOps のレート制限内に収まるようにします。 この方法は、DevOps のワークフローに影響を与えることなく、複数のリポジトリを対象とする効率的で高パフォーマンスのスキャンを提供します。 詳しくは、Azure DevOps のレートと使用の制限に関する記事をご覧ください。
エージェントレス コード スキャンのデータ セキュリティ、コンプライアンス、アクセス制御
Microsoft Defender for Cloud のエージェントレス コード スキャン サービスは、厳密なデータ セキュリティとプライバシー対策を実装して、コードの安全で準拠した処理を保証します。
- データ暗号化とアクセス制御: システムは、業界標準のプロトコルを使って転送中のすべてのデータを暗号化します。 認可された Defender for Cloud サービスのみがコードにアクセスできます。
- データ所在地とデータ保持: データ保護の法律に準拠するため、スキャンは Azure DevOps コネクタと同じ場所で行われます (米国または EU)。 システムはスキャン中にのみコードを処理し、後で安全に削除して、長期間保存することはありません。
- リポジトリへのアクセス: サービスは、Azure DevOps によるスキャンの実行用にセキュリティ保護されたアクセス トークンを生成します。 このトークンを使うと、サブスクリプションにリソースを作成することなく、必要なメタデータとコードを取得できます。 Defender for Cloud のコンポーネントのみがアクセスでき、データの整合性が保護されます。
- コンプライアンスのサポート: このサービスは、データ処理とプライバシーに関する規制とセキュリティの標準に準拠しており、地域のデータ保護要件に準拠して顧客コードが安全に処理およびスキャンされることを保証します。
これらの対策により、セキュリティで保護されて準拠した効率的なコード スキャン プロセスが実現され、データのプライバシーと整合性が維持されます。
制限事項 (パブリック プレビュー)
パブリック プレビュー フェーズの間は、次の制限事項が適用されます。
バイナリ スキャンはなし: システムはコードおよびコードとしてのインフラストラクチャ (IaC) のファイルのみをスキャンします。
スキャンの頻度: 3 から 4 日ごとにリポジトリをスキャンします。
リポジトリのサイズ: スキャンは 1 GB 未満のリポジトリに制限されます。
ブランチのカバレッジ: スキャンは、既定の (メイン) ブランチのみを対象とします。
ツールのカスタマイズ: スキャン ツールをカスタマイズすることはできません。