12.3. クラスターイメージポリシー CR の作成
クラスター管理者は、ClusterImagePolicy
カスタムリソース (CR) を使用してクラスター全体の sigstore 署名検証ポリシーを設定できます。Machine Config Operator (MCO) を有効にすると、ClusterImagePolicy
オブジェクトを監視し、クラスター内のすべてのノード上の /etc/containers/policy.json
および /etc/containers/registries.d/sigstore-registries.yaml
ファイルを更新します。
次の例は、ClusterImagePolicy
オブジェクトの設定方法に関する一般的なガイドラインを示しています。パラメーターの詳細は、「クラスターおよびイメージポリシーのパラメーターについて」を参照してください。
前提条件
- 署名操作に必要な、sigstore でサポートされている公開鍵基盤 (PKI) または Cosign 公開鍵と秘密鍵のペア がある。
- イメージに署名するための署名プロセスがある。
- Cosign 署名を使用している場合は、Cosign 署名をサポートするレジストリーにアクセスできる。
cluster
という名前のFeatureGate
CR を編集して、クラスターに必要なテクノロジープレビュー機能を有効にした。$ oc edit featuregate cluster
FeatureGate
CR の例apiVersion: config.openshift.io/v1 kind: FeatureGate metadata: name: cluster spec: featureSet: TechPreviewNoUpgrade 1
- 1
- 必要な
SigstoreImageVerification
機能を有効にします。
警告クラスターで
TechPreviewNoUpgrade
機能セットを有効にすると、元に戻すことができず、マイナーバージョンの更新が妨げられます。この機能セットを使用すると、該当するテクノロジープレビュー機能をテストクラスターで有効にして、完全にテストすることができます。実稼働クラスターではこの機能セットを有効にしないでください。変更を保存すると、新規マシン設定が作成され、マシン設定プールが更新され、変更が適用されている間に各ノードのスケジューリングが無効になります。
手順
次の例のようなクラスターイメージポリシーオブジェクトを作成します。これらのパラメーターの詳細は、「イメージポリシーパラメーターについて」を参照してください。
公開鍵ポリシーと
MatchRepoDigestOrExact
一致ポリシーを含むクラスターイメージポリシーオブジェクトの例apiVersion: config.openshift.io/v1alpha1 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
- 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
- Root of Trust を定義するポリシータイプ (公開鍵または Fulcio certifice) を指定します。ここでは、Rekor 検証を使用する公開鍵です。
- 6
- 公開鍵ポリシーの場合、base64 でエンコードされた公開鍵を PEM 形式で指定します。最大長は 8192 文字です。
- 7
- オプション: base64 でエンコードされた Rekor 公開鍵を PEM 形式で指定します。最大長は 8192 文字です。
- 8
- オプション: 署名と実際のイメージアイデンティティーのアイデンティティーを検証するためのプロセスとして、次のいずれかを指定します。
-
MatchRepoDigestOrExact
。 -
MatchRepository
。 -
ExactRepository
。exactRepository
パラメーターを指定する必要があります。 -
RemapIdentity
。prefix
およびsignedPrefix
パラメーターを指定する必要があります。
-
Fulcio 証明書ポリシーと
remapIdentity
一致ポリシーを含むクラスターイメージポリシーオブジェクトの例apiVersion: config.openshift.io/v1alpha1 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
- 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
- Root of Trust を定義するポリシータイプ (公開鍵または Fulcio 証明書) を指定します。ここでは、必要な Rekor 検証を含む Fulcio 証明書を示します。
- 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
Machine Config Operator (MCO) は、クラスター内のマシン設定プール (MCP) を更新します。
検証
クラスター内のノードが更新されたら、クラスターイメージポリシーが設定されていることを確認できます。
次のコマンドを実行して、ノードのデバッグ Pod を起動します。
$ oc debug node/<node_name>
次のコマンドを実行して、デバッグシェル内のルートディレクトリーとして
/host
を設定します。sh-5.1# chroot /host/
次のコマンドを実行して、
policy.json
ファイルを調べます。sh-5.1# cat /etc/containers/policy.json
新しいクラスターイメージポリシーを示す公開鍵を含むクラスターイメージポリシーオブジェクトの出力例
# ... "transports": { # ... "docker": { "example.com": [ { "type": "sigstoreSigned", "keyData": "a2V5RGF0YQ==", "rekorPublicKeyData": "cmVrb3JLZXlEYXRh", "signedIdentity": { "type": "matchRepoDigestOrExact" } } ], # ...
新しいクラスターイメージポリシーを示す 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" } } ], # ...
次のコマンドを実行して、
sigstore-registries.yaml
ファイルを調べます。sh-5.1# cat /etc/containers/registries.d/sigstore-registries.yaml
スコープ指定されたレジストリーが追加されたことを示す出力例
docker: example.com: use-sigstore-attachments: true 1 quay.io/openshift-release-dev/ocp-release: use-sigstore-attachments: true
- 1
true
の場合、sigstore 署名をイメージと併せて読み取ることを指定しています。