3.5. policy.json ファイルを使用したコンテナー署名の検証
Red Hat Enterprise Linux (RHEL) は、コンテナーイメージの署名を必須とし、検証するように設定できます。これにより、プルするイメージが信頼できるソースからのものであり、改ざんされていないことを確認できます。policy.json ファイルを修正することで、この信頼ポリシーを管理できます。これにより、Podman、Buildah、Skopeo などのツールに対して、有効なコンテナイメージ署名を強制できます。
システム全体の設定を行うには、/etc/containers/policy.json ファイルを変更します。ルートレスユーザーの場合は、これらのルールを $HOME/.config/containers/policy.json ファイルに適用できます。
transport、registry、およびnamespaceによるスコープポリシーpolicy.jsonファイルは、検証ルールを階層的に構造化し、特定のイメージにどのルールが適用されるかを決定します。以下の要素を使用することで、これらのポリシーの範囲を指定できます。-
Default: デフォルト配列は、具体的に定義されたどのスコープにもイメージが一致しない場合に適用される、フォールバックポリシーを指定します。 -
Transport: トランスポートオブジェクト内でカスタムポリシーを定義できます。コンテナーレジストリーの場合、dockerトランスポートの下でカスタムポリシーを定義できます。 RegistryおよびNamespace:transportセクションを使用して、さまざまな組織レベルで信頼ポリシーを設定できます。ポリシーの範囲は、以下のいずれかの方法で設定できます。- ポリシーのスコープをレジストリー全体に設定します。たとえば、単一の企業向けに専用化されたレジストリーの場合は、<registry> のように指定します。
-
ポリシーを特定の名前空間またはリポジトリーに絞り込みます。たとえば、パブリックレジストリーの場合は、
<registry>/<namespace>のようになります。
-
- 署名証明書の指定
レジストリーまたは名前空間のブロック内で署名要件を定義することで、特定のスコープ内にあるイメージに対して、対応する鍵や証明書による検証を義務付けることができます。以下のキーと値のペアを設定できます。
-
type:signedBy: コンテナーツールに有効な署名が必要であることを指示します。 -
keyType: 使用するキーの形式を指定します。たとえば、GPGKeysなどです。 -
keyPath: 検証に使用されるローカル公開鍵または証明書ファイルへの絶対パスを指定します。たとえば、testdata/sequoia-key.pgpなどです。
-
デフォルトルールを設定して、すべてを受け入れることもできます。ただし、docker トランスポート内で、特定のスコープ付き名前空間 localhost:5003/simple-sq-signed-centos を制限して、有効な署名を厳密に要求できます。以下に例を示します。
{
"default": [
{
"type": "insecureAcceptAnything"
}
],
"transports": {
"docker": {
"localhost:5003/simple-sq-signed-centos": [
{
"type": "signedBy",
"keyType": "GPGKeys",
"keyPath": "testdata/sequoia-key.pgp"
}
]
}
}
}
設定がアクティブになったら、podman pull <registry>/<namespace>/<image> コマンドを実行する必要があります。Podman は、policy.json ファイルで設定したとおりに、署名の存在を自動的に強制します。設定済みのレジストリーから、署名されていない、または誤ったキーで署名されたイメージをプルしようとすると、コマンドは失敗します。