Menu Close

4.15.6. Tekton Chains を使用したイメージへの署名および証明

クラスター管理者は Tekton Chains を使用して、以下のタスクを実行してイメージおよび証明機能に署名し、検証できます。

  • 暗号化された x509 キーペアを作成し、Kubernetes シークレットとして保存します。
  • イメージ、イメージ署名、および署名済みイメージの保存用に OCI レジストリーの認証を設定します。
  • Tekton Chains を設定して、証明内容を生成および署名します。
  • タスク実行の Kaniko でイメージを作成します。
  • 署名付きイメージと署名済みの証明機能を検証します。

前提条件

以下がクラスターにインストールされていることを確認します。

  • Red Hat OpenShift Pipelines Operator
  • Tekton Chains
  • Cosign
  • Rekor
  • jq

手順

  1. 暗号化された x509 キーペアを作成し、Kubernetes シークレットとして保存します。

    $ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets

    プロンプトが表示されたらパスワードを入力します。Cosign は、作成されたプライベートキーを signing-secrets Kubernetes シークレットの一部として openshift-pipelines namespace に保存し、公開鍵を cosign.pub ローカルファイルに保存します。

  2. イメージレジストリーの認証を設定します。

    1. Tekton Chains コントローラーを OCI レジストリーにプッシュするように設定するには、タスク実行のサービスアカウントに関連付けられた認証情報を使用します。詳細は、「OCI レジストリーへの認証」のセクションを参照してください。
    2. イメージをレジストリーにビルドおよびプッシュする Kaniko タスクの認証を設定するには、必要な認証情報が含まれる docker config.json ファイルの Kubernetes シークレットを作成します。

      $ oc create secret generic <docker_config_secret_name> \ 1
        --from-file <path_to_config.json> 2
      1
      docker 設定シークレット名に置き換えます。
      2
      docker config.json ファイルへのパスに置き換えます。
  3. Tekton Chains を設定するには、Chains -config オブジェクトに artifacts.taskrun.formatartifacts.taskrun.storage、および transparent. enabled パラメーターを設定します

    $ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.taskrun.format": "in-toto"}}'
    
    $ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"artifacts.taskrun.storage": "oci"}}'
    
    $ oc patch configmap chains-config -n openshift-pipelines -p='{"data":{"transparency.enabled": "true"}}'
  4. Kaniko タスクを開始します。

    1. Kaniko タスクをクラスターに適用します。

      $ oc apply -f examples/kaniko/kaniko.yaml 1
      1
      Kaniko タスクへの URI またはファイルパスに置き換えます。
    2. 適切な環境変数を設定します。

      $ export REGISTRY=<url_of_registry> 1
      
      $ export DOCKERCONFIG_SECRET_NAME=<name_of_the_secret_in_docker_config_json> 2
      1
      イメージをプッシュするレジストリーの URL に置き換えます。
      2
      docker config.json ファイルのシークレットの名前に置き換えてください。
    3. Kaniko タスクを開始します。

      $ tkn task start --param IMAGE=$REGISTRY/kaniko-chains --use-param-defaults --workspace name=source,emptyDir="" --workspace name=dockerconfig,secret=$DOCKERCONFIG_SECRET_NAME kaniko-chains

      すべての手順が完了するまで、このタスクのログを確認してください。認証に成功すると、最終的なイメージは $REGISTRY/kaniko-chains にプッシュされます。

  5. Tekton Chains が証明ランスを生成して署名できるように 1 分待ってから、タスク実行で chain .tekton.dev/signed=true アノテーションの可用性を確認します。

    $ oc get tr <task_run_name> \ 1
    -o json | jq -r .metadata.annotations
    
    {
      "chains.tekton.dev/signed": "true",
      ...
    }
    1
    タスク実行の名前に置き換えます。
  6. イメージとテストの検証

    $ cosign verify --key cosign.pub $REGISTRY/kaniko-chains
    
    $ cosign verify-attestation --key cosign.pub $REGISTRY/kaniko-chains
  7. イメージの証明については、Rekor で確認します。

    1. $REGISTRY/kaniko-chains イメージのダイジェストを取得します。タスク実行を検索するか、またはイメージをプルしてダイジェストを抽出することができます。
    2. Rekor を検索し、イメージの sha256 ダイジェストに一致するすべてのエントリーを検索します。

      $ rekor-cli search --sha <image_digest> 1
      
      <uuid_1> 2
      <uuid_2> 3
      ...
      1
      イメージの sha256 ダイジェストに置き換えます。
      2
      最初のマッチングユニバーサル一意識別子(UUID)です。
      3
      2 番目と合致する UUID。

      検索結果には、一致するエントリーの UUID が表示されます。これらの UUID の 1 つにテストが維持されます。

    3. attestation を確認します。

      $ rekor-cli get --uuid <uuid> --format json | jq -r .Attestation | base64 --decode | jq