Conforma によるコンプライアンス管理


Red Hat Advanced Developer Suite - software supply chain 1.7

Conforma を使用すると、宣伝するコードのコンプライアンスをより適切に検証および管理できる方法を説明します。また、会社の基準に合わせてサンプルポリシーをカスタマイズする。

Red Hat Customer Content Services

概要

このドキュメントでは、コンテナーイメージの構築とテストに関するポリシーを定義および適用することで、ソフトウェアサプライチェーンのセキュリティーを管理および維持する方法を説明します。

はじめに

Conforma は、コンテナーイメージのビルドとテストに関するポリシーを定義および適用し、ソフトウェアサプライチェーンのセキュリティーを維持するためのポリシー駆動型ワークフローツールです。セキュアな CI/CD ワークフローを実現するには、問題を早期に検出するためのアーティファクト検証を組み込む必要があります。Conforma の役割は、コンテナーイメージが既知の信頼できるビルドシステムによって署名およびアテストされていることを検証することです。

第1章 RHADS 向けの Conforma - SSC

ソフトウェアのサプライチェーンがより複雑になると、信頼できるチェックおよびベストプラクティスを使用して、イメージコンテナーおよびソースコードの依存関係性を確保することができます。ここで、Conforma streamline が Red Hat Advanced Developer Suite - ソフトウェアサプライチェーン(RHADS - SSC)ビルドおよびデプロイを行います。

Conforma は、コンテナーイメージのビルドとテストに関するポリシーを定義および適用し、ソフトウェアサプライチェーンのセキュリティーを維持するためのポリシー駆動型ワークフローツールです。Supply-chain Levels for Software Artifacts (SLSA) の来歴アテステーションを作成するビルドシステム (Tekton Chains を使用した Tekton や SLSA GitHub Generator を使用した GitHub Actions など) では、署名をチェックし、アテステーションの内容が実際に期待どおりに一致することを確認することは、ソフトウェアサプライチェーンのインテグリティーを検証および維持する上で非常に重要です。セキュアな CI/CD ワークフローを実現するには、問題を早期に検出するためのアーティファクト検証を組み込む必要があります。complianta は、既知の信頼できるビルドシステムがコンテナーイメージを署名し、テストしていることを検証します。

署名およびアテストされたコンテナーイメージを検証するための一般的な手順は次のとおりです。

  1. RHADS - SSC を使用してコンテナーイメージを作成またはコピーします。
  2. Cosign を使用して署名鍵を生成します。
  3. Cosign を使用してコンテナーイメージに署名します。
  4. Cosign を使用してイメージをアテストします。
  5. Conforma CLI を使用して、署名および証明されたコンテナーイメージを検証します。

コンテナーイメージなどの署名済みのソフトウェアアーティファクトは、未署名のアーティファクトよりも、いくつかの攻撃ベクトルのリスクが大幅に低くなります。コンテナーイメージが署名されると、さまざまな暗号化技術によってイメージが特定のエンティティーまたは組織にバインドされます。その結果、イメージの信頼性を検証して作成者に再度追跡し、署名後にイメージが変更または改ざんされていないことを検証することもできます。

complianta は業界標準の Sigstore および Cosign をリソースライブラリーとして使用し、コンテナーイメージを検証します。Red Hat Trusted Artifact Signer (Red Hat が Sigstore フレームワークのサポート対象バージョン)では、Sigstore のサービスの独自のオンプレミスインスタンスを使用して、Cosign CLI を使用してコンテナーイメージに署名し、テストすることができます。

ソフトウェアアーティファクトの アテステーションと同様に、証明書 がないと発生できません。来歴 とは、コンテナーイメージなどのソフトウェアアーティファクトに関する検証可能な情報であり、そのアーティファクトがどこで、いつ、どのように作成されたかを説明したものです。アテステーション自体は、メタデータ形式の認証済みステートメントであり、アーティファクトが元のままであり信頼できることを証明するものです。complianta は、テストを使用して、ビルドが改ざんされていないことを暗号で検証し、SLSA 要件などのポリシーセットに対してビルドをチェックします。

ユーザーが RHADS - SSC の開発 namespace からステージ namespace に、またはステージ namespace から実稼働 namespace にコードをプッシュすると、Conforma は検証チェックを自動的に実行し、コンテナーイメージが既知の信頼できるビルドシステムによって署名およびアテストされていることを確認します。イメージが Conforma チェックに合格すると、コードの変更をマージして、ある環境から次の環境へのプロモートを完了できます。

第2章 Conforma コマンドラインのインストール

前提条件

  • Red Hat OpenShift Container Platform (OCP)バージョン 4.13 以降への、稼働中の Red Hat Trusted Artifact Signer インストール。
  • cosign および oc バイナリーファイルがインストールされたワークステーション。
  • OCP Web コンソールへのアクセス。

手順

  1. OCP クラスターから ec バイナリーファイルをダウンロードします。

    1. OCP Web コンソールにログインします。ホームページから ? アイコンをクリックし、Command line tools を選択して、ec ダウンロードセクションに移動してから、お使いのプラットフォームへのリンクをクリックします。
    2. ワークステーションでターミナルを開き、次のコマンドを実行してバイナリー .gz ファイルを解凍します。

      $ gunzip ec-amd64.gz
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して、バイナリーを実行可能にします。

      $ chmod +x ec-amd64
      Copy to Clipboard Toggle word wrap
  2. バイナリーを $PATH 環境内の場所に移動し、名前を変更します。

    $ sudo mv ec-amd64 /usr/local/bin/ec
    Copy to Clipboard Toggle word wrap

検証

  • ec version コマンドを実行します。実行すると、インストールした Conforma CLI のバージョンが表示されるはずです。

第3章 ポリシーの作成

Conforma ポリシー は、ルールまたは一連のルールおよびコンフォーム固有のアノテーションです。complianta は、Red Hat 製品に必要なすべてのポリシールールを確認するなど、いくつかのタイプのポリシーチェックを実行できます。complianta は、Open Policy Agent (OPA)と呼ばれる汎用ポリシーエンジンを使用します。OPA は、Rego を使用してポリシールールを定義します。これは、Conforma ポリシーにある OPA のポリシールールも Rego で定義されていることを意味します。

手順

  1. 次の例のように、新しいポリシールールを定義する Rego ファイルを作成します。

    echo 'package zero_to_hero
    
    import future.keywords.contains
    import future.keywords.if
    import future.keywords.in
    
    
    # METADATA
    # title: Builder ID
    # description: Verify the SLSA Provenance has the builder.id set to
    #   the expected value.
    # custom:
    #   short_name: builder_id
    #   failure_msg: The builder ID %q is not the expected %q
    #   solution: >-
    #     Ensure the correct build system was used to build the container
    #     image.
    deny contains result if {
    	some attestation in input.attestations
    	attestation.statement.predicateType == "https://slsa.dev/provenance/v0.2"
    
    	expected := "https://localhost/dummy-id"
    	got := attestation.statement.predicate.builder.id
    
    	expected != got
    
    	result := {
    		"code": "zero_to_hero.builder_id",
    		"msg": sprintf("The builder ID %q is not expected, %q", [got, expected])
    	}
    }
    ' > rules.rego
    Copy to Clipboard Toggle word wrap
    METADATA
    コードの最初の 10 行は METADATA コメントブロックで設定されます。これは、Conforma がルールアノテーションを指定して、成功および違反のレポートにこれらのアノテーションの詳細を含めることができるようにする方法です。
    short_name
    この 1 つのポリシールールは、新しいポリシールールの builder.id が、Supply-chain Levels for Software Artifacts (SLSA)の出所と一致することを検証します。
    input.attestations

    input は、コンテナーイメージ、その署名、およびそのアテステーションに関するすべての情報が含まれる Rego オブジェクトです。input オブジェクトの input.attestations 属性には、イメージに関連付けられたアテステーションのリストが含まれます。

    ヒント

    input オブジェクトを JSON ファイルに保存して使用可能な値を表示できます。これは、新しいポリシールールを記述する際に役立ちます。input オブジェクトを input.json という名前の JSON ファイルとして保存するには、次の例のようなコマンドを実行します。

    $ ec validate image --public-key cosign.pub \
      --image "$REPOSITORY:latest" \
      --policy policy.yaml \
      --output policy-input=input.json
    Copy to Clipboard Toggle word wrap
  2. 新しいポリシールールを使用するためのポリシー設定を作成します。

    echo "
    ---
    sources:
      - policy:
          - $(pwd)/rules.rego
    " > policy.yaml
    Copy to Clipboard Toggle word wrap
  3. 以下の例のように、新しいポリシーを使用してコンテナーイメージを検証し、成功および違反レポートの追加情報を表示します。

    $ ec validate image --public-key cosign.pub \
      --image "$REPOSITORY:latest" \
      --policy policy.yaml \
      --show-successes --info --output yaml
    Copy to Clipboard Toggle word wrap

検証

  • 成功と違反のレポートをチェックして、新しいルールが successes リストに含まれていることを確認します。

3.1. ポリシーの設定

インライン JSON または YAML 文字列を使用して Conforma ポリシーを設定できます。このポリシーは、config または contract とも呼ばれ、実行するポリシーを適用するために使用するルールとデータを Conforma で検索する場所を指定します。1 つのルールや特定のルールパッケージを追加または除外することもできます。

手順

  1. 次の例のように、コマンドラインでポリシーを JSON または YAML 文字列として設定します。

    $ ec validate image --policy '{
        "sources": [
            {
                "policy": ["oci::quay.io/enterprise-contract/ec-release-policy:latest"],
                "data": ["git::https://github.com/enterprise-contract/ec-policies//example/data"],
                "config": {"include": ["@minimal"]}
            }
        ]
    }' ...
    Copy to Clipboard Toggle word wrap
  2. (オプション) 次の例のように、Conforma ポリシーから特定のルールパッケージを除外します。

    {
      "sources": [
        {
          "policy": [
            "oci::quay.io/enterprise-contract/ec-release-policy:latest"
          ],
          "data": [
            "git::https://github.com/enterprise-contract/ec-policies//example/data"
          ],
          "config": {
            "exclude": [
              "attestation_task_bundle",
              "slsa_build_scripted_build"
            ]
          }
        }
      ]
    }
    Copy to Clipboard Toggle word wrap

    このコマンドにより、指定したパッケージ内のルールを除く全パッケージの全ルールが追加されます。

  3. (オプション) 次の例のように、1 つのルールを除外します。

    {
      "sources": [
        {
          "policy": [
            "oci::quay.io/enterprise-contract/ec-release-policy:latest"
          ],
          "data": [
            "git::https://github.com/enterprise-contract/ec-policies//example/data"
          ],
          "config": {
            "exclude": [
              "attestation_task_bundle.unacceptable_task_bundle"
            ]
          }
        }
      ]
    }
    Copy to Clipboard Toggle word wrap

    このコマンドにより、unacceptable_task_bundle ルールを除く attestation_task_bundle パッケージのすべてのルールが追加されます。

  4. (オプション) 次の例のように、特定のパッケージのルールのみを追加します。

    {
      "sources": [
        {
          "policy": [
            "oci::quay.io/enterprise-contract/ec-release-policy:latest"
          ],
          "data": [
            "git::https://github.com/enterprise-contract/ec-policies//example/data"
          ],
          "config": {
            "include": [
              "test",
              "java"
            ]
          }
        }
      ]
    }
    Copy to Clipboard Toggle word wrap

    このコマンドにより、指定したパッケージのルールのみが追加されます。

  5. (オプション) 特定パッケージの一部のルールのみを追加します。つまり、次の例のように、includeexclude の両方を指定して、Conforma ポリシーに含めるルールのみを選択できます。

    {
      "sources": [
        {
          "policy": [
            "oci::quay.io/enterprise-contract/ec-release-policy:latest"
          ],
          "data": [
            "git::https://github.com/enterprise-contract/ec-policies//example/data"
          ],
          "config": {
            "include": [
              ""*"",
              "attestation_task_bundle.unacceptable_task_bundle"
            ],
            "exclude": [
              "attestation_task_bundle.*"
            ]
          }
        }
      ]
    }
    Copy to Clipboard Toggle word wrap
    アスタリスク(*)

    アスタリスク (*) はワイルドカードとして機能し、すべてのパッケージにマッチします。部分的な名前とは一致しません。たとえば、s*" が、s で始まるすべてのパッケージに一致させるように指定することはできません。

    これらのコマンドにより、attestation_task_bundle パッケージの unacceptable_task_bundle ルール のみ を追加し、そのパッケージ内の他のルールをすべて除外することが指定されます。

  6. (オプション) 次の例のように、特定のチェックを除外して、そのチェックが失敗した場合や完了しなかった場合でも、Conforma がコンテナーイメージを検証できるようにします。

    {
      "sources": [
        {
          "policy": [
            "oci::quay.io/enterprise-contract/ec-release-policy:latest"
          ],
          "data": [
            "git::https://github.com/enterprise-contract/ec-policies//example/data"
          ],
          "config": {
            "exclude": [
              "test:get-clair-scan",
              "test:clamav-scan"
            ]
          }
        }
      ]
    }
    Copy to Clipboard Toggle word wrap

    このコマンドは、特定されたチェックのいずれかが失敗した場合、または完了しない場合でも、Conforma がコンテナーイメージの妥当性を検証できることを指定します。

  7. (オプション) config.policy.include コマンドまたは config.policy.exclude コマンドのいずれかを文字列のリストとともに実行して、パッケージ内のルールのデフォルト設定を変更します。

    文字列のリストには、次のいずれかを含める必要があります。

    パッケージ名
    Available rule collections リストのパッケージから選択します。
    ルール名
    attestation_type.unknown_att_type のように、ドット(.)で区切られたパッケージとルールコードを入力し、ルール名を指定します。ルールコードは、アップストリームの Conforma ドキュメントの Attestation type の下に見つけることができます。
    パッケージ名:term
    ポリシールールによっては、アイテムのリストを処理します。"パッケージ名" 文字列に "項目" を付加すると、そのリストから特定の項目を除外または追加できます。これは "パッケージ名" と同様に機能しますが、その項目にマッチするパッケージ内のポリシールールにのみ適用される点が異なります。たとえば、テストパッケージを実行する場合は、特定のテストケースを無視して、他のすべてのテストケースを追加することができます。
    rule name:term
    これは、パッケージに 項目 を追加または除外するのではなく、特定のパッケージ ポリシールール を含めるか除外できる点を除き、package name:term と似ています。
    @collection name
    これを文字列に追加して、事前定義されたルールのコレクションを指定します。コレクション名の前に @ 記号を付けます。利用可能なルールコレクションから選択します。

第4章 コンテナーイメージへの署名

前提条件

  • OpenShift Container Platform (OCP) Web コンソールにアクセスできる。
  • バージョン 4.13 以降の OpenShift 上で実行中の動作している Red Hat Trusted Artifact Signer (RHTAS) インストール。
  • eccosignoc バイナリーファイルがインストールされたワークステーション。

手順

  1. 以下のコマンドを実行して OCP クラスターにログインします。

    $ oc login --token=<TOKEN> --server=<SERVER_URL_AND_PORT>
    Copy to Clipboard Toggle word wrap

    以下に例を示します。

    $ oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC \
      --server=https://example.com:6443
    Copy to Clipboard Toggle word wrap
    注記

    コマンドラインログイントークンと URL を見つけるには、OpenShift Web コンソール にログインします。ユーザー名をクリックし、Copy login command をクリックします。プロンプトが表示されたら、ユーザー名とパスワードを再度入力し、Display Token をクリックします。

  1. RHTAS にログインします。
  2. 以下のコマンドを実行して、コンテナーイメージを署名および検証するように RHTAS シェル環境を設定します。

    $ cd sigstore-ocp
    Copy to Clipboard Toggle word wrap
    $ source tas-env-variables.sh
    Copy to Clipboard Toggle word wrap

    環境変数を手動で設定するオプションもあります。以下に例を示します。

    export OPENSHIFT_APPS_SUBDOMAIN=apps.$(oc get dns cluster -o jsonpath='{ .spec.baseDomain }')
    export OIDC_AUTHENTICATION_REALM=sigstore
    export FULCIO_URL=https://fulcio.$OPENSHIFT_APPS_SUBDOMAIN
    export OIDC_ISSUER_URL=https://keycloak-keycloak-system.$OPENSHIFT_APPS_SUBDOMAIN/auth/realms/$OIDC_AUTHENTICATION_REALM
    export REKOR_URL=https://rekor.$OPENSHIFT_APPS_SUBDOMAIN
    export TUF_URL=https://tuf.$OPENSHIFT_APPS_SUBDOMAIN
    Copy to Clipboard Toggle word wrap
    $ source ./tas-env-vars.sh
    Copy to Clipboard Toggle word wrap
  3. 以下のコマンドを実行して OCP クラスターからログアウトします。

    $ oc logout
    Copy to Clipboard Toggle word wrap
  4. 署名するコンテナーイメージと attest を特定します。以下に例を示します。

    IMAGE=quay.io/lucarval/rhtas-test@sha256:6b95efc134c2af3d45472c0a2f88e6085433df058cc210abb2bb061ac4d74359
    Copy to Clipboard Toggle word wrap
  5. 以下のコマンドを実行して、パブリック Sigstore デプロイメントではなく、Red Hat Trusted Artifact Signer を使用してコンテナーイメージに署名し、テストすることを RHADS - SSC に指定します。

    $ cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
    Copy to Clipboard Toggle word wrap
  6. 次のコマンドを実行して、コンテナーイメージに署名します。

    $ cosign sign -y --fulcio-url=$FULCIO_URL \
      --rekor-url=$REKOR_URL \
      --oidc-issuer=$OIDC_ISSUER_URL $IMAGE
    Copy to Clipboard Toggle word wrap
  7. プロンプトが表示されたら、RHADS - SSC のインストール時に RHADS - SSC がインストールした Keycloak インスタンスにログインします。これは、Keycloak がユーザーを認証できるようにするためです。

次のステップ

これでイメージが署名されました。これで、以下が可能になります。

  1. SLSA の来歴アテステーションを作成し、コンテナーイメージに関連付けます。
  2. Conforma を使用してコンテナーイメージを検証します。

4.1. コンテナーイメージに署名してアテストするための署名鍵の生成

コンテナーイメージに署名してアテストするには、署名鍵が必要です。

前提条件

  • cosign バイナリーファイルがインストールされたワークステーション。

手順

  1. 次のコマンドを実行して、キーペアを生成します。

    $ cosign generate-key-pair
    Copy to Clipboard Toggle word wrap
  2. プロンプトが表示されたら、キーペアの新しいパスワードを入力します。パスワードは覚えやすく強力なものにしてください。

検証

  • これで、作業ディレクトリーに cosign.pubcosign.key という 2 つの新しいファイルが作成されます。

    • cosign.pub ファイルには、公開署名鍵が含まれています。この鍵は、コンテナーイメージの検証が必要なコラボレーターと共有できます。
    • cosign.key ファイルは、コンテンツに署名するための秘密鍵です。イメージの署名およびアテステーションの責任者だけが cosign.key ファイルにアクセスできるようにしてください。

4.2. Conforma および Red Hat Trusted Artifact Signer を使用したコンテナーイメージの署名の検証

Red Hat Trusted Artifact Signer (RHTAS)サービスをインストールする場合、ec バイナリーファイルを使用して、RHTAS サービスのキーレス署名フレームワークを使用するコンテナーイメージの認証と署名を検証できます。

前提条件

  • OpenShift Container Platform (OCP)バージョン 4.13 以降で実行している RHTAS インストールが稼働している。
  • OCP Web コンソールへのアクセス。
  • cosign および oc バイナリーファイルがインストールされたワークステーション。

手順

  1. OCP クラスターから ec バイナリー ファイルをダウンロードします。

    1. OpenShift Container Platform Web コンソールにログインします。ホームページから、右上の ? アイコンをクリックし、Command Line Tools を選択します。
    2. ec download セクションから、プラットフォームのリンクをクリックします。
    3. 端末を開きます。
    4. 次のコマンドを実行して、.gz ファイルを解凍します。

      $ gunzip ec-amd64.gz
      Copy to Clipboard Toggle word wrap
    5. 次のコマンドを実行して、ec バイナリーファイルを実行可能にします。

      $ chmod +x ec-amd64
      Copy to Clipboard Toggle word wrap
    6. ec バイナリーファイルを $PATH 環境のディレクトリーに移動します。以下に例を示します。

      $ sudo mv ec-amd64 /usr/local/bin/ec
      Copy to Clipboard Toggle word wrap
      ヒント

      他のイメージ検証コマンドオプションをすべて確認するには、ec validate image --help コマンドを実行します。

  2. コンテナーイメージの署名および検証用にシェル環境を設定します。

    1. 次のコマンドを実行して、sigstore-ocp ディレクトリーに移動します。

      $ cd sigstore-ocp
      Copy to Clipboard Toggle word wrap
    2. tas-env-variables.sh スクリプトを実行してシェルを設定します。

      $ source tas-env-variables.sh
      Copy to Clipboard Toggle word wrap
    3. (オプション) 環境変数を手動で設定します。

      export OPENSHIFT_APPS_SUBDOMAIN=apps.$(oc get dns cluster -o jsonpath='{ .spec.baseDomain }')
      export OIDC_AUTHENTICATION_REALM=sigstore
      export FULCIO_URL=https://fulcio.$OPENSHIFT_APPS_SUBDOMAIN
      export OIDC_ISSUER_URL=https://keycloak-keycloak-system.$OPENSHIFT_APPS_SUBDOMAIN/auth/realms/$OIDC_AUTHENTICATION_REALM
      export REKOR_URL=https://rekor.$OPENSHIFT_APPS_SUBDOMAIN
      export TUF_URL=https://tuf.$OPENSHIFT_APPS_SUBDOMAIN
      Copy to Clipboard Toggle word wrap
      $ source ./tas-env-vars.sh
      Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して、更新フレームワーク(TUF)システムを初期化します。

    $ cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して、コンテナーイメージに署名します。

    $ cosign sign -y --fulcio-url=$FULCIO_URL --rekor-url=$REKOR_URL --oidc-issuer=$OIDC_ISSUER_URL IMAGE_NAME
    Copy to Clipboard Toggle word wrap

    以下に例を示します。

    $ cosign sign -y --fulcio-url=$FULCIO_URL \
      --rekor-url=$REKOR_URL \
      --oidc-issuer=$OIDC_ISSUER_URL example-hello-world@sha256:2788a47fd0ef1ece30898c1e608050ea71036d3329b9772dbb3d1f69313f745c
    Copy to Clipboard Toggle word wrap

    表示される Web ブラウザーで、メールアドレスを使用してコンテナーイメージに署名します。

  5. predicate.json ファイルを作成します。

    {
      "builder": {
        "id": "https://localhost/dummy-id"
      },
      "buildType": "https://example.com/tekton-pipeline",
      "invocation": {},
      "buildConfig": {},
      "metadata": {
        "completeness": {
          "parameters": false,
          "environment": false,
          "materials": false
        },
        "reproducible": false
      },
      "materials": []
    }
    Copy to Clipboard Toggle word wrap
  6. 以下のコマンドを実行して predicate.json ファイルをコンテナーイメージに関連付けます。

    $ cosign attest -y --predicate ./predicate.json \
      --type slsaprovenance IMAGE_NAME:TAG
    Copy to Clipboard Toggle word wrap

    以下に例を示します。

    $ cosign attest -y --predicate ./predicate.json \
      --type slsaprovenance example.io/hello-world:latest
    Copy to Clipboard Toggle word wrap
  7. 次のコマンドを実行して、コンテナーイメージに少なくとも 1 つの証明書と署名があることを確認します。

    $ cosign tree IMAGE_NAME:TAG
    Copy to Clipboard Toggle word wrap

    以下に例を示します。

    $ cosign tree example.io/hello-world:latest
    📦 Supply Chain Security Related artifacts for an image: example.io/hello-world@sha256:7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35
    └── 💾 Attestations for an image tag: example.io/hello-world:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.att
       └── 🍒 sha256:40d94d96a6d3ab3d94b429881e1b470ae9a3cac55a3ec874051bdecd9da06c2e
    └── 🔐 Signatures for an image tag: example.io/hello-world:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.sig
       └── 🍒 sha256:f32171250715d4538aec33adc40fac2343f5092631d4fc2457e2116a489387b7
    Copy to Clipboard Toggle word wrap
  8. 次のコマンドを実行して、Conforma を使用してコンテナーイメージを確認します。

    $ ec validate image --image IMAGE_NAME:TAG \
      --certificate-identity-regexp 'SIGNER_EMAIL_ADDR' \
      --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' \
      --output yaml --show-successes
    Copy to Clipboard Toggle word wrap

    以下に例を示します。

    $ ec validate image --image example.io/hello-world:latest \
      --certificate-identity 'jdoe@example.com' \
      --certificate-oidc-issuer 'keycloak-keycloak-system' \
      --output yaml --show-successes
    Copy to Clipboard Toggle word wrap

    出力を使用してコンテナーイメージを確認します。

    success: true
    successes:
      - metadata:
          code: builtin.attestation.signature_check
        msg: Pass
      - metadata:
          code: builtin.attestation.syntax_check
        msg: Pass
      - metadata:
          code: builtin.image.signature_check
        msg: Pass
    ec-version: v0.1.2427-499ef12
    effective-time: "2024-01-21T19:57:51.338191Z"
    key: ""
    policy: {}
    success: true
    Copy to Clipboard Toggle word wrap

    Matcha は、セキュリティー違反の詳細を含む合格または失敗のレポートを生成します。--info フラグを追加すると、違反に関する詳細と考えられる解決策がレポートに追加されます。

第5章 コンテナーイメージのアテストと検証

Conforma が署名済みコンテナーイメージを検証する前に、まず ソフトウェアアーティファクト(SLSA)の出所の Supply-chain Levels を作成し、これをコンテナーイメージに関連付ける必要があります。来歴とは、サプライチェーン内の特定のソフトウェア "リンク" がどこで、いつ、どのように作成されたかなど、ソフトウェアアーティファクトに関する検証可能な情報です。

前提条件

  • 署名済みのコンテナーイメージ。
  • OpenShift Container Platform Web コンソールにアクセスできる。
  • バージョン 4.13 以降の OpenShift 上で実行中の動作している Red Hat Trusted Artifact Signer インストール。
  • cosign および oc バイナリーファイルがインストールされたワークステーション。

手順

  1. SLSA の出所 predicate.json ファイルを作成します。以下に例を示します。

    echo '{
     "builder": {
       "id": "https://localhost/dummy-id"
     },
     "buildType": "https://localhost/dummy-type",
     "invocation": {},
     "buildConfig": {},
     "metadata": {
       "buildStartedOn": "2023-09-25T16:26:44Z",
       "buildFinishedOn": "2023-09-25T16:28:59Z",
       "completeness": {
         "parameters": false,
         "environment": false,
         "materials": false
       },
       "reproducible": false
     },
     "materials": []
    }
    ' > predicate.json
    Copy to Clipboard Toggle word wrap
  2. 以下のコマンドを実行して、作成した predicate.json ファイルに署名してテストします。

    $ cosign attest -y --fulcio-url=$FULCIO_URL \
       --rekor-url=$REKOR_URL \
       --oidc-issuer=$OIDC_ISSUER_URL \
       --predicate predicate.json \
       --type slsaprovenance $IMAGE
    Copy to Clipboard Toggle word wrap

    Keycloak が開き、コンテナーイメージに署名したときにログインに基づいてユーザーを自動的に認証します。

  3. 次のコマンドを実行して、署名と Conforma による署名と認証を確認します。

    $ ec validate image --image $IMAGE \
       --certificate-identity-regexp '.*' \
       --certificate-oidc-issuer-regexp '.*' \
       --output yaml --show-successes
    Copy to Clipboard Toggle word wrap
    重要

    ec validate image コマンドを実行するときは、各署名が期待される identity と一致するように、できるだけ詳細に指定してください。

検証

  • Conforma がコンテナーイメージを検証すると、すべての Conforma 検証と署名の詳細なレポートが開きます。

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る