すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:kritis-validation-hook を使用してコンテナイメージの署名を自動的に検証する

最終更新日:May 07, 2025

このトピックでは、コンテナレジストリ、キー管理サービス (KMS)、セキュリティセンター、および kritis-validation-hook を使用して、コンテナイメージの署名を自動的に検証する方法について説明します。これにより、信頼できる機関によって署名されたコンテナイメージのみをデプロイできます。また、環境内で悪意のあるコードが実行されるリスクも軽減されます。

前提条件

  • セキュリティセンターが有効化されている。

    • サブスクリプション: セキュリティセンターを有効化する方法の詳細については、「セキュリティセンターの購入」をご参照ください。究極 [エディション] パラメーターで を選択します。

    • 従量課金: セキュリティセンターを有効化する方法の詳細については、「機能の購入 (従量課金)」をご参照ください。[はい] [ホストとコンテナのセキュリティ] パラメーターを選択します。有効化後、少なくとも 1 つのサーバーの認証を完了します。詳細については、「クォータの管理」をご参照ください。

  • 非対称暗号化アルゴリズムの KMS キーが作成されている。KMS キーの作成方法の詳細については、「キーの管理」をご参照ください。

    重要

    コンテナ署名機能をサポートしているのは非対称キーアルゴリズムのみであるため、KMS キーを作成する際は、[キータイプ][RSA_2048] に、[キーの使用法][SIGN/VERIFY] に設定する必要があります。KMS キーアルゴリズムの詳細については、「キータイプ」をご参照ください。

手順 1: kritis-validation-hook をインストールする

  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  3. [アドオン] ページで、[セキュリティ] タブをクリックし、[kritis-validation-hook] コンポーネントを見つけて、[インストール] をクリックします。

  4. kritis-validation-hook を実行するための権限をクラスターに付与します。

    クラスターに kritis-validation-hook を実行するための権限を付与する必要があります。詳細については、「リソースにアクセスするためのクラスターを承認する」をご参照ください。

手順 2: KMS コンソールでイメージの署名に使用するキーを作成する

CMK の作成方法の詳細については、「キーの管理」をご参照ください。

重要

キーを作成する際は、[キースペック][RSA_2048] に、[目的][署名/検証] に設定します。

手順 3: セキュリティセンターコンソールでキーを使用するウィットネスを作成する

  1. セキュリティセンターコンソール にログインします。上部のナビゲーションバーで、管理するアセットのリージョンを選択します。中国 または 全世界 (中国を除く) を選択できます。

  2. 左側のナビゲーションウィンドウで、[保護構成] > [コンテナ保護] > [コンテナ署名] を選択します。

  3. [ウィットネス] タブで、[ウィットネスの作成] をクリックします。構成が完了したら、[OK] をクリックします。

    パラメーター

    説明

    [ウィットネス]

    ウィットネスの名前を入力します。セキュリティポリシーを構成する際は、必要なコンテナのコンテナ署名機能を有効にするために、ウィットネスを選択する必要があります。わかりやすい名前を入力することをお勧めします。

    [証明書の選択]

    証明書リストから、作成した KMS CMK を選択します。

    [説明]

    ウィットネスの説明を入力します。

手順 4: コンテナレジストリでイメージ署名を有効にする

  1. コンテナレジストリコンソール にログインします。

  2. 上部のナビゲーションバーで、リージョンを選択します。

  3. 左側のナビゲーションウィンドウで、[インスタンス] をクリックします。

  4. [インスタンス] ページで、管理する Enterprise Edition インスタンスを見つけて、インスタンス名をクリックするか、[管理] をクリックします。

    説明

    Enterprise Edition インスタンスを追加するには、[ACR EE の作成] をクリックし、[インスタンスタイプ][詳細設定] に設定します。

  5. 詳細ページの左側のナビゲーション ウィンドウで、[リポジトリ] > [名前空間] を選択します。

    名前空間を作成し、名前空間内のイメージの Image Signing を有効にします。詳細については、「名前空間の管理」をご参照ください。

  6. 作成した名前空間にイメージ署名を有効にします。

    署名ルールを作成する場合は、手順 3 で作成した監視者を選択します。

    1. 左側のナビゲーション ウィンドウで、[セキュリティと信頼] > [イメージ署名] を選択します。

    2. [イメージ署名] タブで、[署名ルールを作成] をクリックします。

      詳細については、「イメージの自動署名のための署名ルールを構成する」をご参照ください。

手順 5:Security Center で署名検証を有効にする

名前空間の署名検証を有効にするには、Security Center コンソールでクラスターのセキュリティポリシーを追加して有効にします。

  1. Security Center コンソール にログインします。 上部のナビゲーションバーで、管理するアセットのリージョンを選択します。 中国 または 全世界 (中国を除く) を選択できます。

  2. 左側のナビゲーションウィンドウで、[保護設定] > [コンテナー保護] > [コンテナー署名] を選択します。

  3. [セキュリティポリシー] タブで、[ポリシーの追加] をクリックします。 パラメーターを設定した後、[OK] をクリックします。

    パラメーター

    説明

    [ポリシー名]

    セキュリティポリシーの名前を入力します。 セキュリティポリシーを設定する場合は、必要なクラスターのコンテナー機能を有効にするために、ウィットネスを選択する必要があります。

    わかりやすい名前を入力することをお勧めします。

    [ウィットネス]

    ウィットネスリストから作成したウィットネスを選択します。

    [アプリケーションクラスター]

    コンテナー署名機能を有効にするクラスターグループを選択します。 次に、必要な [クラスター名前空間] を選択します。

    [ポリシーの有効化]

    スイッチをオンにします。 ポリシーは、作成後に自動的に有効になります。

    説明

    スイッチはデフォルトでオフになっています。 この場合、ポリシーは作成後に有効になりません。

    [メモ]

    セキュリティポリシーの説明を入力します。

ステップ 6:署名検証が有効になっているかどうかを確認する

説明

リポジトリがイミュータブルになるように構成されていない場合、ダイジェスト形式のイメージのみがサポートされます。リポジトリをイミュータブルに構成する方法の詳細については、「リポジトリをイミュータブルに構成する」をご参照ください。

次のコマンドを実行して、署名検証が有効になっているかどうかを確認します。

  • デフォルトの名前空間で署名検証が有効になっていると、署名されていないイメージを名前空間にデプロイすることはできません。

    タグでイメージを指定するには、次のコマンドを実行します。

    kubectl -n default create deployment not-sign --image=alpine:3.11 -- sleep 10
    Error from server: admission webhook "kritis-validation-hook-deployments.grafeas.io" denied the request: image alpine:3.11 is not attested

    ダイジェストでイメージを指定するには、次のコマンドを実行します。

    kubectl -n default create deployment not-sign --image=alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 -- sleep 10
    Error from server: admission webhook "kritis-validation-hook-deployments.grafeas.io" denied the request: image alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 is not attested
  • イメージ署名の署名が有効になっている名前空間にイメージをプッシュします。次に、イメージが署名された後にデプロイできることを確認します。

    docker push kritis-demo***.cn-hongkong.cr.aliyuncs.com/kritis-demo***/alpine:3.11
    The push refers to repository [kritis-demo***.cn-hongkong.cr.aliyuncs.com/kritis-demo***/alpine]
    5216338b40a7: Pushed
    3.11: digest: sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 size: 528

    署名済みイメージのデプロイリクエストを受け入れるには、次のコマンドを実行します。

    kubectl -n default create deployment is-signed --image=kritis-demo***.cn-hongkong.cr.aliyuncs.com/kritis-demo***/alpine@sha256:ddba4d27a7ffc3f86dd6c2f92041af252a1f23a8e742c90e6e1297bfa1bc0c45 -- sleep 10
    deployment.apps/is-signed created

参考資料