3.5. policy.json ファイルを使用したコンテナー署名の検証
Red Hat Enterprise Linux (RHEL) では、コンテナーイメージの署名を必須とし、検証するように設定できます。これにより、取得したイメージが信頼できる情報源から入手されたものであり、改変されていないことが保証されます。policy.json ファイルを変更することで、この信頼ポリシーを管理できます。これにより、Podman、Buildah、Skopeo などのツールが有効なコンテナーイメージ署名を強制的に使用するようになります。
システム全体の設定を行うには、/etc/containers/policy.json ファイルを変更します。ルート権限を持たないユーザーの場合は、これらのルールを $HOME/.config/containers/policy.json ファイルに適用できます。
トランスポート、レジストリー、ネームスペースによるスコープポリシーpolicy.jsonファイルは、検証ルールを階層的に構造化し、特定のイメージにどのルールが適用されるかを決定します。以下の要素を使用することで、これらのポリシーの範囲を指定できます。-
デフォルト: デフォルト配列は、イメージが定義済みのスコープのいずれにも一致しない場合に適用されるフォールバックポリシーを指定します。 -
トランスポート: トランスポートオブジェクト内でカスタムポリシーを定義できます。コンテナーレジストリーの場合、dockerトランスポートの下でカスタムポリシーを定義できます。 レジストリーと名前空間:トランスポートセクションを使用して、さまざまな組織レベルで信頼ポリシーを設定できます。ポリシーの範囲は、以下のいずれかの方法で設定できます。- ポリシーをレジストリー全体に適用します。たとえば、単一企業専用のレジストリーの場合は、<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 < レジストリー >/< ネームスペース >/< イメージ > コマンドを実行する必要があります。Podman は、policy.json ファイルで設定したとおりに、署名の存在を自動的に強制します。設定済みのレジストリーから、署名されていない、または誤ったキーで署名されたイメージを取得しようとすると、コマンドは失敗します。