🛡️

Microsoft Defender for Cloud における AWS 推奨事項の適用除外

2024/02/04に公開

はじめに

Microsoft Defendr for Cloud の CSPM 機能では Azure だけではなく AWS や GCP に対してもセキュリティ チェックが可能です。Azure 向けの推奨事項については Azure ポリシーを使用して実現していますが、AWS や GCP 向けは仕組みが異なります。こちらの有効化に関してはドキュメントで説明がありますが、除外設定についてはあまり解説がありません。そのためこのブログでは AWS 向けの推奨事項の除外設定について確認していきます。

Azure ポータルからの除外設定

Azure ポータルにおける除外設定自体は Azure と変わらず、推奨事項画面から設定可能です。

Azure の場合は Azure ポリシーの適用除外に反映されるためそこから編集や削除できるのですが、AWS・GCP は 各セキュリティ ポリシーから管理します。
AWS の場合は、[環境設定] から AWS のアカウントを選択します。


[セキュリティ ポリシー] から対象のセキュリティ標準の三点リーダーを選択し、[推奨事項の表示] をクリックします。


対象の推奨事項を探し、三点リーダーから [適用除外の管理] をクリックします。


表示された適用除外の三点リーダーをクリックすると、編集や削除が可能です。


ちなみに AWS コネクタと同一リソース グループに除外設定のリソースが作成されています。

CLI で設定したい

Azure ポータルであれば、比較的簡単に設定できるのですが、多数の AWS アカウントを管理するのであれば、Azure PowerShell などで設定したいところです。調べた限り、Azure 以外の適用除外を作成する Azure PowerShell が準備されていないようです。(Azure であれば Azure ポリシーの PowerShell コマンドが利用可能)
そのため、以下の REST API をキックしようとしたのですが、うまく動かず。(検証不足)
https://learn.microsoft.com/en-us/rest/api/defenderforcloud/assignments/create-or-update?view=rest-defenderforcloud-2021-08-01-preview&tabs=HTTP

そのため、先ほど表示した適用除外のリソースから ARM テンプレートを取得し、そちらを利用して CLI から設定することにしました。

ARM テンプレートで設定する

ARM テンプレートで設定するにあたり、セキュリティ標準の ID や推奨事項の ID を取得する必要があります。ただし、Azure ポータル上では表示されないため、Resource Graph から確認します。
まず対象の推奨事項から [クエリを開く] をクリックし、そのままクエリを実行します。その後、表示された結果の [詳細を表示] をクリックします。



詳細から properties 欄の statusPerInitiative で除外したいセキュリティ標準の ID を取得します。

次に一番下の assessmentKey (推奨事項のID) を取得します。

これで準備完了なので、以下の ARM テンプレートとパラメータファイルを作成します。

template.json
{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "assignment_guid": {
            "type": "String"
        },
        "display_name": {
            "type": "String"
        },
        "securityconnector_id": {
            "type": "String"
        },
        "assignedstandard_id": {
            "type": "String"
        },
        "assignedcomponent_key": {
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Security/assignments",
            "apiVersion": "2021-08-01-preview",
            "name": "[parameters('assignment_guid')]",
            "location": "[resourceGroup().location]",
            "properties": {
                "displayName": "[parameters('display_name')]",
                "description": "チェック不要のため除外",
                "assignedStandard": {
                    "id": "[concat('/providers/Microsoft.Security/standards/', parameters('assignedstandard_id'))]"
                },
                "assignedComponent": {
                    "key": "[parameters('assignedcomponent_key')]"
                },
                "effect": "Exempt",
                "scope": "[parameters('securityconnector_id')]",
                "additionalData": {
                    "exemptionCategory": "Waiver"
                },
                "metadata": {}
            }
        }
    ]
}

parameter.json
{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "assignment_guid": {
        "value": "[newGuid()]"
      },  
      "display_name": {
        "value": "<Azure ポータル上の表示名>"
      },
      "securityconnector_id": {
        "value": "</subscriptions/ から始まる AWS コネクタのリソース ID>"
      },
      "assignedstandard_id": {
        "value": "<セキュリティ標準の ID>"
      },
      "assignedcomponent_key": {
        "value": "<推奨事項の ID>"
      }
    }
}

上記をもとに以下コマンドで ARM テンプレートを実行します。

New-AzResourceGroupDeployment -Name <deployName> -ResourceGroupName <resourceGroupName> -TemplateFile <templateFilePath> -TemplateParameterFile <parameterFilePath> 

実行結果は以下の通りです。しばらくすると Azure ポータルから確認できます。

まとめ

今回は Defender for Cloud における AWS 推奨事項の除外を確認しました。Azure ポータルからであれば Azure 向けの推奨事項とあまり変わらず操作が可能ですが、CLI では Azure PowerShell などが準備されておらず少し難ありのため、運用時に少し工夫が必要になりそうです。

Microsoft (有志)

Discussion