12.4. イメージポリシー CR の作成
クラスター管理者またはアプリケーション開発者は、ImagePolicy カスタムリソース (CR) を使用して、特定の namespace に対して sigstore 署名検証ポリシーを設定できます。MCO は、さまざまな namespace の ImagePolicy インスタンスを監視し、クラスター内のすべてのノード上の /etc/crio/policies/<namespace>.json および /etc/containers/registries.d/sigstore-registries.yaml ファイルを更新します。
イメージポリシー内のスコープ指定されたイメージまたはリポジトリーが、クラスターイメージポリシー内のスコープイメージまたはリポジトリーのいずれかの下にネストされている場合、クラスターイメージポリシーのポリシーのみが適用されます。ただし、イメージポリシーオブジェクトはエラーメッセージとともに作成されます。たとえば、イメージポリシーで example.com/global/image が指定され、クラスターイメージポリシーで example.com/global が指定されている場合、namespace はクラスターイメージポリシーからポリシーを継承します。
次の例は、ImagePolicy オブジェクトの設定方法に関する一般的なガイドラインを示しています。パラメーターの詳細は、「クラスターおよびイメージポリシーのパラメーターについて」を参照してください。
前提条件
- 署名操作用に、sigstore でサポートされている公開鍵基盤 (PKI) がある、または 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クラスターイメージポリシーによって、CVO Pod を新しいノードに移動する Cluster Version Operator 機能がブロックされ、機能セットの変更から生じるノードの更新が妨げられます。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.sigCopy to Clipboard Copied! Toggle word wrap Toggle overflow clusterという名前のFeatureGateCR を編集して、クラスターに必要なテクノロジープレビュー機能を有効にした。oc edit featuregate cluster
$ oc edit featuregate clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow FeatureGateCR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 必要な
SigstoreImageVerification機能を有効にします。
警告クラスターで
TechPreviewNoUpgrade機能セットを有効にすると、元に戻すことができず、マイナーバージョンの更新が妨げられます。この機能セットを使用すると、該当するテクノロジープレビュー機能をテストクラスターで有効にして、完全にテストすることができます。実稼働クラスターではこの機能セットを有効にしないでください。変更を保存すると、新規マシン設定が作成され、マシン設定プールが更新され、変更が適用されている間に各ノードのスケジューリングが無効になります。
手順
次の例のようなイメージポリシーオブジェクトを作成します。これらのパラメーターの詳細は、「クラスターおよびイメージポリシーのパラメーターについて」を参照してください。
公開鍵ポリシーと
MatchRepository一致ポリシーを含むイメージポリシーオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
ImagePolicyオブジェクトを作成します。- 2
- イメージポリシーが適用される namespace を指定します。
- 3
- このポリシーに割り当てられるリポジトリーまたはイメージのリストを定義します。
- 4
- イメージの検証方法を定義するパラメーターを指定します。
- 5
- ポリシーの Root of Trust を定義します。
- 6
- Root of Trust を定義するポリシータイプ (公開鍵または Fulcio 証明書) を指定します。ここでは、Rekor 検証を使用する公開鍵です。
- 7
- 公開鍵ポリシーの場合、base64 でエンコードされた公開鍵を PEM 形式で指定します。最大長は 8192 文字です。
- 8
- オプション: base64 でエンコードされた Rekor 公開鍵を PEM 形式で指定します。最大長は 8192 文字です。
- 9
- オプション: 署名と実際のイメージアイデンティティーのアイデンティティーを検証するためのプロセスとして、次のいずれかを指定します。
-
MatchRepoDigestOrExact。 -
MatchRepository。 -
ExactRepository。exactRepositoryパラメーターを指定する必要があります。 -
RemapIdentity。prefixおよびsignedPrefixパラメーターを指定する必要があります。
-
Fulcio 証明書ポリシーと
ExactRepository一致ポリシーを含むイメージポリシーオブジェクトの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
ImagePolicyオブジェクトを作成します。- 2
- イメージポリシーが適用される namespace を指定します。
- 3
- このポリシーに割り当てられるリポジトリーまたはイメージのリストを定義します。
- 4
- イメージの検証方法を定義するパラメーターを指定します。
- 5
- ポリシーの Root of Trust を定義します。
- 6
- Root of Trust を定義するポリシータイプ (公開鍵または Fulcio 証明書) を指定します。ここでは、必要な Rekor 検証を含む Fulcio 証明書を示します。
- 7
- Fulcio 証明書ポリシーの場合、次のパラメーターが必要です。
-
fulcioCAData: base64 でエンコードされた Fulcio 証明書を PEM 形式で指定します。最大長は 8192 文字です。 -
fulcioSubject: OIDC 発行者と Fulcio 認証設定のメールを指定します。
-
- 8
- base64 でエンコードされた Rekor 公開鍵を PEM 形式で指定します。このパラメーターは、
policyTypeがFulcioCAWithRekorの場合に必要です。最大長は 8192 文字です。 - 9
- オプション: 署名と実際のイメージアイデンティティーのアイデンティティーを検証するためのプロセスとして、次のいずれかを指定します。
-
MatchRepoDigestOrExact。 -
MatchRepository。 -
ExactRepository。exactRepositoryパラメーターを指定する必要があります。 -
RemapIdentity。prefixおよびsignedPrefixパラメーターを指定する必要があります。
-
- 10
exactRepository一致ポリシーの場合、イメージアイデンティティーと署名を含むリポジトリーを指定します。
イメージポリシーオブジェクトを作成します。
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy 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 次のコマンドを実行して、
<namespace>.jsonファイルを調べます。cat /etc/crio/policies/<namespace>.json
sh-5.1# cat /etc/crio/policies/<namespace>.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しいイメージポリシーを示す公開鍵を含むイメージポリシーオブジェクトの出力例
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.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow スコープ指定されたレジストリーが追加されたことを示す出力例
docker: example.io/crio/signed: use-sigstore-attachments: true quay.io/openshift-release-dev/ocp-release: use-sigstore-attachments: truedocker: example.io/crio/signed: use-sigstore-attachments: true1 quay.io/openshift-release-dev/ocp-release: use-sigstore-attachments: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
trueの場合、sigstore 署名をイメージと併せて読み取ることを指定しています。
次のコマンドを実行して、crio ログで sigstore 署名検証を確認します。
journalctl -u crio | grep -A 100 "Pulling image: example.io/crio"
sh-5.1# journalctl -u crio | grep -A 100 "Pulling image: example.io/crio"Copy to Clipboard Copied! Toggle word wrap Toggle overflow タイムスタンプを削除した出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow