2.4. コンテナーイメージの署名
Red Hat は、Red Hat Container Registry でイメージの署名を提供します。これらの署名は、Machine Config Operator (MCO) を使用して OpenShift Container Platform 4 クラスターにプルされる際に自動的に検証されます。
Quay.io は OpenShift Container Platform を設定するほとんどのイメージを提供し、リリースイメージのみが署名されます。リリースイメージは承認済みの OpenShift Container Platform イメージを参照するため、サプライチェーン攻撃からの一定レベルの保護が得られます。ただし、ロギング、モニタリング、サービスメッシュなどの OpenShift Container Platform への拡張の一部は、Operator Lifecycle Manager (OLM) から Operator として提供されます。それらのイメージは、Red Hat Ecosystem Catalog Container イメージ レジストリーから提供されます。
Red Hat レジストリーとインフラストラクチャー間のイメージの整合性を確認するには、署名の検証を有効にします。
2.4.1. Red Hat Container Registry の署名の検証の有効化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Container レジストリーのコンテナー署名の検証を有効にするには、これらのレジストリーからのイメージを検証するキーを指定する署名検証ポリシーファイルを作成する必要があります。RHEL8 ノードの場合、レジストリーはデフォルトで /etc/containers/registries.d にすでに定義されています。
手順
ワーカーノードに必要な設定を含む Butane 設定ファイル
51-worker-rh-registry-trust.buを作成します。注記設定ファイルで指定する Butane のバージョン は、OpenShift Container Platform のバージョンと同じである必要があり、末尾は常に
0です。たとえば、4.20.0などです。Butane の詳細は、「Butane を使用したマシン設定の作成」を参照してください。variant: openshift version: 4.20.0 metadata: name: 51-worker-rh-registry-trust labels: machineconfiguration.openshift.io/role: worker storage: files: - path: /etc/containers/policy.json mode: 0644 overwrite: true contents: inline: | { "default": [ { "type": "insecureAcceptAnything" } ], "transports": { "docker": { "registry.access.redhat.com": [ { "type": "signedBy", "keyType": "GPGKeys", "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release" } ], "registry.redhat.io": [ { "type": "signedBy", "keyType": "GPGKeys", "keyPath": "/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release" } ] }, "docker-daemon": { "": [ { "type": "insecureAcceptAnything" } ] } } }Butane を使用して、ワーカーノードのディスクに書き込まれるファイルが含まれるように、マシン設定 YAML ファイル
51-worker-rh-registry-trust.yamlを生成します。$ butane 51-worker-rh-registry-trust.bu -o 51-worker-rh-registry-trust.yaml作成されたマシン設定を適用します。
$ oc apply -f 51-worker-rh-registry-trust.yamlワーカーマシン設定プールが新しいマシン設定でロールアウトされていることを確認します。
新しいマシン設定が作成されたことを確認します。
$ oc get mc出力例
NAME GENERATEDBYCONTROLLER IGNITIONVERSION AGE 00-master a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.5.0 25m 00-worker a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.5.0 25m 01-master-container-runtime a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.5.0 25m 01-master-kubelet a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.5.0 25m 01-worker-container-runtime a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.5.0 25m 01-worker-kubelet a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.5.0 25m 51-master-rh-registry-trust 3.5.0 13s 51-worker-rh-registry-trust 3.5.0 53s1 99-master-generated-crio-seccomp-use-default 3.5.0 25m 99-master-generated-registries a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.5.0 25m 99-master-ssh 3.2.0 28m 99-worker-generated-crio-seccomp-use-default 3.5.0 25m 99-worker-generated-registries a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.5.0 25m 99-worker-ssh 3.2.0 28m rendered-master-af1e7ff78da0a9c851bab4be2777773b a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.5.0 8s rendered-master-cd51fd0c47e91812bfef2765c52ec7e6 a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.5.0 24m rendered-worker-2b52f75684fbc711bd1652dd86fd0b82 a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.5.0 24m rendered-worker-be3b3bce4f4aa52a62902304bac9da3c a2178ad522c49ee330b0033bb5cb5ea132060b0a 3.5.0 48s2 ワーカーマシン設定プールが新しいマシン設定で更新されていることを確認します。
$ oc get mcp出力例
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-af1e7ff78da0a9c851bab4be2777773b True False False 3 3 3 0 30m worker rendered-worker-be3b3bce4f4aa52a62902304bac9da3c False True False 3 0 0 0 30m1 - 1
UPDATINGフィールドがTrueの場合、マシン設定プールは新しいマシン設定で更新されます。フィールドがFalseになると、ワーカーマシン設定プールが新しいマシン設定にロールアウトされます。
クラスターが RHEL7 ワーカーノードを使用している場合、ワーカーマシンの設定プールが更新されたら、それらのノードに YAML ファイルを
/etc/containers/registries.dディレクトリーに作成します。これにより、特定のレジストリーサーバーの切り離された署名の場所が指定されます。次の例は、registry.access.redhat.comおよびregistry.redhat.ioでホストされているイメージに対してのみ機能します。各 RHEL7 ワーカーノードへのデバッグセッションを開始します。
$ oc debug node/<node_name>ルートディレクトリーを
/hostに変更します。sh-4.2# chroot /host以下を含む
/etc/containers/registries.d/registry.redhat.io.yamlファイルを作成します。docker: registry.redhat.io: sigstore: https://registry.redhat.io/containers/sigstore以下を含む
/etc/containers/registries.d/registry.access.redhat.com.yamlファイルを作成します。docker: registry.access.redhat.com: sigstore: https://access.redhat.com/webassets/docker/content/sigstore- デバッグセッションを終了します。