接続されている GitHub リポジトリまたは Azure DevOps プロジェクトをスキャンする
接続された GitHub リポジトリまたは Azure DevOps プロジェクトをスキャンするように Microsoft Security DevOps を設定できます。 GitHub アクションまたは Azure DevOps 拡張機能を使用して、コードとしてのインフラストラクチャ (IaC) ソース コードでのみ Microsoft Security DevOps を実行することで、パイプラインのランタイムを減らすことができます。
この記事では、テンプレート YAML の構成ファイルを適用して、接続されているリポジトリまたはプロジェクトをスキャンし、Microsoft Security DevOps ルールを使用して、特に IaC セキュリティの問題を検出する方法について説明します。
前提条件
- Microsoft Security DevOps の場合は、ソース コード管理システムに基づいて GitHub アクションまたは Azure DevOps 拡張機能を設定します:
- リポジトリが GitHub にある場合は、Microsoft Security DevOps GitHub アクションを設定します。
- Azure DevOps でソース コードを管理する場合は、Microsoft Security DevOps Azure DevOps 拡張機能を設定します。
- リポジトリに IaC テンプレートがあることを確認します。
接続されている IaC ソース コードをスキャンするための GitHub アクションを設定して実行する
GitHub でアクションを設定し、スキャン結果を表示するには:
GitHub にサインインします。
リポジトリのメイン ページに移動します。
ファイル ディレクトリで、.github >workflows>msdevopssec.yml を選択します。
GitHub でのアクションの操作の詳細については、「前提条件 」を参照してください。
[このファイルの編集] (鉛筆) アイコンを選択します。
YAML ファイルの [アナライザーの実行] セクションで、次のコードを追加します:
with: categories: 'IaC'
Note
値は、大文字と小文字が区別されます。
次に例を示します。
[変更点のコミット...] を選択します。
[Commit changes] (変更をコミットする) を選びます。
(省略可能) リポジトリに IaC テンプレートを追加します。 リポジトリに IaC テンプレートが既にある場合は、このステップをスキップします。
たとえば、使用できる IaC テンプレートをコミットして、基本的な Linux Web アプリケーションをデプロイします。
azuredeploy.json ファイルを選択します。
[Raw]\(未フォーマット\) を選択します。
次の例のように、ファイル内のすべての情報をコピーします:
{ "$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')]" } } } ] }
GitHub リポジトリで、.github/workflows フォルダーに移動します。
[ファイルの追加]>[新しいファイルの作成] を選択します。
ファイルの名前を入力します。
コピーした情報をファイルに貼り付けます。
[Commit new file](新しいファイルのコミット) を選択します。
テンプレート ファイルがリポジトリに追加されます。
Microsoft Security DevOps スキャンが完了したことを確認します:
リポジトリの場合は、[アクション] を選択します。
ワークフローを選択して、アクションの状態を表示します。
スキャンの結果を表示するには、[Defender for Cloud]>[DevOps セキュリティ] に移動するか (前提条件として GHAS は必要なし)、GitHub でネイティブに [セキュリティ]>[コード スキャン アラート] に移動します (GHAS ライセンスが必要)。
Azure DevOps 拡張機能を設定して実行し、接続されている IaC ソース コードをスキャンする
拡張機能を設定し、Azure DevOps でスキャン結果を表示するには:
Azure DevOps にサインインします。
プロジェクトを選択します。
[パイプライン] を選択します。
Microsoft Security DevOps の Azure DevOps 拡張機能が構成されているパイプラインを選択します。
[パイプラインを編集する] を選択します。
パイプライン YAML 構成ファイルで、MicrosoftSecurityDevOps@1 タスクの
displayName
行の下に、次のコードを追加します:inputs: categories: 'IaC'
次に例を示します。
[保存] を選択します。
(省略可能) Azure DevOps プロジェクトに IaC テンプレートを追加します。 プロジェクトに IaC テンプレートが既にある場合は、この手順をスキップします。
メイン ブランチに直接コミットするか、コミット用に新しいブランチを作成するかを選択し、[保存] を選択します。
IaC スキャンの結果を表示するには、[パイプライン] を選択し、変更したパイプラインを選択します。
詳細については、特定のパイプラインの実行を選択してください。
適用された IaC ルールの詳細と修復情報を表示する
Microsoft Security DevOps に含まれる IaC スキャン ツールは、Template Analyzer (PSRule は Template Analyzer に含まれます)、Checkov、Terrascan です。
Template Analyzer は、Azure Resource Manager テンプレート (ARM テンプレート) と Bicep テンプレートに対してルールを実行します。 詳細については、「Template Analyzer のルールと修復の詳細」を参照してください。
Terrascan は、ARM テンプレートと、CloudFormation、Docker、Helm、Kubernetes、Kustomize、Terraform の各テンプレートでルールを実行します。 詳細については、「Terrascan ルール」を参照してください。
Chekov は、ARM テンプレートと、CloudFormation、Docker、Helm、Kubernetes、Kustomize、Terraform の各テンプレートでルールを実行します。 詳細については、「Checkov のルール」を参照してください。
Microsoft Security DevOps に含まれている IaC スキャン ツールの詳細については、次を参照してください:
関連するコンテンツ
この記事では、Microsoft Security DevOps 用に GitHub アクションと Azure DevOps 拡張機能を設定して IaC セキュリティの構成ミスをスキャンする方法と、結果を表示する方法について説明しました。
詳しい情報を入手するには:
- DevOps セキュリティの詳細情報。
- Defender for Cloud に GitHub リポジトリを 接続する方法について説明します。
- Defender for Cloud に Azure DevOps を接続する方法について説明します。