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
$ oc image mirror quay.io/openshift-release-dev/ocp-release:sha256-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef.sig \ mirror.com/image/repo:sha256-1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef.sig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow BYOPKI 証明書を信頼のルートとして使用している場合は、
cluster
という名前のFeatureGate
CR を編集して、クラスターに必要なテクノロジープレビュー機能を有効にします。oc edit featuregate cluster
$ oc edit featuregate cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow FeatureGate
CR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 必要な
SigstoreImageVerificationPKI
機能を有効にします。
警告クラスターで
TechPreviewNoUpgrade
機能セットを有効にすると、元に戻すことができず、マイナーバージョンの更新が妨げられます。この機能セットを使用すると、該当するテクノロジープレビュー機能をテストクラスターで有効にして、完全にテストすることができます。実稼働クラスターではこの機能セットを有効にしないでください。
手順
次の例のようなクラスターイメージポリシーオブジェクトを作成します。これらのパラメーターの詳細は、「イメージポリシーパラメーターについて」を参照してください。
公開鍵ポリシーと
MatchRepoDigestOrExact
一致ポリシーを含むクラスターイメージポリシーオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
。 -
ExactRepository
。exactRepository
パラメーターを指定する必要があります。 -
RemapIdentity
。prefix
およびsignedPrefix
パラメーターを指定する必要があります。
-
BYOPKI ポリシーおよび
MatchRepository
一致ポリシーのクラスターイメージポリシーオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
一致ポリシーを含むクラスターイメージポリシーオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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 形式で指定します。このパラメーターは、
policyType
がFulcioCAWithRekor
の場合に必要です。最大長は 8192 文字です。 - 8
- オプション: 署名と実際のイメージアイデンティティーのアイデンティティーを検証するためのプロセスとして、次のいずれかを指定します。
-
MatchRepoDigestOrExact
。 -
MatchRepository
。 -
ExactRepository
。exactRepository
パラメーターを指定する必要があります。 -
RemapIdentity
。prefix
およびsignedPrefix
パラメーターを指定する必要があります。
-
- 9
remapIdentity
一致ポリシーの場合、スコープ指定されたイメージ接頭辞と一致する必要がある接頭辞を指定します。その 2 つが一致する場合、スコープ指定されたイメージ接頭辞はsignedPrefix
の値に置き換えられます。最大長は 512 文字です。- 10
remapIdentity
一致ポリシーの場合、必要に応じて再度マッピングするイメージ接頭辞を指定します。最大長は 512 文字です。
クラスターイメージポリシーオブジェクトを作成します。
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Machine Config Operator (MCO) により、クラスター内のマシン設定プール (MCP) が更新されます。変更の適用中であるため、各ノードでのスケジューリングが無効になります。
検証
クラスター内のノードが更新されたら、クラスターイメージポリシーが設定されていることを確認できます。
次のコマンドを実行して、ノードのデバッグ Pod を起動します。
oc debug node/<node_name>
$ oc debug node/<node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、デバッグシェル内のルートディレクトリーとして
/host
を設定します。chroot /host/
sh-5.1# chroot /host/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
policy.json
ファイルを調べます。cat /etc/containers/policy.json
sh-5.1# cat /etc/containers/policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいクラスターイメージポリシーを示す公開鍵を含むクラスターイメージポリシーオブジェクトの出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいクラスターイメージポリシーを示す BYOPKI 証明書のクラスターイメージポリシーオブジェクトの出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいクラスターイメージポリシーを示す Fulcio 証明書を含むクラスターイメージポリシーオブジェクトの出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
sigstore-registries.yaml
ファイルを調べます。cat /etc/containers/registries.d/sigstore-registries.yaml
sh-5.1# cat /etc/containers/registries.d/sigstore-registries.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow スコープ指定されたレジストリーが追加されたことを示す出力例
docker: example.com: use-sigstore-attachments: true quay.io/openshift-release-dev/ocp-release: use-sigstore-attachments: true
docker: example.com: use-sigstore-attachments: true
1 quay.io/openshift-release-dev/ocp-release: use-sigstore-attachments: true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
true
の場合、sigstore 署名をイメージと併せて読み取ることを指定しています。