接続されている GitHub リポジトリまたは Azure DevOps プロジェクトをスキャンする

接続された GitHub リポジトリまたは Azure DevOps プロジェクトをスキャンするように Microsoft Security DevOps を設定できます。 GitHub アクションまたは Azure DevOps 拡張機能を使用して、コードとしてのインフラストラクチャ (IaC) ソース コードでのみ Microsoft Security DevOps を実行し、パイプラインのランタイムを減らすのに役立ちます。

この記事では、Microsoft Security DevOps ルールを使用して、テンプレート YAML 構成ファイルを適用して、接続されているリポジトリまたはプロジェクトをスキャンし、特に IaC セキュリティの問題を検出する方法について説明します。 始める前に、GitHubリポジトリやAzure DevOpsプロジェクトを接続し、前提条件を確認しましょう。

前提条件

  • Microsoft Security DevOps の場合は、ソース コード管理システムに基づいて GitHub アクションまたは Azure DevOps 拡張機能を設定します。
  • リポジトリに IaC テンプレートがあることを確認します。

接続されている IaC ソース コードをスキャンするための GitHub アクションを設定して実行する

GitHub でアクションを設定し、スキャン結果を表示するには:

  1. GitHub にサインインします。

  2. リポジトリのメイン ページに移動します。

  3. ファイル ディレクトリで、 .github>workflows>msdevopssec.yml を選択します。

    GitHub でのアクションの操作の詳細については、「 前提条件」を参照してください。

  4. [ このファイルの編集] (鉛筆) アイコンを選択します。

    msdevopssec.yml ファイルの [このファイルの編集] アイコンが強調表示されているスクリーンショット。

  5. YAMLファイルの 「Run analyzers 」セクションで、Infrastructure as Codeスキャンを有効にするための以下のコードを追加してください:

    with:
        categories: 'IaC'
    

    値は、大文字と小文字が区別されます。

    以下のスクリーンショットは、更新されたYAML構成の例を示しています:

    YAML ファイルに追加する情報を示すスクリーンショット。

  6. [ 変更のコミット] を 選択します。 . .

  7. [変更をコミット]を選択します。

    GitHub ページで [変更のコミット] を選択する場所を示すスクリーンショット。

  8. (省略可能)リポジトリに IaC テンプレートを追加します。 リポジトリに IaC テンプレートが既にある場合は、この手順をスキップします。

    たとえば、 基本的な Linux Web アプリケーションのデプロイに使用できる IaC テンプレートをコミットします。

    1. azuredeploy.json ファイルを選択します。

      azuredeploy.json ファイルの場所を示すスクリーンショット。

    2. [Raw] を選択します。

    3. 次の例のように、ファイル内のすべての情報をコピーします。

      {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
          "webAppName": {
            "type": "string",
            "defaultValue": "AzureLinuxApp",
            "metadata": {
              "description": "The base name of the resource, such as the web app name or the App Service plan."
            },
            "minLength": 2
          },
          "sku": {
            "type": "string",
            "defaultValue": "S1",
            "metadata": {
              "description": "The SKU of the App Service plan."
            }
          },
          "linuxFxVersion": {
            "type": "string",
            "defaultValue": "php|7.4",
            "metadata": {
              "description": "The runtime stack of the current web app."
            }
          },
          "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
              "description": "The location for all resources."
            }
          }
        },
        "variables": {
          "webAppPortalName": "[concat(parameters('webAppName'), '-webapp')]",
          "appServicePlanName": "[concat('AppServicePlan-', parameters('webAppName'))]"
        },
        "resources": [
          {
            "type": "Microsoft.Web/serverfarms",
            "apiVersion": "2020-06-01",
            "name": "[variables('appServicePlanName')]",
            "location": "[parameters('location')]",
            "sku": {
              "name": "[parameters('sku')]"
            },
            "kind": "linux",
            "properties": {
              "reserved": true
            }
          },
          {
            "type": "Microsoft.Web/sites",
            "apiVersion": "2020-06-01",
            "name": "[variables('webAppPortalName')]",
            "location": "[parameters('location')]",
            "kind": "app",
            "dependsOn": [
              "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]"
            ],
            "properties": {
              "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]",
              "siteConfig": {
                "linuxFxVersion": "[parameters('linuxFxVersion')]"
              }
            }
          }
        ]
      }
      
    4. GitHub リポジトリで、 .github/workflows フォルダーに移動します。

    5. [ ファイルの追加]>[新しいファイルの作成]を選択します。

      新しいファイルを作成する方法を示すスクリーンショット。

    6. ファイルの名前を入力します。

    7. コピーした情報をファイルに貼り付けます。

    8. [ 新しいファイルのコミット] を選択します。

    テンプレート ファイルがリポジトリに追加されます。

    作成した新しいファイルがリポジトリに追加されていることを示すスクリーンショット。

  9. Microsoft Security DevOps スキャンが完了したことを確認します。

    1. リポジトリの場合は、[ アクション] を選択します。

    2. ワークフローを選択すると、アクションの状態が表示されます。

  10. スキャン結果を見るには、以下のいずれかのオプションを使用します。

    • Defender for Cloud>DevOps securityに行ってください。 このオプションはGitHub Advanced Security(GHAS)ライセンスを必要としません。
    • GitHub高度セキュリティ(GHAS)ライセンスをお持ちの場合は、GitHubの>コードスキャンアラートをネイティブに設定してください。

Azure DevOps 拡張機能を設定して実行し、接続されている IaC ソース コードをスキャンする

拡張機能を設定し、Azure DevOps でスキャン結果を表示するには:

  1. Azure DevOps にサインインします。

  2. プロジェクトを選んでください。

  3. パイプラインを選択します。

  4. Microsoft Security DevOps 用の Azure DevOps 拡張機能が構成されているパイプラインを選択します。

  5. [ パイプラインの編集] を選択します

  6. パイプラインのYAML設定ファイルで、displayNameタスクの行の下に、インフラストラクチャ・アズ・コードスキャンを有効にするための以下のコードを追加してください:

    inputs:
        categories: 'IaC'
    

    以下のスクリーンショットは、IaCカテゴリを追加したパイプラインYAML構成の例を示しています:

    パイプライン構成 YAML ファイルに IaC カテゴリ行を追加する場所を示すスクリーンショット。

  7. 保存を選びます。

  8. (省略可能)Azure DevOps プロジェクトに IaC テンプレートを追加します。 プロジェクトに IaC テンプレートが既にある場合は、この手順をスキップします。

  9. メイン ブランチに直接コミットするか、コミット用に新しいブランチを作成するかを選択し、[保存] を選択 します

  10. IaC スキャンの結果を表示するには、[ パイプライン] を選択し、変更したパイプラインを選択します。

  11. 詳細を表示するには、特定のパイプライン実行を選択します。

適用された IaC ルールの詳細と修復情報を表示する

Microsoft Security DevOps に含まれる IaC スキャン ツールは 、Template Analyzer (PSRule は Template Analyzer に含まれています)、 CheckovTerrascan です

Template Analyzer は、Azure Resource Manager テンプレート (ARM テンプレート) と Bicep テンプレートに対してルールを実行します。 Template Analyzer のルールと修復の詳細を参照してください。

Terrascan は、CloudFormation、Docker、Helm、Kubernetes、Kustomize、Terraform の ARM テンプレートとテンプレートに対してルールを実行します。 Terrascan ルールを参照してください。

Chekov は、CloudFormation、Docker、Helm、Kubernetes、Kustomize、Terraform の ARM テンプレートとテンプレートに対してルールを実行します。 Checkov ルールを参照してください。

Microsoft Security DevOps に含まれている IaC スキャン ツールの詳細については、次を参照してください。

この記事では、Microsoft Security DevOps 用に GitHub アクションと Azure DevOps 拡張機能を設定して IaC セキュリティの構成ミスをスキャンする方法と、結果を表示する方法について説明しました。

詳細については、以下を参照してください。