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

Container Service for Kubernetes:Notation と Ratify を使用した OCI アーティファクトの署名と署名検証

最終更新日:Nov 09, 2025

notation-alibabacloud-secret-manager プラグインと Key Management Service (KMS) のキーを使用して、Container Registry (ACR) で管理される Open Container Initiative (OCI) アーティファFァクトに署名できます。署名後、クラスターに Ratify をインストールして設定し、これらの署名を検証できます。このプロセスにより、有効な署名を持つイメージのみがデプロイされ、署名のないイメージはブロックされるため、システムのセキュリティが向上します。

関連概念

notation-alibabacloud-secret-manager: オープンソースの Notation プロジェクトの仕様に従って開発されたプラグインです。このプラグインを使用すると、Alibaba Cloud Key Management Service (KMS) で管理されるキーを使用して、ACR で管理されるイメージに署名できます。

Ratify: Kubernetes クラスターで実行されるバイナリ実行可能検証エンジンです。Ratify は、イメージ署名やソフトウェア部品表 (SBOM) などのセキュリティメタデータをクラウドネイティブアーティファクトに挿入して検証します。ポリシー要件を満たすアーティファクトのみがクラスターにデプロイされるようにします。

前提条件

ステップ 1: KMS インスタンスで管理されるキーの取得

Key Management Service (KMS) は、簡素化された、信頼性が高く、安全で、コンプライアンスに準拠した認証情報管理とデータ暗号化のためのオールインワンプラットフォームです。notation-alibabacloud-secret-manager プラグインを使用して、KMS で作成および管理されるキー、または KMS にインポートされた自己署名キーでアーティファクトに署名できます。

KMS で作成および管理されるキーの使用

  1. KMS コンソールにログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、リソース > キー管理 を選択します。

  2. キー管理 ページで、キー タブをクリックし、インスタンス管理 ドロップダウンリストからソフトウェアキー管理インスタンスを選択して、キーを作成 をクリックします。

  3. キーを作成 パネルで設定を構成し、[OK] をクリックします。

    次の表にパラメーターを示します。詳細については、「ソフトウェアで保護されたキー」をご参照ください。

    設定項目

    説明

    KMS インスタンス

    キーを作成する KMS インスタンスを選択します。

    kst-l***

    キータイプ

    非対称キーを選択します。

    非対称キー

    キー仕様

    次の非対称キー仕様がサポートされています。

    • RSA_2048

    • RSA_3072

    • EC_P256

    RSA-2048

    キー使用

    [SIGN/VERIFY] を選択します。これは、キーがデジタル署名の生成と検証に使用されることを示します。

    SIGN/VERIFY

    キーのエイリアス

    キーのエイリアス。エイリアスには、文字、数字、アンダースコア (_)、ハイフン (-)、およびスラッシュ (/) を含めることができます。

    test-key

    タグ

    キーのタグ。タグを使用してキーを分類および管理できます。各タグは、タグキーとタグ値を含むキーと値のペアで構成されます。

    なし

  4. アプリケーションアクセスポイント (AAP) を作成します。

    1. 左側のナビゲーションウィンドウで、[アプリケーションアクセス] > [エンドポイント] をクリックします。

    2. アプリケーションアクセス タブで、Create AAP をクリックします。Create AAP パネルで、パラメーターを設定します。

      パラメーター

      説明

      Mode

      Quick Creation を選択します。

      Scope (KMS Instance)

      アクセスする KMS インスタンスを選択します。

      Application Access Point Name

      AAP の名前を入力します。

      Authentication Method

      デフォルト値は ClientKey で、変更できません。

      Default Permission Policy

      デフォルト値は key/*secret/* で、変更できません。アプリケーションは、指定された KMS インスタンス内のすべてのキーとシークレットにアクセスできます。

    3. [OK] をクリックすると、作成されたクライアントキーがブラウザによって自動的にダウンロードされます。

      クライアントキーには [Application Access Secret(ClientKeyContent)][パスワード] が含まれています。デフォルトでは、[Application Access Secret(ClientKeyContent)]clientKey_****.json 形式のファイル名で保存されます。デフォルトでは、[パスワード]clientKey_****_Password.txt 形式のファイル名で保存されます。

KMS にインポートされた自己署名キーの使用

KMS でキーを作成するだけでなく、外部のキーマテリアルをインポートして自己署名キーを使用することもできます。このセクションでは、OpenSSL を使用して秘密キーと証明書を生成する例を示します。

1. 非対称キーの作成

  1. KMS コンソールにログインします。上部のナビゲーションバーでリージョンを選択します。左側のナビゲーションウィンドウで、リソース > キー管理 を選択します。

  2. キー管理 ページで、キー タブをクリックし、インスタンス管理 ドロップダウンリストからソフトウェアキー管理インスタンスを選択して、キーを作成 をクリックします。

  3. キーを作成 パネルで、パラメーターを設定し、[OK] をクリックします。

    次の表にパラメーターを示します。詳細については、「ステップ 1: 非対称キーの作成」をご参照ください。

    設定項目

    説明

    キータイプ

    非対称キーを選択します。

    非対称キー

    キー仕様

    次の非対称キー仕様がサポートされています。

    • RSA_2048

    • RSA_3072

    • EC_P256

    RSA-2048

    キー使用

    [SIGN/VERIFY] を選択します。これは、キーがデジタル署名の生成と検証に使用されることを示します。

    SIGN/VERIFY

    キーのエイリアス

    キーのエイリアス。エイリアスには、文字、数字、アンダースコア (_)、ハイフン (-)、およびスラッシュ (/) を含めることができます。

    test-key

    タグ

    キーのタグ。タグを使用してキーを分類および管理できます。各タグは、タグキーとタグ値を含むキーと値のペアで構成されます。

    なし

2. ラッピング公開キーとインポートトークンのダウンロード

キーマテリアルをインポートするためのパラメーターには、ラッピング公開キーとインポートトークンが含まれます。ラッピング公開キーは、インポートプロセス中にキーマテリアルを保護するために暗号化します。インポートトークンは、キーマテリアルをインポートするために必要です。

  1. 対象のキーを見つけ、操作 列の 詳細 をクリックします。キー詳細ページの キーマテリアル セクションで、インポートのパラメーターを取得 をクリックします。

  2. キー暗号化マテリアル ダイアログボックスで、パブリックキータイプ暗号化アルゴリズム を選択し、次へ をクリックします。

    キー管理タイプ

    KMS キー仕様

    ラッピング公開キータイプ

    暗号化アルゴリズム

    ソフトウェアで保護されたキー

    • RSA_2048

    • RSA_3072

    • EC_P256

    • EC_P256K

    RSA_2048

    RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD

    RSAES_OAEP_SHA_256_AES_256_ECB_PKCS7_PAD: 暗号化プロセスの詳細については、「例: OpenSSL を使用して RSA_2048 アルゴリズムのキーマテリアルを生成する」をご参照ください。

  3. ラッピング公開キーとインポートトークンをダウンロードし、安全な場所に保存します。

    • パブリックキー形式:

      • DER形式: ダウンロードされたファイルのデフォルト名は publickey_******.bin です。

      • PEM形式: ダウンロードされたファイルのデフォルト名は publickey_******.pem です。

    • トークンのインポート: ダウンロードされたファイルのデフォルト名は token_******.txt です。

      重要
      • インポートトークンは 24 時間有効で、有効期間内に複数回使用できます。トークンの有効期限が切れた後は、新しいインポートトークンと公開キーを取得する必要があります。

      • ラッピング公開キーとインポートトークンは一緒に使用する必要があります。異なるダウンロードからのインポートトークンとラッピング公開キーを組み合わせて使用することはできません。

3. ラッピング公開キーを使用したキーマテリアルの暗号化

システム環境でキーマテリアルを生成し、暗号化します。次の表に、このプロセスで使用されるキーを示します。

キー

目的

プロバイダー

説明

ターゲット非対称キー (TAK)

インポートするターゲット非対称キー。

オンプレミスのキー管理インフラストラクチャ (KMI) やハードウェアセキュリティモジュール (HSM) などのシステム環境またはツール。

  • TAKpub: 公開キー

  • TAKpriv: 秘密キー

インポートラッピングキー (IWK)

TAK をインポートするために使用される暗号化キー。

Alibaba Cloud KMS。

  • IWKpub: IWK の公開キー

    説明

    IWKpub は、Key Management Service コンソールからダウンロードするラッピング公開キーです。

  • IWKpriv: IWK の秘密キー

エフェメラル対称キー (ESK)

TAKpriv を直接暗号化するエフェメラル対称キー。

TAK をエクスポートした直後にソース環境のシステムまたはツールを破棄します。

N/A

  1. ターゲット非対称秘密キー (TAKpriv) を作成します。キー仕様は、非対称キーを作成したときに選択したものと同じでなければなりません。すでに TAKpriv をお持ちの場合は、このステップをスキップしてください。

    説明

    TAKpriv 形式は、次の標準に準拠する必要があります。RSA 秘密キーは RFC 3447 に基づいてエンコードされます。ECC 秘密キーは RFC 5915 に基づいてエンコードされます。その後、キーは RFC 5208 に基づいて PKCS#8 形式にラップされます。

  2. ESK を作成します。

  3. インポートラッピング公開キー (IWKpub) を使用して ESK を暗号化します。これにより、ESK の暗号文 (Cipher(ESK)) が生成されます。

  4. ESK を使用して TAKpriv を暗号化します。これにより、ターゲット非対称秘密キーの暗号文 (Cipher(TAKpriv)) が生成されます。

  5. 結果を Cipher(ESK)||Cipher(TAKpriv) 形式で組み立てて、暗号化されたキーマテリアルを取得します。

例: OpenSSL を使用して RSA_2048 アルゴリズムのキーマテリアルを生成する

  1. RSA_2048 アルゴリズムのターゲット非対称秘密キーを作成し、秘密キーを PKCS#8 形式に変換します。

    openssl genrsa -out TakPrivPkcs1.pem 2048
    openssl pkcs8 -topk8 -inform PEM -in TakPrivPkcs1.pem -outform der -nocrypt -out TakPrivPkcs8.bin
  2. AES_256 アルゴリズムのエフェメラルキー (ESK) を作成します。

    openssl rand -out EskAes256.bin 32
  3. インポートラッピング公開キー (IWKpub) を使用して ESK を暗号化します。これにより、ESK の暗号文 (Cipher(ESK)) が生成されます。暗号化は RSAES-OAEP 標準に基づいて実行され、ハッシュアルゴリズムとして MGF1 と SHA256 が使用されます。

    openssl pkeyutl -encrypt -pubin -inkey PublicKey.pem  -in EskAes256.bin  -pkeyopt \
    rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 -pkeyopt rsa_mgf1_md:sha256 -out \
    CipherEsk.bin
    説明

    PublicKey.pem を、KMS コンソールからダウンロードした公開キーファイルの名前に置き換えてください。

  4. ESK を使用して TAKpriv を暗号化します。これにより、ターゲット非対称秘密キーの暗号文 (Cipher(TAKpriv)) が生成されます。暗号化モードは ECB、パディングモードは PKCS#7 Padding です。

    xxd -l 32  -c 32 -ps EskAes256.bin | xargs -I {} openssl enc  -aes-256-ecb -e  -K {} -in \ 
    TakPrivPkcs8.bin -nosalt -out CipherTakPriv.bin
  5. 結果を Cipher(ESK) || Cipher(TAKpriv) 形式で組み立て、Base64 エンコーディングを実行します。

    cat CipherEsk.bin CipherTakPriv.bin > EncryptedKeyMaterial.bin
    openssl enc -e -base64 -A -in EncryptedKeyMaterial.bin -out EncryptedKeyMaterial_base64.txt
    説明

    EncryptedKeyMaterial_base64.txt ファイルは、KMS にインポートするキーマテリアルファイルです。

4. キーマテリアルのインポート

キー詳細ページで、キーマテリアルのインポート をクリックします。開いた ラップされたキーマテリアルのインポート ダイアログボックスで、パラメーターを設定し、[OK] をクリックします。

キーマテリアルをインポートすると、キーのステータスが インポート待ち から 有効化 に変わります。

kms.png

  • 包まれたキーマテリアル: ステップ 3. ラッピング公開キーを使用したキーマテリアルの暗号化 で生成されたキーマテリアルファイルをアップロードします。

  • トークンのインポート: 3. ラッピング公開キーを使用したキーマテリアルの暗号化 でダウンロードしたトークンファイルをアップロードします。

  • 有効期限が切れたキーマテリアル: 有効期限はありません を選択するか、カスタムの有効期限を指定できます。

    重要

    キーマテリアルに有効期限を指定した場合、KMS は有効期限に達するとキーマテリアルを削除し、それ以降キーマテリアルを使用できなくなります。キーマテリアルを再利用したい場合は、同じキーマテリアルをキーに再インポートできます。

ステップ 2: notation-alibabacloud-secret-manager プラグインのインストール

notation-alibabacloud-secret-manager プラグインは、オープンソースの Notation プロジェクトの仕様に従って開発されています。このプラグインを使用すると、Alibaba Cloud KMS で管理されるキーを使用して、ACR で管理されるイメージに署名できます。

説明

notation-alibabacloud-secret-manager プラグインは、KMS インスタンスと同じリージョンおよび VPC で実行する必要があります。同じリージョン内の複数の VPC から KMS インスタンスにアクセスする方法の詳細については、「同一リージョン内の KMS インスタンスへのマルチ VPC アクセスの設定」をご参照ください。

  1. お使いのオペレーティングシステム用のプラグインをダウンロードします。その他のバージョンについては、「notation-alibabacloud-secret-manager」をご参照ください。

    • Linux_arm64

      wget  https://notation-alibabacloud-secret-manager.oss-cn-hangzhou.aliyuncs.com/dist/v0.1.2/notation-alibabacloud-secret-manager_Linux_arm64.tar.gz      
    • Linux_X86_64

      wget https://notation-alibabacloud-secret-manager.oss-cn-hangzhou.aliyuncs.com/dist/v0.1.2/notation-alibabacloud-secret-manager_Linux_x86_64.tar.gz
  2. 次のコマンドを実行して、プラグイン用のディレクトリを作成します。

    mkdir -p  /root/.config/notation/plugins/alibabacloud.secretmanager.plugin/
  3. 次のコマンドを実行して、プラグインパッケージを指定されたディレクトリに解凍します。

    tar -xvf notation-alibabacloud-secret-manager_Linux_<Version>.tar.gz  -C /root/.config/notation/plugins/alibabacloud.secretmanager.plugin/
  4. 環境変数を設定します。

    export ALIBABA_CLOUD_ACCESS_KEY_ID=your_access_key_id
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=your_access_key_secret
    export ALIBABA_CLOUD_KMS_INSTANCE_ENDPOINT=your_kms_endpoint
    export ALIBABA_CLOUD_KMS_CLIENTKEY_FILEPATH=your_clientkey_filepath
    export ALIBABA_CLOUD_KMS_PASSWORD=your_password
    export ALIBABA_CLOUD_KMS_CA_FILEPATH=your_ca_filepath
    説明

    notation-alibabacloud-secret-manager プラグインは、複数の認証情報設定方法をサポートしています。詳細については、「credentials」をご参照ください。

    環境変数

    説明

    ALIBABA_CLOUD_ACCESS_KEY_ID

    Alibaba Cloud アカウントの AccessKey ID。

    XXXXXX

    ALIBABA_CLOUD_ACCESS_KEY_SECRET

    Alibaba Cloud アカウントの AccessKey Secret。

    XXXXXX

    ALIBABA_CLOUD_KMS_INSTANCE_ENDPOINT

    専用 KMS インスタンスの VPC エンドポイント。

    kst-hzxxxxxxxxxx.cryptoservice.kms.aliyuncs.com

    ALIBABA_CLOUD_KMS_CLIENTKEY_FILEPATH

    専用 KMS インスタンスの AAP のクライアントキーを保存するローカルファイルのパス。/root/clientkey などのファイルを作成し、AAP の作成の ステップ c でブラウザからダウンロードした clientKey_KAAP.****.json ファイルの内容をコピーします。

    /root/clientkey

    ALIBABA_CLOUD_KMS_PASSWORD

    専用 KMS インスタンスの AAP のパスワード。AAP の作成の ステップ c でブラウザからダウンロードした clientKey_KAAP.594c78e6-7244-4187-XXX-8d59dca2ceb4_Password.txt ファイルの内容を使用します。

    XXXXXX

    ALIBABA_CLOUD_KMS_CA_FILEPATH

    専用 KMS インスタンスの CA 証明書を保存するローカルファイルのパス。ファイルを作成し、「ステップ 5: KMS インスタンスの CA 証明書の取得」の手順に従ってブラウザからダウンロードした PrivateKmsCA_xxxxx.pem ファイルの内容をコピーします。

    /root/privatekmsca

ステップ 3: イメージの準備と署名

1. ACR でのイメージの準備

  1. Container Registry Enterprise Edition インスタンスを使用してイメージをビルドするか、オンプレミスデバイスでマルチアーキテクチャイメージをビルドして Container Registry Enterprise Edition インスタンスにプッシュする

    説明

    Container Registry Enterprise Edition は OCI Image and Distribution Specification 1.1.0 をサポートしています。OCI Registry As Storage (ORAS) などのツールを使用して、非イメージアーティファクトを管理および配布できます。詳細については、「OCI v1.1.0 仕様を使用したコンテナイメージとその派生アーティファクトの管理と関連付け」をご参照ください。

  2. Container Registry Enterprise Edition インスタンスの VPC またはインターネットアクセス制御を設定します。詳細については、「ネットワークアクセス制御」をご参照ください。

  3. Container Registry Enterprise Edition インスタンスにログインするためのパスワードを取得します。パスワードを忘れた場合は、アクセス資格情報を設定することでリセットできます。詳細については、「Container Registry Enterprise Edition インスタンスのアクセス資格情報の設定」をご参照ください。

2. KMS で管理されるキーに基づく ACR イメージへの Notation を使用した署名

notation-alibabacloud-secret-manager プラグインを使用して、KMS の秘密キーと証明書を使用して ACR 内の指定されたイメージに署名できます。

notation-alibabacloud-secret-manager プラグインで KMS Instance SDK for Go を使用するには、次の条件を満たし、必要な環境変数を設定する必要があります。

  1. 次のコマンドを実行して、イメージリポジトリにログインします。

    ./notation login --username=tsh_ram@11380257155*** test-for-doc-registry.cn-hangzhou.cr.aliyuncs.com
  2. 次のコマンドを実行して、指定されたイメージに署名し、証明書を生成します。このコマンドでは、<dirPath> は証明書が保存されるパスです (例: /root)。

    ./notation sign  --id <keyId> --plugin alibabacloud.secretmanager.plugin test-for-doc-registry.cn-hangzhou.cr.aliyuncs.com/test/nginx:2.11 --plugin-config output_cert_dir=<dirPath>

    期待される出力:

    Successfully signed test-for-doc-registry.cn-hangzhou.cr.aliyuncs.com/test/nginx@sha256:f57e1908e63538ad5159fa99443d0492d23b9d34ba7******
  3. Notation CLI で次のコマンドを実行して、アーティファクトに署名できます。

    notation sign --id <keyId> --plugin alibabacloud.secretmanager.plugin  <myRegistry>/<myRepo>@<digest> --plugin-config output_cert_dir=<dirPath>

    パラメーター

    説明

    id

    Alibaba Cloud KMS インスタンスの ID。

    plugin-config

    プラグインのカスタムパラメーター。次のパラメーターがサポートされています。

    • output_cert_dir: アーティファクトに署名する際、このパラメーターを使用して、指定された KMS キーに基づいて対応する X.509 検証証明書を発行し、証明書を指定されたディレクトリのファイルに出力できます。

    • ca_certs: KMS インスタンスにインポートされた自己署名キーを使用してアーティファクトに署名する場合、そのキーを使用して X.509 証明書も発行する場合は、このパラメーターを使用して自己署名証明書のパスを指定できます。

ステップ 4: Ratify と Gatekeeper を使用した署名の検証

1. Ratify と Gatekeeper のインストール

  1. Gatekeeper ベースのポリシーガバナンスを有効にします。詳細については、「ポリシーガバナンスの有効化」をご参照ください。

  2. Ratify をインストールします。

    1. ratify 名前空間を作成します。

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

    3. クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [Helm] を選択します。

    4. [Helm] ページで、[作成] をクリックします。[基本情報] ページで、パラメーターを設定し、[ratify] チャートを選択して、[次へ] をクリックします。

      パラメーター

      アプリケーション名

      ratify

      名前空間

      ratify を選択します。

      ソース

      デフォルト値は [マーケットプレイス] です。

      チャート

      • シナリオ: [すべて] を選択します。

      • サポートされるアーキテクチャ: [amd64] を選択します。

      • 検索ボックス: ratify を検索します。

    5. [パラメーター] ページで、[チャートバージョン] を選択します。RAM Roles for Service Accounts (RRSA) を使用してイメージをプルする場合は、設定例に基づいてパラメーターを変更します。その後、[OK] をクリックします。

      パラメーター

      説明

      デフォルト

      設定例

      ServiceAccount.create

      Ratify 専用の ServiceAccount を作成するかどうかを指定します。有効な値:

      • true (デフォルト): ratify-admin という名前の ServiceAccount を自動的に作成します。

      • false: ServiceAccount を自動的に作成しません。RRSA を使用してイメージをプルする場合は、事前に ServiceAccount を作成する必要があります。

      true

      デフォルト値を維持します。

      ServiceAccount.name

      Ratify ServiceAccount のカスタム名。

      ratify-admin

      デフォルト値を維持します。

      ServiceAccount.annotations

      ServiceAccount のカスタムアノテーション。

      {}

      pod-identity.alibabacloud.com/role-name: <Your-RRSA-role> アノテーションを追加して、自動インジェクションを有効にします。

      説明

      <Your-RRSA-role> を使用する RRSA ロールに置き換えてください。

      oras.authProviders.k8secretsEnabled

      イメージリポジトリとの認証に Kubernetes Secrets Provider を有効にするかどうかを指定します。

      false

      デフォルト値を維持します。

      説明

      ORAS の設定の詳細については、「ORAS Store 設定例」をご参照ください。

      oras.authProviders.alibabacloudAcrBasicEnabled

      ACR イメージリポジトリインスタンスの RRSA 認証のために Alibaba Cloud ACR Provider を有効にするかどうかを指定します。

      false

      true

      oras.cache.enabled

      ListReferrersGetSubjectDescriptor の ORAS ストアキャッシングを有効にするかどうかを指定します。

      重要

      このパラメーターを有効にすると、TTL ベースのキャッシュがデータソースと一致しなくなる可能性があります。強力な整合性が必要な場合は、このパラメーターを無効にしてください。

      true

      デフォルト値を維持します。

      oras.cache.ttl

      ORAS Store のキャッシュの TTL。

      10

      デフォルト値を維持します。

      alibabacloudAcrConfig.defaultInstanceId

      宛先アーティファクトが配置されている ACR リポジトリのデフォルトのインスタンス ID。

      ``

      必須。

      作成した ACR Enterprise Edition リポジトリのインスタンス ID を設定する必要があります。

      alibabacloudAcrConfig.acrInstancesConfig

      異なる Alibaba Cloud ACR リポジトリインスタンスからイメージをプルするには、リスト内の各インスタンスの instanceNameinstanceId を定義する必要があります。

      []

      Alibaba Cloud ACR プライベートリポジトリに接続するには、このパラメーターを次の内容に設定します。

      image

      upgradeCRDs.enabled

      Ratify CRD のアップグレードのために、インストール前のチャートフックプラグインを有効にするか無効にするかを指定します。

      true

      Ratify CRD をアップグレードする必要がない場合は、このパラメーターを false に設定できます。

      説明

      このパラメーターを true に設定すると、pre-install hook がトリガーされ、インストールがタイムアウトする可能性があります。

      featureFlags.RATIFY_CERT_ROTATION

      TLS 証明書のローテーションを有効または無効にするかを指定します。この設定により、Ratify は証明書を自動的に生成およびローテーションできます。

      false

      Ratify バックエンドが証明書を自動的に生成およびローテーションできるようにするには、このパラメーターを true に設定する必要があります。

      notationCert

      非推奨

      代わりに notationCerts を使用して、Notation の検証証明書のキューを指定します。指定された証明書と証明書チェーンの公開キーは、Notation 検証機能が使用する組み込みの certstore を作成するために使用されます。

      なし

      デフォルト値を維持します。

      notationCerts

      Notation 検証機能の組み込み certstore 用に、公開キー証明書と証明書チェーンのキューを設定するために使用されます。

      ``

      Notation プラグインの署名プロセス中に返される KMS 検証証明書を指定する必要があります。例:

      image

  3. 左側のナビゲーションウィンドウで、[セキュリティ] > [ポリシー管理] を選択します。[マイポリシー] タブをクリックし、RatifyVerification ポリシーが存在することを確認します。image

2. プライベート ACR イメージの署名情報をプルするための RRSA の設定

Ratify は、RRSA を使用してプライベートな Alibaba Cloud ACR リポジトリから署名データをプルすることをサポートしています。詳細については、「RRSA を使用して ServiceAccount の RAM 権限を設定し、Pod の権限分離を実装する」をご参照ください。

  1. 指定されたクラスターの [アドオン] ページで、ack-pod-identity-webhook コンポーネントをインストールします

  2. ratify-role という名前の RAM ロールを作成し、その信頼できるエンティティタイプを ID プロバイダーに設定し、条件フィールドを設定します。ack-ram-tool CLI ツールを使用して設定を自動化することもできます。

    {
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "oidc:aud": "sts.aliyuncs.com",
          "oidc:iss": "<oidc_issuer_url>",
          "oidc:sub": "system:serviceaccount:<namespace>:<service_account>" # インストールされている Ratify コンポーネントの名前空間と ServiceAccount を使用します。
        }
      },
      "Effect": "Allow",
      "Principal": {
        "Federated": [
          "<oidc_provider_arn>"
        ]
      }
    }
  3. ratify-role RAM ロールに AliyunContainerRegistryFullAccess 権限を付与します。

  4. Ratify をデプロイする際、ServiceAccount を作成し、Ratify がデプロイされている名前空間と ServiceAccount に次のアノテーションを設定します。デプロイ後、ALIBABA_CLOUD_ROLE_ARNALIBABA_CLOUD_OIDC_PROVIDER_ARN、および ALIBABA_CLOUD_OIDC_TOKEN_FILE 環境変数が Ratify Pod テンプレートにインジェクトされていることを確認できます。

    説明

    事前に ServiceAccount を作成している場合は、それに pod-identity.alibabacloud.com/role-name: ratify-role アノテーションを追加してください。

    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ratify  # 名前空間の名前を指定します。
      labels:
        pod-identity.alibabacloud.com/injection: 'on'
    
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: ratify-admin    # ServiceAccount の名前を指定します。
      namespace: ratify     # 名前空間の名前を指定します。
      annotations:
        pod-identity.alibabacloud.com/role-name: ratify-role # 上記で作成した RAM ロールの名前。
    
    ---

ステップ 5: 署名と署名検証が有効になったことの確認

ACK クラスターで指定されたイメージを使用するアプリケーションをデプロイして、イメージの署名と署名検証機能が機能していることを確認します。

  • 有効な署名を持つイメージをデプロイすると、ワークロードは宛先クラスターに正常にデプロイされます。

  • 署名されていないイメージを使用するワークロードをデプロイすると、Ratify はデプロイをブロックします。kubectl コマンドを実行してワークロードのステータスを確認し、ブロック情報を取得できます。また、Ratify Pod のログで詳細な署名検証ログを表示することもできます。

    kubectl get deploy ${unsigned_deploy_name} -n${namespace} -oyaml  # アプリケーション名とその名前空間を入力します。

    署名検証ログは次のとおりです。

    image

Ratify 設定の詳細

Ratify は、検証機能が処理するアーティファクトタイプを指定するためのさまざまな組み込みおよび外部の Verifier プラグインを提供します。さまざまな署名検証要件に基づいて KeyManagementProvider (KMP) インスタンスをカスタマイズし、さまざまなシナリオで Verifier の署名検証に使用されるキーまたは証明書を定義できます。Ratify はまた、OCI v1.1 仕様の subject フィールドで関連タイプのメタデータを発見および取得するための Store も提供します。以下のセクションでは、設定例を示します。

Notation Verifier 設定例

Verifier で nameartifactType フィールドを定義して、アーティファクトタイプを指定できます。Verifier はクラスターレベルで定義することも、NamespacedVerifier タイプを使用して名前空間レベルで定義することもできます。Verifier の詳細については、Ratify の公式ドキュメントをご参照ください。

デフォルト設定で Ratify コンポーネントをインストールすると、クラスター内に Notation Verifier インスタンスが自動的に作成されます。要件に応じて特定の trustPolicyDoc ポリシーを設定できます。次のコードは設定例です。

クリックして Notation Verifier 設定例を表示

apiVersion: config.ratify.deislabs.io/v1beta1
kind: Verifier
metadata:
  name: verifier-notation
spec:
  artifactTypes: application/vnd.cncf.notary.signature
  name: notation
  parameters:
    trustPolicyDoc:
      trustPolicies:
      - name: default
        registryScopes:
        - '*'
        signatureVerification:
          level: strict
        trustStores:
        - ca:certs
        trustedIdentities:
        - '*'
      version: "1.0"
    verificationCertStores:
      certs:
      - ratify-notation-inline-cert
  version: 1.0.0
status:
  issuccess: true

KMP 設定例

さまざまな署名検証要件に合わせて KeyManagementProvider インスタンスをカスタマイズし、CR で公開キーまたは X.509 証明書を定義できます。署名検証中、Notation や Cosign などの検証機能は、対応する KMP インスタンスリソースに関連付けられます。KMP は、クラスターレベルおよび名前空間レベルでの定義をサポートしています。KMP の詳細については、Ratify の公式ドキュメントをご参照ください。次のコードは設定例です。

クリックして KMP 設定例を表示

apiVersion: config.ratify.deislabs.io/v1beta1
kind: KeyManagementProvider
metadata:
  name: ratify-notation-inline-cert
spec:
  parameters:
    contentType: certificate
    value: |
      -----BEGIN CERTIFICATE-----
      XXXXXX
      XXXXXX
      XXXXXX
      -----END CERTIFICATE-----
  type: inline

ORAS Store 設定例

Ratify コンポーネントをインストールした後、デフォルトの ORAS Store インスタンスで authProvider パラメーターを設定して、プライベートな Alibaba Cloud ACR リポジトリに接続できます。次のコードは設定例です。

クリックして ORAS Store 設定例を表示

apiVersion: config.ratify.deislabs.io/v1beta1
kind: Store
metadata:
  name: store-oras
spec:
  name: oras
  parameters:
    authProvider:
      acrInstancesConfig:
      - instanceName: name1
        instanceId: cri-aaaaaaaaaaaa
      - instanceName: name2
        instanceId: cri-bbbbbbbbbbbb
      defaultInstanceId: cri-ccccccccc
      name: alibabacloudAcrBasic

パラメーター名

必須

説明

name

いいえ

Alibaba Cloud ACR の authProvider.name の値は alibabacloudAcrBasic に固定されています。

acrInstancesConfig

いいえ

複数の ACR リポジトリインスタンスとインスタンス ID の間のマッピングを設定できます。Ratify は、アプリケーションワークロードで指定されたイメージリポジトリ名に基づいて、対応するインスタンス ID を取得します。

defaultInstanceId

はい

デフォルトのリポジトリインスタンスの ID。

説明

acrInstancesConfig からインスタンス ID を取得できない場合、Ratify は defaultInstanceId フィールドで指定されたデフォルトのリポジトリインスタンス ID を使用します。その後、Ratify は、環境で設定された Alibaba Cloud 認証情報 に基づいて、ACR リポジトリインスタンスにログインするための一時的なユーザー名とパスワードを取得します。