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という名前のFeatureGateCR を編集して、クラスターに必要なテクノロジープレビュー機能を有効にした。$ oc edit featuregate clusterFeatureGateCR の例apiVersion: config.openshift.io/v1 kind: FeatureGate metadata: name: cluster spec: featureSet: TechPreviewNoUpgrade1 - 1
- 必要な
SigstoreImageVerification機能を有効にします。
警告クラスターで
TechPreviewNoUpgrade機能セットを有効にすると、元に戻すことができず、マイナーバージョンの更新が妨げられます。この機能セットを使用すると、該当するテクノロジープレビュー機能をテストクラスターで有効にして、完全にテストすることができます。実稼働クラスターではこの機能セットを有効にしないでください。変更を保存すると、新規マシン設定が作成され、マシン設定プールが更新され、変更が適用されている間に各ノードのスケジューリングが無効になります。
手順
次の例のようなクラスターイメージポリシーオブジェクトを作成します。これらのパラメーターの詳細は、「イメージポリシーパラメーターについて」を参照してください。
公開鍵ポリシーと
MatchRepoDigestOrExact一致ポリシーを含むクラスターイメージポリシーオブジェクトの例apiVersion: config.openshift.io/v1alpha1 kind: ClusterImagePolicy1 metadata: name: p1 spec: scopes:2 - example.com policy:3 rootOfTrust:4 policyType: PublicKey5 publicKey: keyData: a2V5RGF0YQ==6 rekorKeyData: cmVrb3JLZXlEYXRh7 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: ClusterImagePolicy1 metadata: name: p1 spec: scopes:2 - example.com policy:3 rootOfTrust:4 policyType: FulcioCAWithRekor5 fulcioCAWithRekor:6 fulcioCAData: a2V5RGF0YQ== fulcioSubject: oidcIssuer: "https://expected.OIDC.issuer/" signedEmail: "expected-signing-user@example.com" rekorKeyData: cmVrb3JLZXlEYXRh7 signedIdentity: matchPolicy: RemapIdentity8 remapIdentity: prefix: example.com9 signedPrefix: mirror-example.com10 - 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>.yamlMachine 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: true1 quay.io/openshift-release-dev/ocp-release: use-sigstore-attachments: true- 1
trueの場合、sigstore 署名をイメージと併せて読み取ることを指定しています。