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

Container Service for Kubernetes:kritis-validation-hook を使用したコンテナイメージ署名の検証

最終更新日:May 08, 2026

このトピックでは、Container Registry (ACR)、Key Management Service (KMS)、Security Center、および kritis-validation-hook コンポーネントを使用して、コンテナイメージの署名を自動的に検証する方法について説明します。このプロセスにより、信頼できる権限から提供されたコンテナイメージのみをデプロイでき、環境に誤ってまたは悪意のあるコードが混入するリスクを軽減できます。

前提条件

  • Security Center が有効化されていること:

    • サブスクリプションUltimate(ご利用のエディションでこの機能がサポートされていない場合は、スペックアップしてください)。

    • 従量課金:有効化済みのHost and Container Security従量課金(未有効化の場合は、購入してください)。

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

    重要

    コンテナ署名には非対称キーが必要です。KMS キーを作成する際は、キータイプRSA_2048 に、Key UsageSign/Verify に設定する必要があります。KMS キーアルゴリズムの詳細については、「Key Management Service の概要」をご参照ください。

  • ACR Enterprise Edition インスタンスを Advanced スペックで作成している必要があります。

手順 1:kritis-validation-hook のインストール

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

  2. クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、Components and Add-ons をクリックします。

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

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

    kritis-validation-hook コンポーネントを実行するために、クラスターに必要な権限が付与されていることを確認してください。詳細については、「リソースへのアクセス権限の設定」をご参照ください。

手順 2:イメージ署名用の KMS キーの作成

Customer Master Key (CMK) の作成手順については、「キーの管理」をご参照ください。

重要

キーを作成する際は、キータイプRSA_2048 に、Key UsageSign/Verify に設定してください。

手順 3:Security Center での証明者の作成

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

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

  3. Witness タブで、Create Witness をクリックします。パラメーターを設定後、OK をクリックします。

    Parameter

    Description

    証明者名

    コンテナイメージの承認を行うためにセキュリティポリシーを設定する際に証明者が選択されます。識別しやすい名前を指定することを推奨します。

    証明書の選択

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

    説明

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

手順 4:ACR での自動イメージ署名の有効化

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

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

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

  4. インスタンス ページで、Enterprise Edition インスタンスを見つけ、その名前をクリックするか、操作列の 管理 をクリックします。

    説明

    Enterprise Edition インスタンスを作成するには、インスタンスの作成 をクリックします。仕様Advanced に設定されていることを確認してください。

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

    名前空間を作成します。この名前空間内のすべてのコンテナイメージに対してイメージ署名を有効化できます。詳細については、「名前空間の基本操作」をご参照ください。

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

    署名ルールを追加する際は、手順 3 で Security Center に作成した証明者を選択してください。

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

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

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

手順 5:Security Center での署名検証の有効化

Security Center でセキュリティポリシーを作成・有効化し、特定の Kubernetes 名前空間に対してコンテナイメージ署名検証を強制します。

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

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

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

    Parameter

    Description

    ポリシー名

    セキュリティポリシーのわかりやすい名前を入力します。

    Witness

    作成した証明者を選択します。

    Application Cluster

    署名検証を有効化するクラスターグループをクリックし、対象の Cluster Namespace を選択します。

    Policy Status

    このオプションを有効化すると、ポリシーが即座に適用されます。

    説明

    ポリシーはデフォルトで無効になっています。

    Description

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

手順 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
  • 自動署名が有効化されている ACR 名前空間にイメージをプッシュします。その後、署名済みコンテナイメージをワークロードとしてデプロイできることを確認します。

    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

関連ドキュメント