12.3. クラスターイメージポリシー CR の作成


クラスター管理者は、ClusterImagePolicy カスタムリソース (CR) を使用してクラスター全体の sigstore 署名検証ポリシーを設定できます。Machine Config Operator (MCO) を有効にすると、ClusterImagePolicy オブジェクトを監視し、クラスター内のすべてのノード上の /etc/containers/policy.json および /etc/containers/registries.d/sigstore-registries.yaml ファイルを更新します。

次の例は、ClusterImagePolicy オブジェクトの設定方法に関する一般的なガイドラインを示しています。パラメーターの詳細は、「クラスターおよびイメージポリシーのパラメーターについて」を参照してください。

デフォルトの openshift クラスターイメージポリシーは、必要な OpenShift Container Platform イメージの sigstore サポートを提供します。このクラスターイメージポリシーは、テクノロジープレビュー機能が有効なクラスターでのみアクティブになります。このクラスターイメージポリシーオブジェクトは、削除または変更しないでください。openshift で始まるクラスターイメージポリシー名は、システムで将来使用するために予約されています。

重要

デフォルトの openshift クラスターイメージポリシーは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

前提条件

  • 署名操作のために、sigstore でサポートされている公開鍵基盤 (PKI) の鍵、Bring Your Own Public Key Infrastructure (BYOPKI) 証明書、または Cosign の公開鍵と秘密鍵のペア を用意する。
  • イメージに署名するための署名プロセスがある。
  • Cosign 署名を使用している場合は、Cosign 署名をサポートするレジストリーにアクセスできる。
  • OpenShift Container Platform リリースイメージリポジトリー (quay.io/openshift-release-dev/ocp-release および quay.io/openshift-release-dev/ocp-v4.0-art-dev) 用にレジストリーミラーが設定されている場合は、テクノロジープレビュー機能セットを有効にする前に、OpenShift Container Platform リリースイメージの sigstore 署名をミラーレジストリーにミラーリングする必要があります。これを行わないと、リリースリポジトリーの署名検証を強制するデフォルトの openshift クラスターイメージポリシーにより、Cluster Version Operator が CVO Pod を新しいノードに移動する機能がブロックされ、機能セットの変更に伴うノードの更新が妨げられます。

    oc image mirror コマンドを使用して署名をミラーリングできます。以下に例を示します。

    $ oc image mirror quay.io/openshift-release-dev/ocp-release:sha256-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef.sig \
    mirror.com/image/repo:sha256-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef.sig
    Copy to Clipboard Toggle word wrap
  • BYOPKI 証明書を信頼のルートとして使用している場合は、cluster という名前の FeatureGate CR を編集して、クラスターに必要なテクノロジープレビュー機能を有効にします。

    $ oc edit featuregate cluster
    Copy to Clipboard Toggle word wrap

    FeatureGate CR の例

    apiVersion: config.openshift.io/v1
    kind: FeatureGate
    metadata:
      name: cluster
    spec:
      featureSet: TechPreviewNoUpgrade 
    1
    Copy to Clipboard Toggle word wrap

    1
    必要な SigstoreImageVerificationPKI 機能を有効にします。
    警告

    クラスターで TechPreviewNoUpgrade 機能セットを有効にすると、元に戻すことができず、マイナーバージョンの更新が妨げられます。この機能セットを使用すると、該当するテクノロジープレビュー機能をテストクラスターで有効にして、完全にテストすることができます。実稼働クラスターではこの機能セットを有効にしないでください。

手順

  1. 次の例のようなクラスターイメージポリシーオブジェクトを作成します。これらのパラメーターの詳細は、「イメージポリシーパラメーターについて」を参照してください。

    公開鍵ポリシーと MatchRepoDigestOrExact 一致ポリシーを含むクラスターイメージポリシーオブジェクトの例

    apiVersion: config.openshift.io/v1
    kind: ClusterImagePolicy 
    1
    
    metadata:
      name: p1
    spec:
      scopes: 
    2
    
        - example.com
      policy: 
    3
    
        rootOfTrust: 
    4
    
          policyType: PublicKey 
    5
    
          publicKey:
            keyData: a2V5RGF0YQ== 
    6
    
            rekorKeyData: cmVrb3JLZXlEYXRh 
    7
    
        signedIdentity: 
    8
    
          matchPolicy: MatchRepoDigestOrExact
    Copy to Clipboard Toggle word wrap

    1
    ClusterImagePolicy オブジェクトを作成します。
    2
    このポリシーに割り当てられるリポジトリーまたはイメージのリストを定義します。クラスターイメージポリシーで、ポリシーが quay.io/openshift-release-dev/ocp-release および quay.io/openshift-release-dev/ocp-v4.0-art-dev リポジトリー内の OpenShift Container Platform イメージのデプロイメントをブロックしないことを確認します。これらのリポジトリー内のイメージは、クラスターの操作に必要です。
    3
    イメージの検証方法を定義するパラメーターを指定します。
    4
    ポリシーの Root of Trust を定義します。
    5
    信頼のルートを定義するポリシータイプ (公開鍵、BYOPKI 証明書、または Fulcio 証明書) を指定します。この例では、公開鍵と Rekor 検証を使用します。
    6
    公開鍵ポリシーの場合、base64 でエンコードされた公開鍵を PEM 形式で指定します。最大長は 8192 文字です。
    7
    オプション: base64 でエンコードされた Rekor 公開鍵を PEM 形式で指定します。最大長は 8192 文字です。
    8
    オプション: 署名と実際のイメージアイデンティティーのアイデンティティーを検証するためのプロセスとして、次のいずれかを指定します。
    • MatchRepoDigestOrExact
    • MatchRepository
    • ExactRepositoryexactRepository パラメーターを指定する必要があります。
    • RemapIdentityprefix および signedPrefix パラメーターを指定する必要があります。

    BYOPKI ポリシーおよび MatchRepository 一致ポリシーのクラスターイメージポリシーオブジェクトの例

    apiVersion: config.openshift.io/v1alpha1
    kind: ClusterImagePolicy 
    1
    
    metadata:
      name: pki-policy
    spec:
      scopes:
      - example.io 
    2
    
      policy: 
    3
    
        rootOfTrust: 
    4
    
          policyType: PKI 
    5
    
          pki: 
    6
    
            caRootsData: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk....URS0tLS0t
            caIntermediatesData: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1J....lDQVRFLS0tLS0=
            pkiCertificateSubject: 
    7
    
              email: email@example.com
              hostname: myhost.example.com
        signedIdentity:
          matchPolicy: MatchRepository 
    8
    Copy to Clipboard Toggle word wrap

    1
    ClusterImagePolicy オブジェクトを作成します。
    2
    このポリシーに割り当てられるリポジトリーまたはイメージのリストを定義します。クラスターイメージポリシーで、ポリシーが quay.io/openshift-release-dev/ocp-release および quay.io/openshift-release-dev/ocp-v4.0-art-dev リポジトリー内の OpenShift Container Platform イメージのデプロイメントをブロックしないことを確認します。これらのリポジトリー内のイメージは、クラスターの操作に必要です。
    3
    イメージの検証方法を定義するパラメーターを指定します。
    4
    ポリシーの Root of Trust を定義します。
    5
    信頼のルートを定義するポリシータイプ (公開鍵、BYOPKI 証明書、または Fulcio 証明書) を指定します。この例では、BYOPKI 証明書を使用します。
    6
    BYOPKI 証明書の場合は、caRootsData を指定します。このパラメーターは、base64 でエンコードされた PEM 形式の CA ルート証明書を指定します。最大長は 8192 文字です。必要に応じて、caIntermediatesData で、base64 でエンコードされた PEM 形式の中間 CA ルート証明書を指定します。最大長は 8192 文字です。
    7
    ホスト名とメールアドレスを使用してユーザーのアイデンティティーを認証するためのサブジェクト代替名 (SAN) を指定します。
    • email。証明書の生成時に指定したメールアドレスを指定します。
    • hostname。証明書の生成時に指定したホスト名を指定します。
    8
    BYOPKI 証明書の場合、署名内のアイデンティティーと実際のイメージアイデンティティーを検証するために、MatchRepository パラメーターを指定します。デフォルトの署名アイデンティティーは matchRepoDigestOrExact です。これは、検証のために署名アイデンティティーにダイジェスト参照を必要とします。この場合の署名アイデンティティーは、リポジトリー参照を使用しており、イメージのダイジェストを含んでいません。

    Fulcio 証明書ポリシーと remapIdentity 一致ポリシーを含むクラスターイメージポリシーオブジェクトの例

    apiVersion: config.openshift.io/v1
    kind: ClusterImagePolicy 
    1
    
    metadata:
      name: p1
    spec:
      scopes: 
    2
    
        - example.com
      policy: 
    3
    
        rootOfTrust: 
    4
    
          policyType: FulcioCAWithRekor 
    5
    
          fulcioCAWithRekor: 
    6
    
            fulcioCAData: a2V5RGF0YQ==
            fulcioSubject:
              oidcIssuer: "https://expected.OIDC.issuer/"
              signedEmail: "expected-signing-user@example.com"
            rekorKeyData: cmVrb3JLZXlEYXRh 
    7
    
        signedIdentity:
          matchPolicy: RemapIdentity 
    8
    
          remapIdentity:
            prefix: example.com 
    9
    
            signedPrefix: mirror-example.com 
    10
    Copy to Clipboard Toggle word wrap

    1
    ClusterImagePolicy オブジェクトを作成します。
    2
    このポリシーに割り当てられるリポジトリーまたはイメージのリストを定義します。クラスターイメージポリシーで、ポリシーが quay.io/openshift-release-dev/ocp-release および quay.io/openshift-release-dev/ocp-v4.0-art-dev リポジトリー内の OpenShift Container Platform イメージのデプロイメントをブロックしないことを確認します。これらのリポジトリー内のイメージは、クラスターの操作に必要です。
    3
    イメージの検証方法を定義するパラメーターを指定します。
    4
    ポリシーの Root of Trust を定義します。
    5
    信頼のルートを定義するポリシータイプ (公開鍵、BYOPKI 証明書、または Fulcio 証明書) を指定します。この例では、Fulcio 証明書を使用し、Rekor 検証を必須としています。
    6
    Fulcio 証明書ポリシーの場合、次のパラメーターが必要です。
    • fulcioCAData: base64 でエンコードされた Fulcio 証明書を PEM 形式で指定します。最大長は 8192 文字です。
    • fulcioSubject: OIDC 発行者と Fulcio 認証設定のメールを指定します。
    7
    base64 でエンコードされた Rekor 公開鍵を PEM 形式で指定します。このパラメーターは、policyTypeFulcioCAWithRekor の場合に必要です。最大長は 8192 文字です。
    8
    オプション: 署名と実際のイメージアイデンティティーのアイデンティティーを検証するためのプロセスとして、次のいずれかを指定します。
    • MatchRepoDigestOrExact
    • MatchRepository
    • ExactRepositoryexactRepository パラメーターを指定する必要があります。
    • RemapIdentityprefix および signedPrefix パラメーターを指定する必要があります。
    9
    remapIdentity 一致ポリシーの場合、スコープ指定されたイメージ接頭辞と一致する必要がある接頭辞を指定します。その 2 つが一致する場合、スコープ指定されたイメージ接頭辞は signedPrefix の値に置き換えられます。最大長は 512 文字です。
    10
    remapIdentity 一致ポリシーの場合、必要に応じて再度マッピングするイメージ接頭辞を指定します。最大長は 512 文字です。
  2. クラスターイメージポリシーオブジェクトを作成します。

    $ oc create -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap

    Machine Config Operator (MCO) により、クラスター内のマシン設定プール (MCP) が更新されます。変更の適用中であるため、各ノードでのスケジューリングが無効になります。

検証

  • クラスター内のノードが更新されたら、クラスターイメージポリシーが設定されていることを確認できます。

    1. 次のコマンドを実行して、ノードのデバッグ Pod を起動します。

      $ oc debug node/<node_name>
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、デバッグシェル内のルートディレクトリーとして /host を設定します。

      sh-5.1# chroot /host/
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して、policy.json ファイルを調べます。

      sh-5.1# cat /etc/containers/policy.json
      Copy to Clipboard Toggle word wrap

      新しいクラスターイメージポリシーを示す公開鍵を含むクラスターイメージポリシーオブジェクトの出力例

      # ...
        "transports": {
      # ...
          "docker": {
            "example.com": [
              {
                "type": "sigstoreSigned",
                "keyData": "a2V5RGF0YQ==",
                "rekorPublicKeyData": "cmVrb3JLZXlEYXRh",
                "signedIdentity": {
                  "type": "matchRepoDigestOrExact"
                }
              }
            ],
      # ...
      Copy to Clipboard Toggle word wrap

      新しいクラスターイメージポリシーを示す BYOPKI 証明書のクラスターイメージポリシーオブジェクトの出力例

      # ...
        "transports": {
      # ...
          "docker": {
            "example.io": [
              {
                "type": "sigstoreSigned",
                "pki": {
                  "caRootsData": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk....URS0tLS0t",
                  "caIntermediatesData": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1J....lDQVRFLS0tLS0=",
                  "subjectEmail": "email@example.com",
                  "subjectHostname": "myhost.example.com"
                },
                "signedIdentity": {
                  "type": "matchRepository"
                }
              }
            ],
      Copy to Clipboard Toggle word wrap

      新しいクラスターイメージポリシーを示す Fulcio 証明書を含むクラスターイメージポリシーオブジェクトの出力例

      # ...
        "transports": {
      # ...
          "docker": {
            "example.com": [
              {
                "type": "sigstoreSigned",
                "fulcio": {
                  "caData": "a2V5RGF0YQ==",
                  "oidcIssuer": "https://expected.OIDC.issuer/",
                  "subjectEmail": "expected-signing-user@example.com"
                },
                "rekorPublicKeyData": "cmVrb3JLZXlEYXRh",
                "signedIdentity": {
                  "type": "remapIdentity",
                  "prefix": "example.com",
                  "signedPrefix": "mirror-example.com"
                }
              }
            ],
      # ...
      Copy to Clipboard Toggle word wrap

    4. 次のコマンドを実行して、sigstore-registries.yaml ファイルを調べます。

      sh-5.1# cat /etc/containers/registries.d/sigstore-registries.yaml
      Copy to Clipboard Toggle word wrap

      スコープ指定されたレジストリーが追加されたことを示す出力例

      docker:
        example.com:
          use-sigstore-attachments: true 
      1
      
        quay.io/openshift-release-dev/ocp-release:
          use-sigstore-attachments: true
      Copy to Clipboard Toggle word wrap

      1
      true の場合、sigstore 署名をイメージと併せて読み取ることを指定しています。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat