Red Hat Training

A Red Hat training course is available for RHEL 8

3.11. イメージ署名の検証ポリシーの定義

Red Hat は、Red Hat コンテナーレジストリーでイメージの署名を提供します。root で実行時に /etc/containers/registries.d/ ディレクトリーの YAML ファイルと /etc/containers/policy.json ファイルは、署名検証ポリシーを定義します。

/etc/containers/policy.json ファイルの信頼ポリシーは、信頼のレジストリースコープ (レジストリーやリポジトリー) について記述します。

デフォルトでは、コンテナーツールは、$HOME/.config/containers/policy.json ファイル (ある場合) からポリシーを読み取ります。それ以外の場合には、コンテナーツールは /etc/containers/policy.json ファイルからポリシーを読み取ります。

信頼は、3 つのパラメーターを使用して定義されます。

  1. レジストリー または レジストリー/リポジトリー
  2. 1 つ以上のパブリック GPG キー
  3. 署名サーバー

Red Hat は、以下の URI から署名を配布します。

手順

  1. /etc/containers/policy.json ファイルを表示します。

    # cat /etc/containers/policy.json
    {
        "default": [
            {
                "type": "insecureAcceptAnything"
            }
        ],
        "transports":
        {
            "docker-daemon":
            {
                "": [{"type":"insecureAcceptAnything"}]
            }
        }
    }
  2. レジストリー registry.access.redhat.com および registry.redhat.io の既存の信頼スコープを更新するには、次のコマンドを実行します。

    # podman image trust set -f /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release registry.access.redhat.com
    # podman image trust set -f /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release registry.redhat.io
  3. 信頼ポリシーの設定を確認するには、/etc/containers/policy.json ファイルを表示します。

           "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"
                    }
                ]
            },

    "registry.access.redhat.com""registry.redhat.io" のセクションが追加されれていることが分かります。

  4. 以下の内容で /etc/containers/registries.d/registry.access.redhat.com.yaml ファイルを作成し、registry.access.redhat.com レジストリーからのコンテナーイメージの署名ストアを特定します。

    docker:
         registry.access.redhat.com:
             sigstore: https://access.redhat.com/webassets/docker/content/sigstore
  5. 以下の内容で etc/containers/registries.d/registry.redhat.io.yaml ファイルを作成します。

    docker:
         registry.redhat.io:
             sigstore: https://registry.redhat.io/containers/sigstore
  6. 信頼設定を表示するには、以下を入力します。

    # podman image trust show                                                          default                     accept
    registry.access.redhat.com  signedBy                security@redhat.com, security@redhat.com  https://access.redhat.com/webassets/docker/content/sigstore
    registry.redhat.io          signedBy                security@redhat.com, security@redhat.com  https://registry.redhat.io/containers/sigstore
                                insecureAcceptAnything
  7. デフォルトの信頼ポリシーを拒否するには、以下を入力します。

    # podman image trust set -t reject default
  8. 信頼ポリシーの設定を確認するには、/etc/containers/policy.json ファイルを表示します。

    # cat /etc/containers/policy.json
    {
        "default": [
        {
            "type": "reject"
        }
    ...
    }

    "default" セクションが "insecureAcceptAnything" から "reject" に変更されていることが分かります。

  9. registry.access.redhat.com レジストリーから最小の Red Hat Universal Base Image 8 (ubi8-minimal) イメージをプルします。

    # podman --log-level=debug pull registry.access.redhat.com/ubi8-minimal
    ....
    DEBU[0000] Using registries.d directory /etc/containers/registries.d for sigstore configuration
    DEBU[0000]  Using "docker" namespace registry.access.redhat.com
    DEBU[0000]   Using https://access.redhat.com/webassets/docker/content/sigstore
    ...

    access.redhat.com/webassets/docker/content/sigstore の署名ストレージアドレスが /etc/containers/registries.d/registry.access.redhat.com.yaml で指定したアドレスと一致していることが確認できます。

  10. registry.redhat.io レジストリーにログインします。

    # podman login registry.redhat.io
    Username: username
    Password: ***********
    Login Succeeded!
  11. registry.redhat.io レジストリーから support-tools イメージをプルします。

    # podman --log-level=debug pull registry.redhat.io/rhel8/support-tools
    ...
    DEBU[0000] Using registries.d directory /etc/containers/registries.d for sigstore configuration
    DEBU[0000]  Using "docker" namespace registry.redhat.io
    DEBU[0000]   Using https://registry.redhat.io/containers/sigstore
    ...

    registry.redhat.io/containers/sigstore の署名ストレージアドレスが /etc/containers/registries.d/registry.redhat.io.yaml で指定したアドレスと一致していることが確認できます。

  12. ローカルシステムにプルしたすべてのイメージを一覧表示するには、次のコマンドを入力します。

    # podman images
    REPOSITORY                               TAG     IMAGE ID      CREATED       SIZE
    registry.redhat.io/rhel8/support-tools   latest  5ef2aab09451  13 days ago   254 MB
    registry.access.redhat.com/ubi8-minimal  latest  86c870596572  13 days ago   146 MB

関連情報