この記事では、継続的な修正プログラムのインストール、有効化、構成を行う方法について説明します。 コンテナー レジストリに対して有効にした場合、継続的な修正は、コンテナー イメージの OS (オペレーティング システム) レベルの脆弱性を自動的に検出して修復します。
[前提条件]
- Azure Cloud Shell または Azure CLI のローカル インストールを、最小バージョン 2.15.0 以降で使用できます。
- Azure Container Registry (ACR) を持つ既存のリソース グループがある。
- ACR タスクが有効になっている Azure Container Registry がある (ACR タスクは ACR の Free レベルではサポートされていません)。
次のコマンドを実行して、CLI 拡張機能をインストールします。
az extension add -n acrcssc
継続的パッチ適用ワークフローを有効にする
az login を使用して Azure CLI にログインします。
az loginACR にログインします。
az acr login -n <myRegistry>次のコマンドを実行して、
continuouspatching.jsonという名前のファイルを作成します。cat <<EOF > continuouspatching.json { "version": "v1", "tag-convention" : "<incremental|floating>", "repositories": [{ "repository": "<Repository Name>", "tags": ["<comma-separated-tags>"], "enabled": <true|false> }] } EOFスキーマは、配列形式で特定のリポジトリとタグを取り込みます。 各変数はここで定義されています。
versionを使用すると、ACR チームは、使用しているスキーマのバージョンを追跡できます。 指示がない限り、この変数を変更しないでください。tag-conventionは省略可能なフィールドです。 使用できる値は "増分" または "フローティング" です。詳細については、 継続的パッチ適用の主要概念を 参照してください。repositoriesは、詳細なリポジトリとタグ情報で構成される配列です。-
repositoryはリポジトリ名を参照します -
tagsは、コンマで区切られたタグの配列です。 ワイルドカード*を使用して、そのリポジトリ内のすべてのタグを示すことができます。 -
enabledは、指定したリポジトリが有効かどうかを判断する true または false のブール値です。
-
次の例は、リポジトリ
python内のすべてのタグにパッチを適用 (* 記号を使用) し、リポジトリjammy-20240111内のjammy-20240125タグとubuntuタグにパッチを適用する顧客の構成を示しています。{ "version": "v1", "tag-convention" : "incremental", "repositories": [{ "repository": "python", "tags": ["*"], "enabled": true }, { "repository": "ubuntu", "tags": ["jammy-20240111", "jammy-20240125"], "enabled": true, }] }構成ファイルを作成した後、ドライ ランを実行して、目的の成果物が JSON 条件によって選択されていることを確認します。 ドライ ランには、
scheduleというパラメーターが必要です。これは、継続的なパッチ適用サイクルの実行頻度を指定します。 スケジュール フラグは日単位で測定され、最小値は 1 日、最大値は 30 日です。 たとえば、イメージに毎日パッチを適用する場合は、スケジュールを1dまたは 1 日として指定します。 週 1 回のパッチが必要な場合は、スケジュールを7dまたは 7 日間として入力します。az acr supply-chain workflow create -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d --dry-run--dry-runフラグは、JSON ファイル構成によって指定されたすべての成果物を出力します。 適切な成果物が選択されていることを確認します。 ubuntu 構成のサンプルでは、次の結果が出力として表示されます。Ubuntu: jammy-20240111 Ubuntu: jammy-20240125ドライランの結果に問題がなければ、
createフラグを指定せずに--dry-runコマンドをもう一度実行して、継続的なパッチ適用ワークフローを作成します。注
--scheduleパラメーターは、月の 1 日目から始まる固定日乗数に従います。 これは、以下のようなことを意味します。-
--schedule 7dを指定し、3 日にコマンドを実行すると、7 が 3 日の後の最初の倍数であり、月の 1 日目からカウントされるため、次にスケジュールされた実行は 7 日になります。 -
--scheduleが 3d で、今日が 7 番目の場合、9 は 7 に続く 3 の次の倍数であるため、次にスケジュールされた実行は 9 日に行われます。 - フラグを
--run-immediately追加すると、直ちにパッチの実行がトリガーされます。 その後のスケジュールされた実行は、--schedule値に基づいて、月の最初から最も近い日の倍数に引き続き調整されます。 - スケジュール カウンターは毎月 リセットされます 。 指定されたスケジュールに関係なく、ワークフローは毎月最初に実行され、その月の残りの期間の指定されたスケジュール値に従います。 パッチ適用が1月28日に実行され、スケジュールが7日の場合、次のパッチは2月1日、その次は2月8日に実行され、その後も7日ごとに続きます。
az acr supply-chain workflow create -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d --run-immediatelyコマンドが成功すると (
--run-immediatelyを含めるかどうかにかかわらず)、ワークフロー タスクがキューに登録されていることを確認する成功メッセージが表示されます。 また、ワークフローの次の実行がスケジュールされるタイミングを示す出力パラメーターも表示されるので、修正プログラムの適用が再びいつ行われるかを正確に追跡できます。-
Azure portal を使用してワークフロー タスクを表示する
ワークフローが成功したら、Azure portal に移動して実行中のタスクを表示します。 サービス メニューの [ サービス] で、[リポジトリ] を選択 します。
csscpolicies/patchpolicyという名前の新しいリポジトリが表示されます。 このリポジトリは、継続的なパッチ適用のために継続的に参照される JSON 構成成果物をホストします。次に、[ サービス] で [タスク] を選択 します。 次の 3 つの新しいタスクが表示されます。
-
cssc-trigger-workflow- このタスクは、構成ファイルをスキャンし、それぞれのイメージでスキャン タスクを呼び出します。 -
cssc-scan-image- このタスクは、オペレーティング システムの脆弱性についてイメージをスキャンします。 このタスクは、オペレーティング システムの脆弱性が見つかった場合にのみ、修正プログラムの適用タスクをトリガーします。 -
cssc-patch-image- このタスクはイメージにパッチを適用します。
これらのタスクは、継続的パッチ適用ワークフローを実行するために連携して機能します。
-
特定のタスクの実行を表示するには、[実行] を選択 します。 ここでは、タスクが成功したか失敗したかに関する状態情報と、デバッグ ログを表示できます。
CLI を使用してワークフロー タスクを表示する
次の CLI show コマンドを実行して、各タスクと一般的なワークフローの詳細を確認することもできます。 このコマンドは、スケジュール、作成日、および最終変更日などのシステム データを出力します。
例えば次が挙げられます。
az acr supply-chain workflow show -r myRegistry -g myResourceGroup -t continuouspatchv1
必要なすべてのフラグと省略可能なフラグを表示するには、ヘルプ コマンドを使用します。
az acr supply-chain workflow show --help
継続的パッチ適用ワークフローを更新する
継続的パッチ適用ワークフローを編集するには、update コマンドを使用します。 スケジュールまたは JSON 構成スキーマは、UPDATE CLI コマンドを使用して直接更新できます。 例えば次が挙げられます。
az acr supply-chain workflow update -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d
スケジュールを更新するには、スケジュールの新しい入力で前のコマンドを実行します。 JSON 構成を更新するには、ファイルを変更し、ドライランを実行してから、update コマンドを実行することをお勧めします。
継続的パッチ適用ワークフローを削除する
継続的パッチ適用ワークフローを削除するには、次の CLI コマンドを実行します。
az acr supply-chain workflow delete -r myregistry -g myresourcegroup -t continuouspatchv1
ワークフローが正常に削除されると、リポジトリ "csscpolicies/patchpolicy" が自動的に削除されます。 ワークフローを実行する 3 つのタスクも、現在キューに登録されている実行と共に削除されます。
継続的パッチ適用のトラブルシューティング
これらのヒントを確認して、継続的なパッチ適用で発生する可能性がある問題のトラブルシューティングを行います。
実行中のタスクを一覧表示する
デバッグに関する重要な情報を取得するには、次のコマンドを使用して、最近実行された継続的パッチ適用タスクを一覧表示します。
az acr supply-chain workflow list -r <registryname> -g <resourcegroup> [--run-status <failed || successful || running>] -t continuouspatchv1
成功すると、次の情報が返されます。
- イメージ名とタグ
- ワークフローの種類
- スキャンの状態
- 最後にスキャンされた日時 (ステータスが失敗である場合、日付は空白のままにされます)
- スキャンタスクID (デバッグ用)
- パッチの状態
- 最終パッチの日付と時刻 (状態が失敗した場合、日付は空白のままにされます)
- 修正プログラムが適用されたイメージ名とタグ
- パッチ タスク ID (さらにデバッグ用)
[--run-status] を使用して、指定したフィルターに一致するすべてのタスクの状態を返します。 たとえば、 --run-status failedを指定した場合、修正プログラムの適用に失敗したイメージのみが一覧表示されます。
実行中のタスクを取り消す
特定のシナリオでは、現在実行中または実行を待機しているタスクを取り消す必要がある場合があります。 たとえば、更新プログラムのタスクが完了するのを待つのではなく、すぐに修正したいと考える構成ミスを見つけることがあります。
実行中のタスクを取り消すには、次の CLI コマンドを使用します。
az acr supply-chain workflow cancel-run -r <registryname> -g <resourcegroup> --type <continuouspatchv1>
このコマンドは、現在のスケジュールの Running、 Queued、または Started の状態で、すべての継続的な修正プログラムの適用タスクを取り消します。 たとえば、毎日のスケジュール (--schedule 1d) でタスクを取り消した場合、それらの状態のタスクはその日に取り消され、次の日に再度スケジュールされます。 スケジュールが毎週の場合、取り消されたタスクは次の週に再び表示されます。
失敗したタスクを検索する
タスク一覧コマンドを使用して、失敗したすべてのタスクを出力します。
cssc-patch コマンドの指定は、エラーに最適です。
たとえば、次のコマンドは、失敗したパッチ タスクの上位 10 個を返します。
az acr task list-runs -r <registryname> -n cssc-patch-image --run-status Failed --top 10
特定のエラーを調査するには、このコマンドから返された runID を書き留め、次のコマンドを実行します。
az acr task logs -r <registryname> --run-id <run-id>
正しく構成されていないワークフローを取り消す
cancel コマンドを使用してキューに登録されたタスクを取り消します。
az acr supply-chain workflow cancel-run -r <registryname> -g <resourcegroup> --type <continuouspatchv1>