7.4. サプライチェーンセキュリティーのためのコンテナー署名を検証する
sigstore 署名方法を使用することで、サプライチェーンのセキュリティーを強化できます。
sigstore サポートはテクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
7.4.1. sigstore を使用してコンテナー署名を検証する方法 リンクのコピーリンクがクリップボードにコピーされました!
sigstore 署名方法を使用してイメージの整合性を検証するように、コンテナーランタイムを設定できます。MicroShift コンテナーランタイムを設定すると、イメージの整合性を検証できます。sigstore プロジェクトを使用すると、開発者はビルドした成果物にデジタル署名を追加できます。これにより、ソフトウェアのソースまで追跡できる、より安全な保管の連鎖を構築できます。その後、管理者は署名を検証し、大規模なワークフローを監視できます。sigstore を使用すると、ビルドイメージと同じレジストリーに署名を保存できます。
- ユーザー固有のイメージの場合は、適切な公開鍵を指すように設定ファイルを更新するか、それらのイメージソースの署名検証を無効にする必要があります。
非接続設定またはオフライン設定の場合、公開鍵の内容をオペレーティングシステムイメージに埋め込む必要があります。
7.4.2. sigstore を使用してコンテナー署名を検証する リンクのコピーリンクがクリップボードにコピーされました!
コンテナーランタイムで sigstore を使用するように設定して、MicroShift のコンテナー署名を検証します。コンテナー署名の検証では、イメージへの署名時に Red Hat キーペアの公開鍵が使用されます。sigstore を使用するには、コンテナーランタイムパッケージの一部としてインストールされているデフォルトの /etc/containers/policy.json ファイルを編集します。
Red Hat 公開鍵には次のリンクからアクセスできます。
MicroShift コンテナーの署名検証には、リリースキー 3 を使用する必要があります。
前提条件
- MicroShift ホストへの管理者アクセス権がある。
- MicroShift をインストールしている。
手順
関連する公開鍵をダウンロードし、次のコマンドを実行して
/etc/containers/RedHat_ReleaseKey3.pubとして保存します。$ sudo curl -sL https://access.redhat.com/security/data/63405576.txt -o /etc/containers/RedHat_ReleaseKey3.pubRed Hat ソースからのイメージを検証するようにコンテナーランタイムを設定するには、
/etc/containers/policy.jsonファイルを編集して次の設定を追加します。ポリシー JSON ファイルの例
{ "default": [ { "type": "reject" } ], "transports": { "docker": { "quay.io/openshift-release-dev": [{ "type": "sigstoreSigned", "keyPath": "/etc/containers/RedHat_ReleaseKey3.pub", "signedIdentity": { "type": "matchRepoDigestOrExact" } }], "registry.redhat.io": [{ "type": "sigstoreSigned", "keyPath": "/etc/containers/RedHat_ReleaseKey3.pub", "signedIdentity": { "type": "matchRepoDigestOrExact" } }] } } }/etc/containers/registries.d/registry.redhat.io.yaml`ファイルを編集して次の設定を追加し、イメージをローカルストレージにプルするときに sigstore アタッチメントを使用するように Red Hat リモートレジストリーを設定します。$ cat /etc/containers/registries.d/registry.redhat.io.yaml docker: registry.redhat.io: use-sigstore-attachments: true/etc/containers/registries.d/registry.quay.io.yamlファイルを編集して次の設定を追加し、イメージをローカルストレージにプルするときに sigstore アタッチメントを使用するように Red Hat リモートレジストリーを設定します。$ cat /etc/containers/registries.d/quay.io.yaml docker: quay.io/openshift-release-dev: use-sigstore-attachments: true- ユースケースでこれらのイメージソースの署名検証が必要な場合は、ユーザー固有のレジストリー設定ファイルを作成します。ここで示した例を基にして、独自の要件を追加できます。
次のステップ
- ミラーレジストリーを使用している場合は、sigstore アタッチメントを有効にします。
- それ以外の場合は、ローカルコンテナーストレージの消去に進みます。
7.4.2.1. ミラーレジストリーの sigstore アタッチメントを有効にする リンクのコピーリンクがクリップボードにコピーされました!
ミラーレジストリーを使用している場合は、sigstore アタッチメントとダイジェストによるミラーリングを有効にするために、追加の設定を適用する必要があります。
前提条件
- MicroShift ホストへの管理者アクセス権がある。
- 「sigstore を使用してコンテナー署名を検証する」にある手順を完了した。
手順
/etc/containers/registries.d/mirror.registry.local.yamlファイルを作成して、sigstore アタッチメントを有効にします。$ cat /etc/containers/registries.d/<mirror.registry.local.yaml>1 docker: mirror.registry.local: use-sigstore-attachments: true- 1
- ミラーレジストリー URL に基づき、
<mirror.registry.local.yaml>ファイルに名前を付けます。
次の内容で
/etc/containers/registries.conf.d/999-microshift-mirror.confを作成し、ダイジェストによるミラーリングを有効にします。$ cat /etc/containers/registries.conf.d/999-microshift-mirror.conf [[registry]] prefix = "quay.io/openshift-release-dev" location = "mirror.registry.local" mirror-by-digest-only = true [[registry]] prefix = "registry.redhat.io" location = "mirror.registry.local" mirror-by-digest-only = true
次のステップ
- ローカルコンテナーストレージを消去します。
7.4.2.2. ローカルコンテナーストレージの消去 リンクのコピーリンクがクリップボードにコピーされました!
既存のシステムに設定を適用する場合は、ローカルコンテナーストレージを消去する必要があります。コンテナーストレージを消去することで、署名付きのコンテナーイメージが適切にダウンロードされます。
前提条件
- MicroShift ホストへの管理者アクセス権がある。
- ミラーレジストリーで sigstore を有効にした。
手順
次のコマンドを実行して、CRI-O コンテナーランタイムサービスと MicroShift を停止します。
$ sudo systemctl stop crio microshift次のコマンドを実行して、CRI-O コンテナーのランタイムストレージを消去します。
$ sudo crio wipe --force次のコマンドを実行して、CRI-O コンテナーランタイムサービスと MicroShift を再起動します。
$ sudo systemctl start crio microshift
検証
次のコマンドを入力して、すべての Pod が正常な状態で実行されていることを確認します。
$ oc get pods -A
出力例
NAMESPACE NAME READY STATUS RESTARTS AGE
default i-06166fbb376f14a8bus-west-2computeinternal-debug-qtwcr 1/1 Running 0 46m
kube-system csi-snapshot-controller-5c6586d546-lprv4 1/1 Running 0 51m
openshift-dns dns-default-45jl7 2/2 Running 0 50m
openshift-dns node-resolver-7wmzf 1/1 Running 0 51m
openshift-ingress router-default-78b86fbf9d-qvj9s 1/1 Running 0 51m
openshift-ovn-kubernetes ovnkube-master-5rfhh 4/4 Running 0 51m
openshift-ovn-kubernetes ovnkube-node-gcnt6 1/1 Running 0 51m
openshift-service-ca service-ca-bf5b7c9f8-pn6rk 1/1 Running 0 51m
openshift-storage topolvm-controller-549f7fbdd5-7vrmv 5/5 Running 0 51m
openshift-storage topolvm-node-rht2m 3/3 Running 0 50m
この出力例は、基本的な MicroShift を示しています。オプションの RPM をインストールしている場合は、それらのサービスを実行している Pod のステータスも出力に表示されるはずです。