Microsoft 365 アプリケーションコンプライアンスオートメーションツールを使用して Microsoft 365 アプリケーションを継続的に準拠させ続ける

Microsoft 365 アプリ コンプライアンスオートメーション ツール (ACAT) は、Microsoft 365 認定資格の重要なコントロールを合理化します。 ACAT を使用して、Microsoft 365 アプリケーションの継続的なコンプライアンスを維持します。 通知を通じてコンプライアンスエラーを常に更新し、継続的インテグレーション/継続的デプロイ パイプラインに ACAT をシームレスに統合します。

注:

ACAT は現在パブリック プレビュー段階であり、Azure 上に構築されたアプリケーションのみをサポートしています。 今後の更新プログラムには、Microsoft 以外のホスト型クラウド サービス上に構築されたアプリの機能が含まれます。 ACAT パブリック プレビューに関するフィードバックについては、こちらの フォームに記入してください。 ACAT製品チームの専門家は、できるだけ早くあなたにフォローアップします。

通知を使用してコンプライアンス レポートの最新の制御評価を取得する

Microsoft 365 アプリケーションまたは環境のコンプライアンス レポートを作成すると、ACAT はコンプライアンス データを自動的に収集し、毎日の制御評価を行います。 さらに、レポート設定または評価の変更に関する通知を受け取ることができます。

Webhook で通知を取得する

ACAT から通知を受信する Webhook を作成します。

  • 左側の [レポート] に移動します。

  • 通知を受信するレポートを開きます。

  • ツール バーから [通知] を選択します。

  • [通知の作成] を選択し、[Webhook] を選択します

    • Webhook 名: これは、このレポート内の Webhook の一意の識別子です。
    • ペイロード URL: ペイロード URL は、ACAT から Webhook POST 要求を受信するサーバーの URL です。
    • コンテンツ タイプ: ACAT は現在、POST 要求の本文として JSON ペイロードを直接配信する application/json コンテンツ タイプのみをサポートしています。
    • シークレット: Webhook シークレットを設定すると、ペイロード URL に送信される POST 要求が ACAT から送信されるようにすることができます。 シークレットが設定されると、ACAT はそれを使用して、各ペイロードでハッシュ署名を作成します。 このハッシュ署名は、x-acat-signature-256 として各要求のヘッダーに含まれています。
    • SSL 検証: SSL 検証は、ペイロード URL がセキュリティで保護されたサイト (HTTPS) である場合にのみ表示され、ペイロードがペイロード URL に安全に配信されるようにするのに役立ちます。 [SSL 検証を有効にする] をオンにしておくことをお勧めします。
    • トリガー イベント: ACAT イベントをサブスクライブして通知を取得します。

    Webhook 通知を作成する

    ヒント

    Webhook ペイロードの詳細については、こちらをご覧ください。

継続的インテグレーション/継続的デプロイ パイプラインで迅速なコンプライアンス評価を取得する

ACAT は、ポータルの定期的な使用状況と最新の通知の受信に加えて、継続的インテグレーション/継続的デプロイ (CI/CD) パイプライン内で迅速なコンプライアンス評価を実行できます。 Microsoft 365 アプリケーションの継続的なコンプライアンスを確保する。

ACAT では、コントロール評価は、Microsoft 365 認定のセキュリティ ドメイン、コントロール ファミリ、および個々のコントロールに従って分類された構造化されたコンプライアンス評価です。 ACAT の未加工コンプライアンス データ内で制御評価を開始するには、収集する必要があります。 ただし、この未加工のコンプライアンス情報の一部は、技術的な観点からは容易にアクセスできない場合があります。 この課題に対処するために、ACAT では "クイック コンプライアンス評価" と呼ばれる概念が導入されています。 この機能は、コンプライアンスの状態を迅速に評価できるように設計されており、重要な生のコンプライアンス データをすぐに収集できます。

迅速なコンプライアンス評価の実装には、次の 2 つの目的があります。

  • タイムリーな分析情報: コンプライアンス体制をリアルタイムで理解し、アプリケーションのセキュリティ標準とベスト プラクティスへの準拠性を提供します。
  • シームレスな統合: 迅速なコンプライアンス評価により、CI/CD パイプラインにシームレスに統合できるため、アプリケーションは堅牢でコンプライアンス要件に合わせて維持されます。

GitHub Actionsによる CI/CD パイプラインとの統合

クイック コンプライアンス評価は、 Microsoft 365 認定クイック評価 GitHub Action を使用して CI/CD パイプラインで利用できます。 この GitHub アクションには、次の 2 つの有効な用途があります。

  • CI/CD パイプラインの最新のデプロイをアプリケーションの決定的な状態として活用する: ACAT は、パイプライン内の最新のデプロイに基づいて迅速なコンプライアンス評価を行います。 さらに、この展開に基づいて対応するコンプライアンス レポートを更新するように ACAT に要求し、毎日の更新で包括的な制御評価を許可することもできます。
  • アプリケーションの参照として既存のコンプライアンス レポートを使用します。** ACAT は、既存のコンプライアンス レポートで定義されているリソースを利用して、迅速なコンプライアンス評価を実行します。

ACAT REST API を使用した CI/CD パイプラインとの統合

ACAT REST API を使用して、CI/CD パイプラインで迅速なコンプライアンス評価を取得します。

  • サービス プリンシパル認証を使用して Azure リソースに接続します。 この ガイド に従って、リソースにアクセスできるサービス プリンシパルを作成する方法について説明します。 サービス プリンシパルが作成されたら、パイプライン ツールのガイダンスに従って資格情報を格納します。 たとえば、 ARM サービス接続を使用して Microsoft Azure に接続します。

  • 迅速なコンプライアンス評価に使用するリソースの一覧を取得します。

    $resourceGroupName
    $deploymentName
    
    $resourceIds = @()
    Get-AzResourceGroupDeploymentOperation `
        -ResourceGroupName $resourceGroupName `
        -Name $deploymentName `
    | ForEach-Object {
        if (![String]::IsNullOrEmpty($_.TargetResource)) {
            $resourceIds += $_.TargetResource
        }
    }
    
    • クラウド リソース管理ポリシーに基づいてリソースを取得するには (たとえば、特定のタグを持つリソース、特定のリソース グループ内のリソースなど)、Azure PowerShell - Get-AzResource を確認します。
    # Get resources with same tag
    $key = "<key-of-your-tag>"
    $value = "<value-of-your-tag>"
    
    $resourceIds = (Get-AzResource -TagName $key -TagValue $value).ResourceId
    
    • 既存の ACAT コンプライアンス レポートを使用するには、[ ACAT REST API Report - Get ] をクリックして、レポート定義からリソースを取得します。
    try {
        $token = "<your-Azure-credentials>"
        $reportName = "<report-name>"
        $apiVersion = "2023-02-15-preview"
    
        $header = @{}
        $header["Authorization"] = $token
        $header["x-ms-aad-user-token"] = $token
        $header["accept"] = "application/json"
    
        $uri = "https://management.azure.com/providers/Microsoft.AppComplianceAutomation/reports/" + $reportName + "?api-version=" + $apiVersion
        $response = Invoke-WebRequest $uri `
            -Method GET `
            -Headers $header `
            -ContentType "application/json" `
            -Verbose `
            -UseBasicParsing
    
        $resourceIds = @()
        if ($response.StatusCode -ne 200) {
            Write-Host "Failed to get resources from compliance report: $response"
            return 
        }
    
        $resources = $response.Content | ConvertFrom-Json
        $resourceIds = $resources.properties.resources.resourceId
    }
    catch {
        Write-Output "Failed to get resources from compliance report with exception: $_"
    }
    
  • triggerEvaluation API を使用して、特定のリソースの迅速なコンプライアンス評価を取得します。

try {
    $token = "<your-Azure-credentials>"
    $resourceIds = "<resource-ids-from-previous-step>"
    $apiVersion = "2023-02-15-preview"

    $header = @{}
    $header["Authorization"] = $token
    $header["x-ms-aad-user-token"] = $token
    $header["accept"] = "application/json"

    $body = @{resourceIds = $resourceIds }

    $uri = "https://management.azure.com/providers/Microsoft.AppComplianceAutomation/triggerEvaluation?api-version=$apiVersion"
    $response = Invoke-WebRequest $uri `
        -Method POST `
        -Headers $header `
        -ContentType "application/json" `
        -Body (ConvertTo-Json $body -Depth 8) `
        -Verbose `
        -UseBasicParsing
    
    # The triggerEvaluation API is asynchronous. Therefore, you need to pull the status to check whether it is completed. 
    # StatusCode 200: OK. The response indicates the quick compliance evaluation for given resource ids is completed.
    # StatusCode 202: Accepted. The response indicates the quick compliance evaluation for given resource ids is triggered and performing in backend. 
    if ($response.StatusCode -eq 200) {
        $result = $response.Content | ConvertFrom-Json
        Write-Host "Successfully get evaluation result:$result"
        return $result
    }
    elseif ($response.StatusCode -eq 202) {
        $retry_url = $response.Headers["Location"]

        do {
            Start-Sleep 10
            Write-Host "retry_url: $retry_url"
            $opResponse = Invoke-WebRequest `
                -Uri $retry_url `
                -ContentType "application/json" `
                -Verbose `
                -Method GET `
                -Headers $header `
                -UseBasicParsing

            if ($opResponse.StatusCode -eq 200) {
                $opResult = $opResponse.Content | ConvertFrom-Json
                Write-Host "Successfully get evaluation result: $opResult"
                return $opResult
            }
            elseif ($opResponse.StatusCode -eq 202) {
                continue
            }
            else {
                Write-Host "Failed to get evaluation result"
                break
            }
        } while ($true)
    }
    else {
        Write-Host "Failed to get compliance evaluation with triggerEvaluation API: $response"
    }
}
catch {
    Write-Output "Failed to get quick compliance assessment with exception: $_"
}
  • triggerEvaluation API の結果から迅速なコンプライアンス評価を取得します。

関連情報

Webhook ペイロード

各イベントの ACAT Webhook ペイロードには、いくつかの共通プロパティが含まれています。

キー

必須

種類

説明

EventDesc

はい

String

通知をトリガーする特定のイベント。

メッセージ

はい

String

通知の内容。 通常、レポート名は一意の識別子として、このイベントが発生した場合のタイムスタンプが含まれます。

詳細

いいえ

String

これは、この通知の詳細を含む JSON 形式のコンテンツです。 コントロール評価の失敗を例にとると、詳細には、各コントロールと影響を受けるリソースに対して失敗したすべての顧客の責任が含まれます。

ACAT REST API triggerEvaluation

API 名: triggerEvaluation

  • サービス: アプリコンプライアンスオートメーション
  • API バージョン: 2023-02-15-preview

特定のリソースの迅速なコンプライアンス評価を取得します。

POST https://management.azure.com/providers/Microsoft.AppComplianceAutomation/triggerEvaluation?api-version=2023-02-15-preview
URI パラメーター

名前

In

必須

説明

api-version

query

はい

string

この操作に使用する API バージョン。 "2023-02-15-preview" を使用できます

要求ヘッダー

名前

In

必須

説明

Authorization

head

はい

string

ベアラー + " " + アクセス トークン

x-ms-aad-user-token

head

はい

string

ベアラー + " " + アクセス トークン

Content-Type

head

はい

string

value: "application/json"

要求本文

名前

必須

説明

resourceIds

はい

文字列配列

評価するリソース ID の一覧

応答ヘッダー

名前

種類

説明

200 OK

応答は、特定のリソース ID の迅速なコンプライアンス評価が完了したことを示します。

202 Accepted

応答は、特定のリソース ID の迅速なコンプライアンス評価がトリガーされ、バックエンドで実行されていることを示します。

その他の状態コード

ErrorResponse

エラー応答。

TriggerEvaluationResponse

名前

種類

説明

triggerTime

string

評価がトリガーされる時刻。

evaluationEndTime

string

評価が終了した時刻。

resourceIds

string[]

評価するリソース ID の一覧

quickAssessments

クイック評価の一覧

QuickAssessment

名前

種類

説明

resourceId

string

リソース ID

responsibilityId

string

責任 ID

timestamp

string

リソース作成のタイムスタンプ (UTC)。

resourceStatus

ResourceStatus

クイック評価の状態。

displayName

string

クイック評価の表示名。

説明

string

クイック評価の説明。

remediationLink

string

このクイック評価の修復手順にリンクします。