次の方法で共有


Microsoft.Security の評価

Bicepリソースの定義

評価リソースの種類は、次を対象とする操作と共にデプロイできます。

各 API バージョンで変更されたプロパティの一覧については、変更ログの参照してください。

リソースの形式

Microsoft.Security/assessmentsリソースを作成するには、テンプレートに以下のBicepを追加します。

resource symbolicname 'Microsoft.Security/assessments@2025-05-04' = {
  scope: resourceSymbolicName or scope
  name: 'string'
  properties: {
    additionalData: {
      {customized property}: 'string'
    }
    metadata: {
      assessmentType: 'string'
      categories: [
        'string'
      ]
      description: 'string'
      displayName: 'string'
      implementationEffort: 'string'
      partnerData: {
        partnerName: 'string'
        productName: 'string'
        secret: 'string'
      }
      preview: bool
      remediationDescription: 'string'
      severity: 'string'
      threats: [
        'string'
      ]
      userImpact: 'string'
    }
    partnersData: {
      partnerName: 'string'
      secret: 'string'
    }
    resourceDetails: {
      source: 'string'
      // For remaining properties, see ResourceDetails objects
    }
    risk: {
      attackPathsReferences: [
        'string'
      ]
      isContextualRisk: bool
      level: 'string'
      paths: [
        {
          edges: [
            {
              id: 'string'
              sourceId: 'string'
              targetId: 'string'
            }
          ]
          id: 'string'
          nodes: [
            {
              id: 'string'
              nodePropertiesLabel: [
                'string'
              ]
            }
          ]
        }
      ]
      riskFactors: [
        'string'
      ]
    }
    status: {
      cause: 'string'
      code: 'string'
      description: 'string'
    }
  }
}

ResourceDetails オブジェクト

ソース プロパティを設定して、オブジェクトの種類を指定します。

Azureの場合は、以下をご利用ください:

{
  source: 'Azure'
}

OnPremiseSqlの場合は、次を使用します。

{
  databaseName: 'string'
  machineName: 'string'
  serverName: 'string'
  source: 'OnPremiseSql'
  sourceComputerId: 'string'
  vmuuid: 'string'
  workspaceId: 'string'
}

プロパティ値

Microsoft.Security/assessments

名前 形容 価値
名前 リソース名 string (必須)
プロパティ 評価のプロパティについて説明します。 SecurityAssessmentPropertiesまたはSecurityAssessmentPropertiesResponse
スコープ デプロイ スコープとは異なるスコープでリソースを作成するときに使用します。 このプロパティをリソースのシンボリック名に設定して、拡張リソースを適用します。

AssessmentStatusOrAssessmentStatusResponse

名前 形容 価値
原因 評価状態の原因のプログラム コード 文字列
コード 評価の状態のプログラム コード 「健康的」
「該当なし」
'Unhealthy' (必須)
形容 評価状態の人間が判読できる説明 文字列

AzureResourceDetails

名前 形容 価値
ソース 評価されたリソースが存在するプラットフォーム 'Azure' (必須)

Components1Uu4J47SchemasSecurityassessmentpropertiesbasePropertiesRiskPropertiesPathsItemsPropertiesEdgesItems

名前 形容 価値
識別子 エッジ識別子 string (必須)
ソースID ソース・ノード識別子 string (必須)
ターゲットID ターゲットノード識別子 string (必須)

OnPremiseSqlResource詳細

名前 形容 価値
データベース名 マシンにインストールされている Sql データベース名 string (必須)
マシン名 マシンの名前 string (必須)
サーバー名 マシンにインストールされている Sql Server 名 string (必須)
ソース 評価されたリソースが存在するプラットフォーム 'OnPremiseSql' (必須)
ソースコンピュータID マシンにインストールされている oms エージェント ID string (必須)
ヴムイド マシンの一意の ID string (必須)
ワークスペースID Azureリソースマシンが接続されているワークスペースのID string (必須)

リソースの詳細

名前 形容 価値
ソース タイプ AzureResourceDetails を 'Azure' に設定してください。 OnPremiseSqlResourceDetails型の場合は 、'OnPremiseSql' に設定します。 『Azure』
'OnPremiseSql' (必須)

SecurityAssessmentMetadataPartnerData

名前 形容 価値
パートナー名 パートナーの会社の名前 string (必須)
製品名 評価を作成したパートナーの製品の名前 文字列
シークレット パートナーを認証し、評価が作成されたことを確認するためのシークレット - 書き込み専用

制約:
機密性の高い値。 セキュリティで保護されたパラメーターとして渡します。 (必須)

SecurityAssessmentMetadataProperties (英語)

名前 形容 価値
評価タイプ BuiltInは組み込みのAzure Policy定義に基づく評価、CustomはカスタムAzure Policy定義に基づく評価です 「ビルトイン」
'ビルトインポリシー'
'Custom'
「カスタマー・マネージド」
「カスタムポリシー」
「ダイナミックビルトイン」
「マニュアルビルトイン」
'ManualBuiltInPolicy'
「マニュアルカスタムポリシー」
'Unknown'
'VerifiedPartner' (必須)
カテゴリ 次のいずれかを含む文字列配列:
「AppServices」
「コンピューティング」
「コンテナ」
「データ」
「アイデンティティ・アンド・アクセス」
「IoT」
'ネットワーク'
形容 評価の人間が判読できる説明 文字列
ディスプレイ名 評価のわかりやすい表示名 string (必須)
implementationEffort(実装努力) この評価を修復するために必要な実装作業 「高い」
「低い」
「中程度」
パートナーデータ 評価を作成したパートナーについて説明します SecurityAssessmentMetadataPartnerData
プレビュー True の 場合、この評価は、プレビュー リリースの状態です。 ブール (bool)
修復説明 このセキュリティの問題を軽減するために行う必要がある操作の人間が判読できる説明 文字列
過酷 評価の重大度レベル 「重大」
「高い」
「低い」
'Medium' (必須)
脅威 次のいずれかを含む文字列配列:
「アカウントブリーチ」
「データ流出」
「データ流出」
'denialOfService'
'elevationOfPrivilege'
「悪意のあるインサイダー」
'missingCoverage'
「脅威耐性」
ユーザーインパクト 評価のユーザーへの影響 「高い」
「低い」
「中程度」

SecurityAssessmentパートナーデータ

名前 形容 価値
パートナー名 パートナーの会社の名前 string (必須)
シークレット パートナーを認証するためのシークレット - 書き込み専用

制約:
機密性の高い値。 セキュリティで保護されたパラメーターとして渡します。 (必須)

SecurityAssessmentPropertiesBaseAdditionalData

名前 形容 価値

SecurityAssessmentPropertiesBaseRisk

名前 形容 価値
attackPaths参照 リスクの攻撃パスの参照 文字列[]
isContextualRisk です。 リスクがコンテキスト依存型か静的型かを示します ブール (bool)
レベル リスクレベル 「重大」
「高い」
「低い」
「ミディアム」
'None'
パス SecurityAssessmentPropertiesBaseRiskPathsItem[]
リスク要因 リスクの要因は、ベースファクターを追加します 文字列[]

SecurityAssessmentPropertiesBaseRiskPathsItem

名前 形容 価値
エッジ ノード間の接続 Components1Uu4J47SchemasSecurityassessmentpropertiesbasePropertiesRiskPropertiesPathsItemsPropertiesEdgesItems[]
識別子 パスの一意の識別子 文字列
ノード SecurityAssessmentPropertiesBaseRiskPathsPropertiesItemsItem[]

SecurityAssessmentPropertiesBaseRiskPathsPropertiesItemsItem

名前 形容 価値
識別子 ノード識別子 文字列
ノードプロパティラベル ノードに関連付けられたプロパティ 文字列[]

SecurityAssessmentPropertiesまたはSecurityAssessmentPropertiesResponse

名前 形容 価値
追加データ 評価に関する追加データ SecurityAssessmentPropertiesBaseAdditionalData
メタデータ 評価メタデータのプロパティについて説明します。 SecurityAssessmentMetadataProperties (英語)
パートナーデータ サード パーティのパートナー統合に関するデータ SecurityAssessmentパートナーデータ
resource詳細 評価されたリソースの詳細 ResourceDetails (必須)
リスク リスク結果の外部モデル SecurityAssessmentPropertiesBaseRisk
状態 評価の結果 AssessmentStatusOrAssessmentStatusResponse (必須)

ARM テンプレート リソース定義

評価リソースの種類は、次を対象とする操作と共にデプロイできます。

各 API バージョンで変更されたプロパティの一覧については、変更ログの参照してください。

リソースの形式

Microsoft.Security/assessments リソースを作成するには、次の JSON をテンプレートに追加します。

{
  "type": "Microsoft.Security/assessments",
  "apiVersion": "2025-05-04",
  "name": "string",
  "properties": {
    "additionalData": {
      "{customized property}": "string"
    },
    "metadata": {
      "assessmentType": "string",
      "categories": [ "string" ],
      "description": "string",
      "displayName": "string",
      "implementationEffort": "string",
      "partnerData": {
        "partnerName": "string",
        "productName": "string",
        "secret": "string"
      },
      "preview": "bool",
      "remediationDescription": "string",
      "severity": "string",
      "threats": [ "string" ],
      "userImpact": "string"
    },
    "partnersData": {
      "partnerName": "string",
      "secret": "string"
    },
    "resourceDetails": {
      "source": "string"
      // For remaining properties, see ResourceDetails objects
    },
    "risk": {
      "attackPathsReferences": [ "string" ],
      "isContextualRisk": "bool",
      "level": "string",
      "paths": [
        {
          "edges": [
            {
              "id": "string",
              "sourceId": "string",
              "targetId": "string"
            }
          ],
          "id": "string",
          "nodes": [
            {
              "id": "string",
              "nodePropertiesLabel": [ "string" ]
            }
          ]
        }
      ],
      "riskFactors": [ "string" ]
    },
    "status": {
      "cause": "string",
      "code": "string",
      "description": "string"
    }
  }
}

ResourceDetails オブジェクト

ソース プロパティを設定して、オブジェクトの種類を指定します。

Azureの場合は、以下をご利用ください:

{
  "source": "Azure"
}

OnPremiseSqlの場合は、次を使用します。

{
  "databaseName": "string",
  "machineName": "string",
  "serverName": "string",
  "source": "OnPremiseSql",
  "sourceComputerId": "string",
  "vmuuid": "string",
  "workspaceId": "string"
}

プロパティ値

Microsoft.Security/assessments

名前 形容 価値
apiVersion (英語) API のバージョン '2025-05-04'
名前 リソース名 string (必須)
プロパティ 評価のプロパティについて説明します。 SecurityAssessmentPropertiesまたはSecurityAssessmentPropertiesResponse
リソースの種類 'Microsoft.Security/assessments'

AssessmentStatusOrAssessmentStatusResponse

名前 形容 価値
原因 評価状態の原因のプログラム コード 文字列
コード 評価の状態のプログラム コード 「健康的」
「該当なし」
'Unhealthy' (必須)
形容 評価状態の人間が判読できる説明 文字列

AzureResourceDetails

名前 形容 価値
ソース 評価されたリソースが存在するプラットフォーム 'Azure' (必須)

Components1Uu4J47SchemasSecurityassessmentpropertiesbasePropertiesRiskPropertiesPathsItemsPropertiesEdgesItems

名前 形容 価値
識別子 エッジ識別子 string (必須)
ソースID ソース・ノード識別子 string (必須)
ターゲットID ターゲットノード識別子 string (必須)

OnPremiseSqlResource詳細

名前 形容 価値
データベース名 マシンにインストールされている Sql データベース名 string (必須)
マシン名 マシンの名前 string (必須)
サーバー名 マシンにインストールされている Sql Server 名 string (必須)
ソース 評価されたリソースが存在するプラットフォーム 'OnPremiseSql' (必須)
ソースコンピュータID マシンにインストールされている oms エージェント ID string (必須)
ヴムイド マシンの一意の ID string (必須)
ワークスペースID Azureリソースマシンが接続されているワークスペースのID string (必須)

リソースの詳細

名前 形容 価値
ソース タイプ AzureResourceDetails を 'Azure' に設定してください。 OnPremiseSqlResourceDetails型の場合は 、'OnPremiseSql' に設定します。 『Azure』
'OnPremiseSql' (必須)

SecurityAssessmentMetadataPartnerData

名前 形容 価値
パートナー名 パートナーの会社の名前 string (必須)
製品名 評価を作成したパートナーの製品の名前 文字列
シークレット パートナーを認証し、評価が作成されたことを確認するためのシークレット - 書き込み専用

制約:
機密性の高い値。 セキュリティで保護されたパラメーターとして渡します。 (必須)

SecurityAssessmentMetadataProperties (英語)

名前 形容 価値
評価タイプ BuiltInは組み込みのAzure Policy定義に基づく評価、CustomはカスタムAzure Policy定義に基づく評価です 「ビルトイン」
'ビルトインポリシー'
'Custom'
「カスタマー・マネージド」
「カスタムポリシー」
「ダイナミックビルトイン」
「マニュアルビルトイン」
'ManualBuiltInPolicy'
「マニュアルカスタムポリシー」
'Unknown'
'VerifiedPartner' (必須)
カテゴリ 次のいずれかを含む文字列配列:
「AppServices」
「コンピューティング」
「コンテナ」
「データ」
「アイデンティティ・アンド・アクセス」
「IoT」
'ネットワーク'
形容 評価の人間が判読できる説明 文字列
ディスプレイ名 評価のわかりやすい表示名 string (必須)
implementationEffort(実装努力) この評価を修復するために必要な実装作業 「高い」
「低い」
「中程度」
パートナーデータ 評価を作成したパートナーについて説明します SecurityAssessmentMetadataPartnerData
プレビュー True の 場合、この評価は、プレビュー リリースの状態です。 ブール (bool)
修復説明 このセキュリティの問題を軽減するために行う必要がある操作の人間が判読できる説明 文字列
過酷 評価の重大度レベル 「重大」
「高い」
「低い」
'Medium' (必須)
脅威 次のいずれかを含む文字列配列:
「アカウントブリーチ」
「データ流出」
「データ流出」
'denialOfService'
'elevationOfPrivilege'
「悪意のあるインサイダー」
'missingCoverage'
「脅威耐性」
ユーザーインパクト 評価のユーザーへの影響 「高い」
「低い」
「中程度」

SecurityAssessmentパートナーデータ

名前 形容 価値
パートナー名 パートナーの会社の名前 string (必須)
シークレット パートナーを認証するためのシークレット - 書き込み専用

制約:
機密性の高い値。 セキュリティで保護されたパラメーターとして渡します。 (必須)

SecurityAssessmentPropertiesBaseAdditionalData

名前 形容 価値

SecurityAssessmentPropertiesBaseRisk

名前 形容 価値
attackPaths参照 リスクの攻撃パスの参照 文字列[]
isContextualRisk です。 リスクがコンテキスト依存型か静的型かを示します ブール (bool)
レベル リスクレベル 「重大」
「高い」
「低い」
「ミディアム」
'None'
パス SecurityAssessmentPropertiesBaseRiskPathsItem[]
リスク要因 リスクの要因は、ベースファクターを追加します 文字列[]

SecurityAssessmentPropertiesBaseRiskPathsItem

名前 形容 価値
エッジ ノード間の接続 Components1Uu4J47SchemasSecurityassessmentpropertiesbasePropertiesRiskPropertiesPathsItemsPropertiesEdgesItems[]
識別子 パスの一意の識別子 文字列
ノード SecurityAssessmentPropertiesBaseRiskPathsPropertiesItemsItem[]

SecurityAssessmentPropertiesBaseRiskPathsPropertiesItemsItem

名前 形容 価値
識別子 ノード識別子 文字列
ノードプロパティラベル ノードに関連付けられたプロパティ 文字列[]

SecurityAssessmentPropertiesまたはSecurityAssessmentPropertiesResponse

名前 形容 価値
追加データ 評価に関する追加データ SecurityAssessmentPropertiesBaseAdditionalData
メタデータ 評価メタデータのプロパティについて説明します。 SecurityAssessmentMetadataProperties (英語)
パートナーデータ サード パーティのパートナー統合に関するデータ SecurityAssessmentパートナーデータ
resource詳細 評価されたリソースの詳細 ResourceDetails (必須)
リスク リスク結果の外部モデル SecurityAssessmentPropertiesBaseRisk
状態 評価の結果 AssessmentStatusOrAssessmentStatusResponse (必須)

使用例

Terraform (AzAPI プロバイダー) リソース定義

評価リソースの種類は、次を対象とする操作と共にデプロイできます。

  • * * *

各 API バージョンで変更されたプロパティの一覧については、変更ログの参照してください。

リソースの形式

Microsoft.Security/assessments リソースを作成するには、次の Terraform をテンプレートに追加します。

resource "azapi_resource" "symbolicname" {
  type = "Microsoft.Security/assessments@2025-05-04"
  name = "string"
  parent_id = "string"
  body = {
    properties = {
      additionalData = {
        {customized property} = "string"
      }
      metadata = {
        assessmentType = "string"
        categories = [
          "string"
        ]
        description = "string"
        displayName = "string"
        implementationEffort = "string"
        partnerData = {
          partnerName = "string"
          productName = "string"
          secret = "string"
        }
        preview = bool
        remediationDescription = "string"
        severity = "string"
        threats = [
          "string"
        ]
        userImpact = "string"
      }
      partnersData = {
        partnerName = "string"
        secret = "string"
      }
      resourceDetails = {
        source = "string"
        // For remaining properties, see ResourceDetails objects
      }
      risk = {
        attackPathsReferences = [
          "string"
        ]
        isContextualRisk = bool
        level = "string"
        paths = [
          {
            edges = [
              {
                id = "string"
                sourceId = "string"
                targetId = "string"
              }
            ]
            id = "string"
            nodes = [
              {
                id = "string"
                nodePropertiesLabel = [
                  "string"
                ]
              }
            ]
          }
        ]
        riskFactors = [
          "string"
        ]
      }
      status = {
        cause = "string"
        code = "string"
        description = "string"
      }
    }
  }
}

ResourceDetails オブジェクト

ソース プロパティを設定して、オブジェクトの種類を指定します。

Azureの場合は、以下をご利用ください:

{
  source = "Azure"
}

OnPremiseSqlの場合は、次を使用します。

{
  databaseName = "string"
  machineName = "string"
  serverName = "string"
  source = "OnPremiseSql"
  sourceComputerId = "string"
  vmuuid = "string"
  workspaceId = "string"
}

プロパティ値

Microsoft.Security/assessments

名前 形容 価値
名前 リソース名 string (必須)
parent_id この拡張リソースを適用するリソースの ID。 string (必須)
プロパティ 評価のプロパティについて説明します。 SecurityAssessmentPropertiesまたはSecurityAssessmentPropertiesResponse
リソースの種類 「Microsoft.Security/assessments@2025-05-04」

AssessmentStatusOrAssessmentStatusResponse

名前 形容 価値
原因 評価状態の原因のプログラム コード 文字列
コード 評価の状態のプログラム コード 「健康的」
「該当なし」
'Unhealthy' (必須)
形容 評価状態の人間が判読できる説明 文字列

AzureResourceDetails

名前 形容 価値
ソース 評価されたリソースが存在するプラットフォーム 'Azure' (必須)

Components1Uu4J47SchemasSecurityassessmentpropertiesbasePropertiesRiskPropertiesPathsItemsPropertiesEdgesItems

名前 形容 価値
識別子 エッジ識別子 string (必須)
ソースID ソース・ノード識別子 string (必須)
ターゲットID ターゲットノード識別子 string (必須)

OnPremiseSqlResource詳細

名前 形容 価値
データベース名 マシンにインストールされている Sql データベース名 string (必須)
マシン名 マシンの名前 string (必須)
サーバー名 マシンにインストールされている Sql Server 名 string (必須)
ソース 評価されたリソースが存在するプラットフォーム 'OnPremiseSql' (必須)
ソースコンピュータID マシンにインストールされている oms エージェント ID string (必須)
ヴムイド マシンの一意の ID string (必須)
ワークスペースID Azureリソースマシンが接続されているワークスペースのID string (必須)

リソースの詳細

名前 形容 価値
ソース タイプ AzureResourceDetails を 'Azure' に設定してください。 OnPremiseSqlResourceDetails型の場合は 、'OnPremiseSql' に設定します。 『Azure』
'OnPremiseSql' (必須)

SecurityAssessmentMetadataPartnerData

名前 形容 価値
パートナー名 パートナーの会社の名前 string (必須)
製品名 評価を作成したパートナーの製品の名前 文字列
シークレット パートナーを認証し、評価が作成されたことを確認するためのシークレット - 書き込み専用

制約:
機密性の高い値。 セキュリティで保護されたパラメーターとして渡します。 (必須)

SecurityAssessmentMetadataProperties (英語)

名前 形容 価値
評価タイプ BuiltInは組み込みのAzure Policy定義に基づく評価、CustomはカスタムAzure Policy定義に基づく評価です 「ビルトイン」
'ビルトインポリシー'
'Custom'
「カスタマー・マネージド」
「カスタムポリシー」
「ダイナミックビルトイン」
「マニュアルビルトイン」
'ManualBuiltInPolicy'
「マニュアルカスタムポリシー」
'Unknown'
'VerifiedPartner' (必須)
カテゴリ 次のいずれかを含む文字列配列:
「AppServices」
「コンピューティング」
「コンテナ」
「データ」
「アイデンティティ・アンド・アクセス」
「IoT」
'ネットワーク'
形容 評価の人間が判読できる説明 文字列
ディスプレイ名 評価のわかりやすい表示名 string (必須)
implementationEffort(実装努力) この評価を修復するために必要な実装作業 「高い」
「低い」
「中程度」
パートナーデータ 評価を作成したパートナーについて説明します SecurityAssessmentMetadataPartnerData
プレビュー True の 場合、この評価は、プレビュー リリースの状態です。 ブール (bool)
修復説明 このセキュリティの問題を軽減するために行う必要がある操作の人間が判読できる説明 文字列
過酷 評価の重大度レベル 「重大」
「高い」
「低い」
'Medium' (必須)
脅威 次のいずれかを含む文字列配列:
「アカウントブリーチ」
「データ流出」
「データ流出」
'denialOfService'
'elevationOfPrivilege'
「悪意のあるインサイダー」
'missingCoverage'
「脅威耐性」
ユーザーインパクト 評価のユーザーへの影響 「高い」
「低い」
「中程度」

SecurityAssessmentパートナーデータ

名前 形容 価値
パートナー名 パートナーの会社の名前 string (必須)
シークレット パートナーを認証するためのシークレット - 書き込み専用

制約:
機密性の高い値。 セキュリティで保護されたパラメーターとして渡します。 (必須)

SecurityAssessmentPropertiesBaseAdditionalData

名前 形容 価値

SecurityAssessmentPropertiesBaseRisk

名前 形容 価値
attackPaths参照 リスクの攻撃パスの参照 文字列[]
isContextualRisk です。 リスクがコンテキスト依存型か静的型かを示します ブール (bool)
レベル リスクレベル 「重大」
「高い」
「低い」
「ミディアム」
'None'
パス SecurityAssessmentPropertiesBaseRiskPathsItem[]
リスク要因 リスクの要因は、ベースファクターを追加します 文字列[]

SecurityAssessmentPropertiesBaseRiskPathsItem

名前 形容 価値
エッジ ノード間の接続 Components1Uu4J47SchemasSecurityassessmentpropertiesbasePropertiesRiskPropertiesPathsItemsPropertiesEdgesItems[]
識別子 パスの一意の識別子 文字列
ノード SecurityAssessmentPropertiesBaseRiskPathsPropertiesItemsItem[]

SecurityAssessmentPropertiesBaseRiskPathsPropertiesItemsItem

名前 形容 価値
識別子 ノード識別子 文字列
ノードプロパティラベル ノードに関連付けられたプロパティ 文字列[]

SecurityAssessmentPropertiesまたはSecurityAssessmentPropertiesResponse

名前 形容 価値
追加データ 評価に関する追加データ SecurityAssessmentPropertiesBaseAdditionalData
メタデータ 評価メタデータのプロパティについて説明します。 SecurityAssessmentMetadataProperties (英語)
パートナーデータ サード パーティのパートナー統合に関するデータ SecurityAssessmentパートナーデータ
resource詳細 評価されたリソースの詳細 ResourceDetails (必須)
リスク リスク結果の外部モデル SecurityAssessmentPropertiesBaseRisk
状態 評価の結果 AssessmentStatusOrAssessmentStatusResponse (必須)

使用例

Terraformサンプル

Azure Security Center向けのSecurity Center Assessmentをデプロイする基本的な例です。

terraform {
  required_providers {
    azapi = {
      source = "Azure/azapi"
    }
  }
}

provider "azapi" {
  skip_provider_registration = false
}

data "azapi_client_config" "current" {}

variable "resource_name" {
  type    = string
  default = "acctest0001"
}

variable "location" {
  type    = string
  default = "westus"
}

variable "admin_password" {
  type        = string
  sensitive   = true
  description = "The administrator password for the virtual machine scale set"
}

resource "azapi_resource" "resourceGroup" {
  type     = "Microsoft.Resources/resourceGroups@2020-06-01"
  name     = var.resource_name
  location = var.location
}

resource "azapi_resource" "assessmentMetadata" {
  type      = "Microsoft.Security/assessmentMetadata@2021-06-01"
  parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}"
  name      = "fdaaa62c-1d42-45ab-be2f-2af194dd1700"
  body = {
    properties = {
      assessmentType = "CustomerManaged"
      description    = "Test Description"
      displayName    = "Test Display Name"
      severity       = "Medium"
    }
  }
}

resource "azapi_resource" "pricing" {
  type      = "Microsoft.Security/pricings@2023-01-01"
  parent_id = "/subscriptions/${data.azapi_client_config.current.subscription_id}"
  name      = "VirtualMachines"
  body = {
    properties = {
      extensions  = []
      pricingTier = "Standard"
      subPlan     = "P2"
    }
  }
}

resource "azapi_resource" "virtualNetwork" {
  type      = "Microsoft.Network/virtualNetworks@2024-05-01"
  parent_id = azapi_resource.resourceGroup.id
  name      = "${var.resource_name}-vnet"
  location  = var.location
  body = {
    properties = {
      addressSpace = {
        addressPrefixes = ["10.0.0.0/16"]
      }
      dhcpOptions = {
        dnsServers = []
      }
      privateEndpointVNetPolicies = "Disabled"
    }
  }
}

resource "azapi_resource" "subnet" {
  type      = "Microsoft.Network/virtualNetworks/subnets@2024-05-01"
  parent_id = azapi_resource.virtualNetwork.id
  name      = "internal"
  body = {
    properties = {
      addressPrefix                     = "10.0.2.0/24"
      defaultOutboundAccess             = true
      delegations                       = []
      privateEndpointNetworkPolicies    = "Disabled"
      privateLinkServiceNetworkPolicies = "Enabled"
      serviceEndpointPolicies           = []
      serviceEndpoints                  = []
    }
  }
}

resource "azapi_resource" "virtualMachineScaleSet" {
  type      = "Microsoft.Compute/virtualMachineScaleSets@2024-11-01"
  parent_id = azapi_resource.resourceGroup.id
  name      = "${var.resource_name}-vmss"
  location  = var.location
  body = {
    properties = {
      additionalCapabilities                 = {}
      doNotRunExtensionsOnOverprovisionedVMs = false
      orchestrationMode                      = "Uniform"
      overprovision                          = true
      singlePlacementGroup                   = true
      upgradePolicy = {
        mode = "Manual"
      }
      virtualMachineProfile = {
        diagnosticsProfile = {
          bootDiagnostics = {
            enabled    = false
            storageUri = ""
          }
        }
        extensionProfile = {
          extensionsTimeBudget = "PT1H30M"
        }
        networkProfile = {
          networkInterfaceConfigurations = [{
            name = "example"
            properties = {
              dnsSettings = {
                dnsServers = []
              }
              enableAcceleratedNetworking = false
              enableIPForwarding          = false
              ipConfigurations = [{
                name = "internal"
                properties = {
                  applicationGatewayBackendAddressPools = []
                  applicationSecurityGroups             = []
                  loadBalancerBackendAddressPools       = []
                  loadBalancerInboundNatPools           = []
                  primary                               = true
                  privateIPAddressVersion               = "IPv4"
                  subnet = {
                    id = azapi_resource.subnet.id
                  }
                }
              }]
              primary = true
            }
          }]
        }
        osProfile = {
          adminPassword            = var.admin_password
          adminUsername            = "adminuser"
          allowExtensionOperations = true
          computerNamePrefix       = "${var.resource_name}-vmss"
          linuxConfiguration = {
            disablePasswordAuthentication = false
            provisionVMAgent              = true
            ssh = {
              publicKeys = []
            }
          }
          secrets = []
        }
        priority = "Regular"
        storageProfile = {
          dataDisks = []
          imageReference = {
            offer     = "0001-com-ubuntu-server-jammy"
            publisher = "Canonical"
            sku       = "22_04-lts"
            version   = "latest"
          }
          osDisk = {
            caching      = "ReadWrite"
            createOption = "FromImage"
            managedDisk = {
              storageAccountType = "Standard_LRS"
            }
            osType                  = "Linux"
            writeAcceleratorEnabled = false
          }
        }
      }
    }
    sku = {
      capacity = 1
      name     = "Standard_B1s"
    }
  }
}

resource "azapi_resource" "assessment" {
  type      = "Microsoft.Security/assessments@2020-01-01"
  parent_id = azapi_resource.virtualMachineScaleSet.id
  name      = "fdaaa62c-1d42-45ab-be2f-2af194dd1700"
  body = {
    properties = {
      additionalData = {}
      resourceDetails = {
        source = "Azure"
      }
      status = {
        cause       = ""
        code        = "Healthy"
        description = ""
      }
    }
  }
}