Microsoft Defender for Cloudのセキュリティに関する推奨事項は、セキュリティ体制の向上と強化に役立ちます。 推奨事項は、Azure サブスクリプション、アマゾン ウェブ サービス (AWS) アカウント、Defender for Cloudが有効になっている Google Cloud Platform (GCP) プロジェクトに対して定義されているセキュリティ標準に対する評価に基づいています。
この記事では、以下の手順について説明します。
- Kusto クエリ言語 (KQL) クエリを使用して、すべてのクラウド (Azure、AWS、および GCP) のカスタム推奨事項を作成します。
- カスタム推奨事項をカスタム セキュリティ標準に割り当てます。
前提条件
カスタム推奨や標準を作成する前に、以下の要件を満たしていることを確認してください。
- 新しいセキュリティ標準を作成するには、サブスクリプションに対する所有者アクセス許可が必要です。
- カスタム推奨事項を作成するには、セキュリティ管理者のアクセス許可が必要です。
- Kusto クエリ言語 (KQL) に基づいてカスタムの推奨事項を作成するには、Defender Cloud Security Posture Management (CSPM) プランが有効になっている必要があります。 すべての顧客は、Azure Policyに基づいてカスタムの推奨事項を作成できます。
- カスタム推奨事項のための Azure クラウドでのサポートを確認します。
カスタムの推奨事項と KQL クエリの記述方法の詳細については>Defender for Cloudのこのエピソードをフィールド で確認することをお勧めします。
カスタム推奨事項を作成する
修復手順、重大度、推奨事項を割り当てる必要がある標準を含めて、カスタム推奨事項を作成します。 KQL を使用して推奨事項のロジックを追加します。 必要に応じて調整できる組み込みのクエリ テンプレートを含む単純なクエリ エディターを使用することも、KQL クエリを最初から記述することもできます。
カスタムレコメンデーションを作成するには:
Azure portal にサインインする
Microsoft Defender for Cloud>Environment settings> 関連するサブスクリプションに移動します。
[セキュリティ ポリシー] を選択>+ カスタム推奨事項を作成します。
必須: 名前、スコープ、重大度、およびセキュリティの問題の詳細を入力します。 省略可能: 説明、修復。
次へを選択します。
KQL クエリを入力するか、[ クエリ エディターを開く] を選択します。
次へを選択します。
推奨事項に関連する標準を選択します。
次へを選択します。
割り当てるカスタム標準を選択します。
[確認と作成] を選択します。
推奨事項の詳細を確認します。
を選択してを作成します。
クエリ エディターの使用
クエリ エディターを使用して推奨事項クエリを作成することをお勧めします。 また、提供されている クエリ テンプレートと例を 使用して、サンプル クエリを表示し、独自のクエリを構築する方法を学習することもできます。
- エディターを使用すると、クエリを使用開始前にビルドしてテストできます。
- クエリの構成に関するヘルプと、追加の手順とリンクを表示するには、[操作方法] を選択します。
- エディターには、独自のクエリの作成に使用できる推奨事項クエリの例が組み込まれています。 データは、API 内と同じ構造で表示されます。
[ 新しいクエリ] を選択します。
サンプル クエリ テンプレートとその指示を使用するか、ページの下部にある組み込み推奨クエリの例を選択して開始します。
[クエリの実行] を選択し、作成したクエリをテストします。
クエリの準備ができたら、それを切り取ってエディターから [推奨事項] クエリ ペインに貼り付けます。
「 次」を選択し、推奨事項に関連する標準を選択し、割り当てるカスタム標準を選択し、「 レビューして作成」を選択します。
おすすめの詳細を確認し、「 作成」を選択してください。
クエリ テンプレートと例
クエリ エディターには組み込みの例が含まれており、このセクションのテンプレートでは、一般的なセキュリティ チェックを構成する方法を示します。 各テンプレートはスコープ内のリソースを返し、準拠していないリソースを UNHEALTHYとしてマークします。 このテンプレート パターンでは、 condition 式のみを編集し、 HealthStatus 行は変更しないようにします。
注
このセクションのテンプレートでは、Azure リソースの種類を使用します。 AWS および GCP リソースの場合は、Environment == 'Azure' を Environment == 'AWS' または Environment == 'GCP' に変更し、環境のリソースの種類に合わせて Identifiers.Type を更新します。
KQL 出力スキーマの要件
クエリを記述する前に、必要な出力スキーマを理解してください。 これは、Microsoft Defender for Cloud結果を解釈し、結果をリソースにマップする方法です。
必要な出力列:
| Column | タイプ | Purpose |
|---|---|---|
Id |
文字列 (必須) | リソースを参照するためにDefender for Cloudによって使用されるリソース識別子。 |
Name |
文字列 (必須) | 結果に人間が判読できるリソース名が表示されます。 |
Environment |
文字列 (必須) | クラウド環境: Azure、AWS、または GCP。 |
Identifiers |
動的 (必須) | ソース レコードから渡されるリソースの種類と識別子。 |
AdditionalData |
動的 (必須) | ソース レコードから渡される補助リソース メタデータ。 |
Record |
動的 (必須) | すべてのプロパティを含む完全なリソース レコード。 |
HealthStatus |
文字列 (必須) | 評価結果: UNHEALTHY (非準拠) または HEALTHY (準拠)。 |
クエリは常に次の方法で終了します。 | project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatus
評価マッピング:
すべてのクエリで、リソースごとに HealthStatus 値を設定する必要があります。 カスタム推奨クエリのコアな健康評価ロジックとして、プレースホルダー条件を独自のテストに置き換え、以下のパターンを用いてください。
| extend condition = (your condition here)
| extend HealthStatus = iff(condition, 'UNHEALTHY', 'HEALTHY')
このパターンでは、 condition 式のみを編集します。 クエリ内で以下のHealthStatus式は変更せずDefender for Cloud適合リソースを準拠または非準拠に分類できるようにしてください:
| extend HealthStatus = iff(condition, 'UNHEALTHY', 'HEALTHY')
HealthStatusが UNHEALTHY であるリソースは、Defender for Cloudで非準拠の結果として表示されます。
HealthStatusがHEALTHYされているリソースは準拠しており、結果には表示されません。
Important
常に HealthStatus を 'UNHEALTHY' または 'HEALTHY' に設定します。 スコープ内のすべてのリソースを返します。 Defender for Cloudでは、HealthStatus 列を使用してコンプライアンスを判断します。 結果セットからリソースを省略すると、正常ではなく、データなしとして扱われます。
一般的なエラーと修正:
-
必要な列がありません: 必要な 7 つの列のいずれかが見つからない場合、クエリは失敗します。 常に
| project Id, Name, Environment, Identifiers, AdditionalData, Record, HealthStatusで終了します。 -
間違った
HealthStatus値: 有効な値は'UNHEALTHY'と'HEALTHY'のみです (大文字と小文字が区別されます)。 その他の値または null の場合、解析エラーが発生します。 -
プロパティ パスが正しくありません。 プロパティには、直接ではなく、
Record.properties.*経由でアクセスされます。 たとえば、Record.properties.httpsOnlyではなくproperties.httpsOnlyを使用します。 -
リソースの種類での大文字/小文字の区別:
=~の比較には、Identifiers.Type(大文字/小文字を区別しない一致) を使用します。 たとえば、「Identifiers.Type =~ 'Microsoft.Storage/storageAccounts'」のように入力します。 -
サブスクリプション間の Null プロパティ: さまざまな構成を使用して、サブスクリプション間でクエリをテストします。 プロパティが存在しない可能性がある
isnull()チェックを使用します。
カスタム推奨事項を大規模に使用する
Azure ポータルでのカスタム推奨事項の作成は、ほとんどのユーザーに最適です。 このインターフェイスには、便利な KQL エディターと組み込みの検証ツールが用意されています。 プログラムによるアプローチは、多くの環境またはサブスクリプションに推奨事項をデプロイする必要がある場合にも役立ちます。
API を使用して自動化する
KQL クエリを事前に検証し、カスタム推奨事項の作成を自動化する場合は、Microsoft Defender for Cloud API を使用できます。 この方法を使用すると、推奨事項を迅速に展開し、クラウド環境全体で一貫性とスケーラブルを確保できます。
- 利点: カスタム推奨事項のデプロイを自動化およびスケーリングできます。
- 使用する場合: このメソッドは、複数の環境に一貫して推奨事項を適用する必要がある大規模な実装に最適です。
API を使用してカスタムレコメンデーションを管理する方法の詳細については、Defender for Cloud 複合 API リファレンスを参照してください。
カスタム標準を作成する
カスタム推奨事項は、1 つ以上のカスタム標準に割り当てることができます。
カスタム標準を作成するには:
Azure portal にサインインする
Microsoft Defender for Cloud>Environment settings> 関連するサブスクリプションに移動します。
[セキュリティ ポリシー]>[+ 作成]>[標準] を選択します。
カスタム標準に追加する推奨事項を選択します。
(省略可能)Azureサブスクリプションの場合は、[ソース] 列を確認します。
を選択してを作成します。
Azure Policy を使用してカスタム推奨事項を作成および強化する (レガシ)
Azure サブスクリプションの場合、Azure Policy を使用してカスタムの推奨事項と標準を作成し、強化できます。 これはレガシ機能であり、新しいカスタム推奨事項機能を使用することをお勧めします。
カスタムの推奨事項と標準を作成する (レガシ)
Azure Policyでポリシー定義とイニシアティブを作成し、Defender for Cloudでオンボードすることで、Defender for Cloudでカスタムの推奨事項と標準を作成できます。
Azure Policy (レガシ) を使用してカスタムの推奨事項または標準を作成するには:
- Azure Policyポータルで1つ以上のポリシー定義を作成するか、プログラム的にポリシー定義を作成できます。
- カスタム ポリシー定義を含むポリシー イニシアティブを作成します。
イニシアティブをカスタム標準として取り込む(レガシー)
ポリシー割り当ては、Azure リソースをポリシーやイニシアティブに割り当てるために Azure Policy によって使われます。
Defender for Cloudのカスタム セキュリティ標準にイニシアティブをオンボードするには、次に示すように、要求本文に "ASC":"true" を含める必要があります。
ASC フィールドにより、Microsoft Defender for Cloud にイニシアチブがオンボードされます。
カスタム イニシアチブをオンボードするには:
カスタム イニシアティブをオンボードする例
以下のRESTリクエストを使って、カスタムDefender for Cloud標準を支えるAzure Policyイニシアチブを作成または更新してください:
PUT https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policySetDefinitions/{policySetDefinitionName}?api-version=2021-06-01
リクエスト本文 (JSON):
{
"properties": {
"displayName": "Cost Management",
"description": "Policies to enforce low cost storage SKUs",
"metadata": {
"category": "Cost Management",
"ASC":"true"
},
"parameters": {
"namePrefix": {
"type": "String",
"defaultValue": "myPrefix",
"metadata": {
"displayName": "Prefix to enforce on resource names"
}
}
},
"policyDefinitions": [
{
"policyDefinitionId": "/subscriptions/<Subscription ID>/providers/Microsoft.Authorization/policyDefinitions/7433c107-6db4-4ad1-b57a-a76dce0154a1",
"policyDefinitionReferenceId": "Limit_Skus",
"parameters": {
"listOfAllowedSKUs": {
"value": [
"Standard_GRS",
"Standard_LRS"
]
}
}
},
{
"policyDefinitionId": "/subscriptions/<Subscription ID>/providers/Microsoft.Authorization/policyDefinitions/ResourceNaming",
"policyDefinitionReferenceId": "Resource_Naming",
"parameters": {
"prefix": {
"value": "[parameters('namePrefix')]"
},
"suffix": {
"value": "-LC"
}
}
}
]
}
}
割り当てを削除する例
サブスクリプションからレガシーカスタム標準を削除するには、以下のRESTリクエストを使ってポリシー割り当てを削除してください:
DELETE https://management.azure.com/{subscription}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2018-05-01
カスタム推奨事項の強化(レガシー)
Microsoft Defender for Cloud に用意されている組み込みの推奨事項には、重大度レベルや修復手順などの詳細が含まれています。 この種の情報を Azure のカスタム推奨事項に追加する場合は、REST API を使います。
追加できる情報は次の 2 種類です。
- RemediationDescription – 文字列
- Severity – 列挙 [Low、Medium、High]
カスタム イニシアティブの一部であるポリシーのポリシー定義に、メタデータを追加する必要があります。 メタデータは「securityCenter」プロパティにあるはずです。以下のように:
{
"metadata": {
"securityCenter": {
"RemediationDescription": "Custom description goes here",
"Severity": "High"
}
}
}
以下の例は、 securityCenter メタデータプロパティと修復および重大度の詳細を含む完全なカスタムポリシー定義を示しています。
{
"properties": {
"displayName": "Security - ERvNet - AuditRGLock",
"policyType": "Custom",
"mode": "All",
"description": "Audit required resource groups lock",
"metadata": {
"securityCenter": {
"RemediationDescription": "Resource Group locks can be set via Azure Portal -> Resource Group -> Locks",
"Severity": "High"
}
},
"parameters": {
"expressRouteLockLevel": {
"type": "String",
"metadata": {
"displayName": "Lock level",
"description": "Required lock level for ExpressRoute resource groups."
},
"allowedValues": [
"CanNotDelete",
"ReadOnly"
]
}
},
"policyRule": {
"if": {
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
},
"then": {
"effect": "auditIfNotExists",
"details": {
"type": "Microsoft.Authorization/locks",
"existenceCondition": {
"field": "Microsoft.Authorization/locks/level",
"equals": "[parameters('expressRouteLockLevel')]"
}
}
}
}
}
}
別の securityCenter プロパティの例については、 評価メタデータの REST API の例を参照してください。
次のステップ
次のリンクを使用すると、Kusto クエリの詳細を確認できます。