12.2. sigstore サポートの設定について
ClusterImagePolicy
および ImagePolicy
カスタムリソース (CR) オブジェクトを使用して、クラスター全体または特定の namespace に対して sigstore サポートを有効化および設定できます。これらのオブジェクトには、sigstore ツールを使用して検証するイメージとリポジトリー、および署名の検証方法を指定するポリシーが含まれています。
クラスターイメージポリシー。クラスター管理者は、クラスターイメージポリシーオブジェクトを使用してクラスター全体の sigstore 署名検証ポリシーを設定できます。有効にすると、Machine Config Operator (MCO) は
ClusterImagePolicy
オブジェクトを監視し、クラスター内のすべてのノード上の/etc/containers/policy.json
ファイルと/etc/containers/registries.d/sigstore-registries.yaml
ファイルを更新します。重要デフォルトの
openshift
クラスターイメージポリシーは、必要な OpenShift Container Platform イメージの sigstore サポートを提供します。このクラスターイメージポリシーオブジェクトは、削除または変更しないでください。イメージポリシー。クラスター管理者またはアプリケーション開発者は、イメージポリシーを使用して特定の namespace に対して sigstore 署名検証ポリシーを設定できます。MCO は、さまざまな namespace 内の
ImagePolicy
インスタンスを監視し、クラスター内のすべてのノード上の/etc/crio/<namespace>.json
ファイルと/etc/containers/registries.d/sigstore-registries.yaml
ファイルを作成または更新します。イメージポリシー内のイメージまたはリポジトリーがクラスターイメージポリシー内のいずれかのイメージまたはリポジトリーの下にネストされている場合、クラスターイメージポリシーのポリシーのみが適用されます。たとえば、イメージポリシーで
example.com/global/image
が指定され、クラスターイメージポリシーでexample.com/global
が指定されている場合、namespace はクラスターイメージポリシーのポリシーを使用します。イメージポリシーオブジェクトが作成され、次のメッセージのようなエラーが表示されます。競合するイメージアイデンティティーを持つイメージポリシーの例
API Version: config.openshift.io/v1alpha1 Kind: ImagePolicy Name: p0 Namespace: mynamespace # ... Status: Conditions: Message: has conflicting scope(s) ["example.com/global/image"] that equal to or nest inside existing clusterimagepolicy, only policy from clusterimagepolicy scope(s) will be applied Reason: ConflictScopes # ...
12.2.1. クラスターおよびイメージポリシーのパラメーターについて
次のパラメーターは、クラスターおよびイメージポリシーに適用されます。これらのパラメーターの使用方法については、「クラスターイメージポリシー CR の作成」および「イメージポリシー CR の作成」を参照してください。
scopes
ポリシーに割り当てられたリポジトリーとイメージのリストを定義します。次のスコープの少なくとも 1 つをリストする必要があります。
-
個別のイメージ (タグやダイジェストを使用、例:
example.com/namespace/image:latest
) -
リポジトリー (タグやダイジェストを省略、例:
example.com
) -
リポジトリー namespace (例:
example.com/namespace/
) -
レジストリーホスト (ホスト名とポート番号のみを指定するか、
*.example.com
のような*.
で始まるワイルドカード式)
複数のスコープが同じクラスターまたはイメージポリシー内の 1 つのスコープと一致する場合、最も具体的なスコープのポリシーのみが適用されます。
イメージポリシー内のスコープ指定されたイメージまたはリポジトリーが、クラスターイメージポリシー内のスコープイメージまたはリポジトリーのいずれかの下にネストされている場合、クラスターイメージポリシーのポリシーのみが適用されます。ただし、イメージポリシーオブジェクトは作成されます。たとえば、イメージポリシーで
example.com/global/image
が指定され、クラスターイメージポリシーでexample.com/global
が指定されている場合、namespace はクラスターイメージポリシーからポリシーを継承します。-
個別のイメージ (タグやダイジェストを使用、例:
policy
scopes
にリストされているソースからのイメージを検証できるようにするための設定が含まれており、検証ポリシーに一致しないイメージの処理方法を定義します。rootOfTrust
と、オプションでsignedIdentity
を設定する必要があります。rootOfTrust
: ポリシーの Root of Trust を指定します。公開鍵または Fulcio 証明書 のいずれかを設定します。-
publicKey
: ポリシーが sigstore 公開鍵に依存していることを示します。base64 でエンコードされた PEM 形式の公開鍵を指定する必要があります。オプションで Rekor verification を含めることもできます。 FulcioCAWithRekor
: ポリシーが Fulcio 証明書に基づくことを示します。次のパラメーターを指定する必要があります。- base64 でエンコードされた PEM 形式の Fulcio CA
- OpenID Connect (OIDC) 発行者
- Fulcio 認証設定のメール
- Rekor verification
-
signedIdentity
: 署名内のイメージと実際のイメージの検証に使用するアプローチを指定します。署名されたアイデンティティーを設定するには、一致ポリシーとして次のいずれかのパラメーターを指定する必要があります。-
MatchRepoDigestOrExact
。署名で参照されるイメージは、イメージ自体と同じリポジトリーに存在する必要があります。イメージにタグが付いている場合、署名で参照されるイメージは完全に一致する必要があります。これはデフォルトです。 -
MatchRepository
。署名で参照されるイメージは、イメージ自体と同じリポジトリーに存在する必要があります。イメージにタグが付いている場合、署名で参照されるイメージは完全に一致する必要はありません。これは、イメージが正確なイメージバージョンを指定するタグで署名されている場合に、latest
タグを含むイメージをプルするのに役立ちます。 -
ExactRepository
。署名で参照されるイメージは、exactRepository
パラメーターで指定されたものと同じリポジトリーに存在する必要があります。exactRepository
パラメーターを指定する必要があります。 RemapIdentity
。スコープ指定されたリポジトリーまたはイメージが指定されたprefix
と一致する場合、その接頭辞は指定されたsignedPrefix
に置き換えられます。イメージアイデンティティーが一致しない場合、prefix
は変更されず、再マッピングは実行されません。このオプションは、ベンダーのリポジトリー構造を保持する他のリポジトリー namespace のミラーの署名を検証する場合に使用できます。prefix
とsignedPrefix
は、host[:port]
文字列に正確に一致するhost[:port]
の値、リポジトリー namespace、またはリポジトリーのいずれかになります。prefix
とsignedPrefix
にタグやダイジェストを含めることはできません。たとえば単一のリポジトリーを指定するには、busybox
ではなくexample.com/library/busybox
を使用します。example.com/library/busybox
の親 namespace を指定するには、example.com/library
を使用できます。次のパラメーターを指定する必要があります。
-
prefix
: 一致させるイメージの接頭辞を指定します。 -
signedPrefix
: 必要に応じて、再度マッピングするイメージ接頭辞を指定します。
-
-
12.2.2. イメージポリシーの変更または削除
他のカスタムリソース (CR) オブジェクトと同じコマンドを使用して、クラスターイメージポリシーまたはイメージポリシーを変更または削除できます。
既存のポリシーを変更するには、ポリシー YAML を編集し、ファイルに対して oc apply
コマンドを実行するか、ClusterImagePolicy
または ImagePolicy
オブジェクトを直接編集します。どちらの方法でも、変更は同じように適用されます。
クラスターまたは namespace に対して複数のポリシーを作成できます。これにより、イメージまたはリポジトリーごとに異なるポリシーを作成できます。
ClusterImagePolicy
および ImagePolicy
オブジェクトを削除することで、ポリシーを削除できます。