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

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

最終更新日:Nov 09, 2025

このトピックでは、Container Registry (ACR)、Key Management Service (KMS)、Security Center、および kritis-validation-hook コンポーネントを使用してコンテナイメージの署名を自動的に検証する方法について説明します。このプラクティスにより、信頼できる認証局によって署名されたコンテナイメージのみをデプロイすることが保証され、環境内の偶発的または悪意のあるコードのリスクを低減できます。

前提条件

  • Security Center を有効化していること:

    • サブスクリプションサービス: Ultimate (現在のバージョンがサポートされていない場合は、アップグレードする必要があります)。

    • 従量課金サービス: Host and Container Security の従量課金サービスが有効になっています。有効になっていない場合は、「購入」をご参照ください。

  • 非対称暗号化アルゴリズムを使用する KMS キーを作成済みであること。詳細については、「キーの管理」をご参照ください。

    重要

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

ステップ 1: kritis-validation-hook コンポーネントをインストールする

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

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

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

  4. kritis-validation-hook コンポーネントに必要な権限を付与します。

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

ステップ 2: コンテナイメージ署名用の KMS キーを作成する

カスタマーマスターキー (CMK) を作成します。詳細については、「キーの管理」をご参照ください。

重要

キーを作成する際には、[キー仕様]RSA_2048 に、[目的]Sign/Verify に設定します。

ステップ 3: Security Center で KMS キーを使用する証明者を設定する

  1. Security Center コンソールにログインします。

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

  3. [証明者] タブで、[証明者の作成] をクリックします。設定を完了し、[OK] をクリックします。

    設定項目

    注意

    証明者名

    コンテナイメージ署名のセキュリティポリシーを設定する際、ターゲットコンテナに信頼された権限を付与するために証明者が必要です。証明者のわかりやすい名前を入力します。

    証明書の選択

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

    説明

    証明者の説明を入力します。

ステップ 4: ACR でコンテナイメージの自動署名を有効にする

  1. Container Registry コンソールにログインします。

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

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

  4. [インスタンス] ページで、対象の Enterprise 版インスタンスの名前または [管理] をクリックします。

    説明

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

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

    名前空間を作成し、その名前空間内のイメージに対してイメージ署名を有効にする必要があります。詳細については、「名前空間の管理」をご参照ください。

  6. 作成した名前空間に対してコンテナイメージの自動署名を有効にします。

    署名ルールを追加する際、ステップ 3 で Security Center に作成した証明者を選択します。

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

    2. [イメージ署名] タブで [署名ルールの追加] をクリックします。

      イメージ署名ルールの設定方法の詳細については、「自動イメージ署名ルールの設定」をご参照ください。

ステップ 5: Security Center でコンテナイメージ署名検証を有効にする

Security Center でポリシーを追加して有効にすることで、Kubernetes クラスターの名前空間に対してコンテナイメージ署名検証を有効にします。

  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
  • 自動署名が有効になっている Container Registry の名前空間にイメージをプッシュします。次に、この署名済みコンテナイメージを使用してサービスをデプロイできることを確認します。

    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

リファレンス