Red Hat Quay のセキュリティー保護


Red Hat Quay 3.14

Red Hat Quay のセキュリティー保護

概要

Red Hat Quay のセキュリティー保護: SSL/TLS、証明書、暗号化

はじめに

Red Hat Quay は、Transport Layer Security (TLS)、証明書管理、暗号化技術を使用して、通信とリポジトリーへの信頼できるアクセスを保護する機能を管理者に提供します。SSL/TLS を適切に設定し、カスタム証明書を実装すると、データを保護し、外部接続をセキュリティーで保護し、Red Hat Quay と選択した統合サービス間の信頼を維持するのに役立ちます。

以下のトピックを説明します。

  • スタンドアロン Red Hat Quay デプロイメント用のカスタム SSL/TLS 証明書の設定
  • Red Hat Quay on OpenShift Container Platform のカスタム SSL/TLS 証明書の設定
  • Red Hat Quay コンテナーへの認証局の追加
  • Red Hat Quay on OpenShift Container Platform への認証局のさらなる追加

第1章 Red Hat Quay の SSL と TLS の設定

Secure Sockets Layer (SSL) プロトコルは、元々はインターネットを介した安全な通信メカニズムを提供するために、Netscape Corporation により開発されました。その後、このプロトコルは、Internet Engineering Task Force (IETF) により採用され、Transport Layer Security (TLS) に名前が変更になりました。

TLS (トランスポート層セキュリティー) は、ネットワーク通信のセキュリティー保護に使用する暗号化プロトコルです。優先する鍵交換プロトコル、認証方法、および暗号化アルゴリズムを設定してシステムのセキュリティー設定を強化する際には、対応するクライアントの範囲が広ければ広いほど、セキュリティーのレベルが低くなることを認識しておく必要があります。反対に、セキュリティー設定を厳密にすると、クライアントとの互換性が制限され、システムからロックアウトされるユーザーが出てくる可能性もあります。可能な限り厳密な設定を目指し、互換性に必要な場合に限り、設定を緩めるようにしてください。

Red Hat Quay は、クライアントと Red Hat Quay サーバー間の安全な通信を確保するために SSL/TLS 証明書を使用するように設定できます。この設定には、有効な SSL/TLS 証明書を使用する必要があります。これは、信頼できる認証局 (CA) から取得するか、内部で使用するための自己署名証明書として生成できます。

1.1. 認証局の作成

独自の CA を設定し、それを使用してドメインのサーバー証明書を発行するには、次の手順に従います。これにより、独自の証明書を使用して SSL/TLS による通信を保護できます。

手順

  1. 次のコマンドを入力して、ルート CA キーを生成します。

    $ openssl genrsa -out rootCA.key 2048
  2. 次のコマンドを入力して、ルート CA 証明書を生成します。

    $ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
  3. サーバーのホスト名など、証明書の要求に組み込まれる情報を入力します。以下に例を示します。

    Country Name (2 letter code) [XX]:IE
    State or Province Name (full name) []:GALWAY
    Locality Name (eg, city) [Default City]:GALWAY
    Organization Name (eg, company) [Default Company Ltd]:QUAY
    Organizational Unit Name (eg, section) []:DOCS
    Common Name (eg, your name or your server's hostname) []:quay-server.example.com
  4. 次のコマンドを入力してサーバーキーを生成します。

    $ openssl genrsa -out ssl.key 2048
  5. 次のコマンドを入力して、署名リクエストを生成します。

    $ openssl req -new -key ssl.key -out ssl.csr
  6. サーバーのホスト名など、証明書の要求に組み込まれる情報を入力します。以下に例を示します。

    Country Name (2 letter code) [XX]:IE
    State or Province Name (full name) []:GALWAY
    Locality Name (eg, city) [Default City]:GALWAY
    Organization Name (eg, company) [Default Company Ltd]:QUAY
    Organizational Unit Name (eg, section) []:DOCS
    Common Name (eg, your name or your server's hostname) []:quay-server.example.com
    Email Address []:
  7. 以下のようにサーバーのホスト名を指定して、設定ファイルの openssl.cnf を作成します。

    openssl.cnf ファイルの例

    [req]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    [req_distinguished_name]
    [ v3_req ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = <quay-server.example.com>
    IP.1 = 192.168.1.112

  8. 設定ファイルを使用して、証明書 ssl.cert を生成します。

    $ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf
  9. 次のコマンドを入力して、作成した証明書とファイルを確認します。

    $ ls /path/to/certificates

    出力例

    rootCA.key ssl-bundle.cert ssl.key custom-ssl-config-bundle-secret.yaml rootCA.pem ssl.cert
    openssl.cnf rootCA.srl  ssl.csr

1.2. スタンドアロン Red Hat Quay デプロイメント用の SSL/TLS の設定

スタンドアロンの Red Hat Quay デプロイメントの場合、コマンドラインインターフェイスを使用し、config.yaml ファイルを手動で更新して、SSL/TLS 証明書を設定する必要があります。

1.2.1. コマンドラインインターフェイスを使用してカスタム SSL/TLS 証明書を設定する

SSL/TLS は、コマンドラインインターフェイス (CLI) を使用して config.yaml ファイルを手動で更新することで設定する必要があります。

前提条件

  • 認証局を作成して証明書に署名している。

手順

  1. 証明書ファイルとプライマリーキーファイルを設定ディレクトリーにコピーして、それぞれ ssl.certssl.key という名前が付けられていることを確認します。

    cp ~/ssl.cert ~/ssl.key /path/to/configuration_directory
  2. 次のコマンドを入力して、設定ディレクトリーに移動します。

    $ cd /path/to/configuration_directory
  3. config.yaml ファイルを編集し、Red Hat Quay で SSL/TLS を処理するように指定します。

    config.yaml ファイルの例

    # ...
    SERVER_HOSTNAME: <quay-server.example.com>
    ...
    PREFERRED_URL_SCHEME: https
    # ...

  4. オプション: 次のコマンドを入力して、rootCA.pem ファイルの内容を ssl.cert ファイルの末尾に追加します。

    $ cat rootCA.pem >> ssl.cert
  5. 次のコマンドを入力して、Quay コンテナーを停止します。

    $ sudo podman stop <quay_container_name>
  6. 次のコマンドを入力してレジストリーを再起動します。

    $ sudo podman run -d --rm -p 80:8080 -p 443:8443 \
      --name=quay \
      -v $QUAY/config:/conf/stack:Z \
      -v $QUAY/storage:/datastorage:Z \
      registry.redhat.io/quay/quay-rhel8:v3.14.5

1.2.2. 認証局を信頼するように Podman を設定する

Podman は、/etc/containers/certs.d//etc/docker/certs.d/ の 2 つのパスを使用して認証局 (CA) ファイルを検出します。CA を信頼するように Podman を設定するには、次の手順を使用します。

手順

  1. ルート CA ファイルを /etc/containers/certs.d/ または /etc/docker/certs.d/ のいずれかにコピーします。サーバーのホスト名によって決定される正確なパスを使用し、ファイルに ca.crt という名前を付けます。

    $ sudo cp rootCA.pem /etc/containers/certs.d/quay-server.example.com/ca.crt
  2. Red Hat Quay レジストリーにログインするときに --tls-verify=false オプションを使用する必要がなくなったことを確認します。

    $ sudo podman login quay-server.example.com

    出力例

    Login Succeeded!

1.2.3. 認証局を信頼するようにシステムを設定

認証局を信頼するようにシステムを設定するには、次の手順を使用します。

手順

  1. 次のコマンドを入力して、rootCA.pem ファイルをシステム全体の統合トラストストアにコピーします。

    $ sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/
  2. 次のコマンドを入力して、システム全体のトラストストア設定を更新します。

    $ sudo update-ca-trust extract
  3. オプション: trust list コマンドを使用して、Quay サーバーが設定されていることを確認できます。

    $ trust list | grep quay
        label: quay-server.example.com

    https://quay-server.example.com でレジストリーを参照すると、接続が安全であることを示すロックアイコンが表示されます。

    Connection not secure

  4. rootCA.pem ファイルをシステム全体の信頼から削除するには、ファイルを削除して設定を更新します。

    $ sudo rm /etc/pki/ca-trust/source/anchors/rootCA.pem
    $ sudo update-ca-trust extract
    $ trust list | grep quay

詳細は、RHEL 9 のドキュメントの 共有システム証明書の使用 を参照してください。

1.3. Red Hat Quay on OpenShift Container Platform のカスタム SSL/TLS 証明書の設定

Red Hat Quay が OpenShift Container Platform にデプロイされると、QuayRegistry カスタムリソース定義 (CRD) の tls コンポーネントはデフォルトで managed に設定されます。その結果、OpenShift Container Platform の認証局が HTTPS エンドポイントの作成と SSL/TLS 証明書のローテーションに使用されます。

OpenShift Container Platform への Red Hat Quay の初期デプロイメントの前または後に、カスタム SSL/TLS 証明書を設定できます。このプロセスには、QuayRegistry YAML ファイル内の configBundleSecret リソースを作成または更新してカスタム証明書を統合し、tls コンポーネントを unmanaged に設定することが含まれます。

重要

Red Hat Quay のカスタム SSL/TLS 証明書を設定する場合、管理者が証明書をローテーションします。

以下の手順により、カスタム SSL/TLS 証明書を適用して安全な通信を確保し、OpenShift Container Platform デプロイメント上の Red Hat Quay の特定のセキュリティー要件を満たすことができます。これらの手順では、認証局 (CA) バンドルまたは ssl.keyssl.cert がすでに作成されていることを前提としています。この手順では、これらのファイルを OpenShift Container Platform デプロイメント上の Red Hat Quay に統合する方法を示します。これにより、レジストリーが指定されたセキュリティー設定で動作し、組織の SSL/TLS ポリシーに準拠するようになります。

注記
  • HTTPS 証明書を使用して Red Hat Quay を保護するには、次の手順に従います。これは、認証局信頼バンドルの管理とは異なることに注意してください。CA 信頼バンドルは、Quay コンテナー内のシステムプロセスによって使用され、信頼できる CA に対して証明書を検証し、LDAP、ストレージバックエンド、OIDC 接続などのサービスが信頼されていることを確認します。
  • 既存のデプロイメントに証明書を追加する場合は、設定を変更しない場合でも、新規の設定バンドルシークレットに既存の config.yaml を含める必要があります。

1.3.1. カスタム SSL/TLS configBundleSecret リソースの作成

カスタム SSL/TLS 証明書を作成した後に Red Hat Quay on OpenShift Container Platform 用のカスタム configBundleSecret リソースを作成すると、ssl.cert ファイルssl.key ファイルをアップロードできるようになります。

前提条件

  • base64 で元の設定バンドルを config.yaml ファイルにデコードしている。詳細は、既存の設定のダウンロード を参照してください。
  • カスタム SSL 証明書とキーを生成している。

手順

  1. 新しい YAML ファイル (例: custom-ssl-config-bundle-secret.yaml) を作成します。

    $ touch custom-ssl-config-bundle-secret.yaml
  2. custom-ssl-config-bundle-secret リソースを作成します。

    1. 次のコマンドを入力してリソースを作成します。

      $ oc -n <namespace> create secret generic custom-ssl-config-bundle-secret \
        --from-file=config.yaml=</path/to/config.yaml> \ 
      1
      
        --from-file=ssl.cert=</path/to/ssl.cert> \ 
      2
      
        --from-file=extra_ca_cert_<name-of-certificate>.crt=ca-certificate-bundle.crt
       \ 
      3
      
        --from-file=ssl.key=</path/to/ssl.key> \ 
      4
      
        --dry-run=client -o yaml > custom-ssl-config-bundle-secret.yaml
      1
      <config.yaml>base64 でデコード された config.yaml ファイルです。
      2
      <ssl.cert>ssl.cert ファイルです。
      3
      オプション: --from-file=extra_ca_cert_<name-of-certificate>.crt=ca-certificate-bundle.crt フィールドにより、Red Hat Quay はカスタム認証局 (CA) ファイルを認識できるようになります。LDAP、OIDC、またはカスタム CA を使用する別のサービスを使用している場合は、extra_ca_cert パスを介してそれらを追加する必要があります。詳細は、「Red Hat Quay on OpenShift Container Platform への認証局のさらなる追加」を参照してください。
      4
      <ssl.key>ssl.key ファイルです。
  3. オプション: 次のコマンドを入力して、custom-ssl-config-bundle-secret.yaml ファイルの内容を確認できます。

    $ cat custom-ssl-config-bundle-secret.yaml

    出力例

    apiVersion: v1
    data:
      config.yaml: QUxMT1dfUFVMTFNfV0lUSE9VVF9TVFJJQ1RfTE9HR0lORzogZmFsc2UKQVVUSEVOVElDQVRJT05fVFlQRTogRGF0YWJhc2UKREVGQVVMVF9UQUdfRVhQSVJBVElPTjogMncKRElTVFJJQlVURURfU1R...
      ssl.cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVYakNDQTBhZ0F3SUJBZ0lVTUFBRk1YVWlWVHNoMGxNTWI3U1l0eFV5eTJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZZ3hDekFKQmdOVkJBWVR...
      extra_ca_cert_<name-of-certificate>:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVYakNDQTBhZ0F3SUJBZ0lVTUFBRk1YVWlWVHNoMGxNTWI3U1l0eFV5eTJjd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2dZZ3hDe...
      ssl.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRQ2c0VWxZOVV1SVJPY1oKcFhpZk9MVEdqaS9neUxQMlpiMXQ...
    kind: Secret
    metadata:
      creationTimestamp: null
      name: custom-ssl-config-bundle-secret
      namespace: <namespace>

  4. 次のコマンドを入力して、configBundleSecret リソースを作成します。

    $ oc create -n <namespace> -f custom-ssl-config-bundle-secret.yaml

    出力例

    secret/custom-ssl-config-bundle-secret created

  5. 次のコマンドを入力して、QuayRegistry YAML ファイルを更新して、custom-ssl-config-bundle-secret オブジェクトを参照します。

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"custom-ssl-config-bundle-secret"}}'

    出力例

    quayregistry.quay.redhat.com/example-registry patched

  6. 次のコマンドを入力して、QuayRegistry YAML の tls コンポーネントを False に設定します。

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"components":[{"kind":"tls","managed":false}]}}'

    出力例

    quayregistry.quay.redhat.com/example-registry patched

  7. 次のコマンドを入力して、QuayRegistry YAML ファイルが更新されてカスタム SSL configBundleSecret リソースが使用されるようになり、および tls リソースが False に設定されていることを確認します。

    $ oc get quayregistry <registry_name> -n <namespace> -o yaml

    出力例

    # ...
      configBundleSecret: custom-ssl-config-bundle-secret
    # ...
    spec:
      components:
      - kind: tls
        managed: false
    # ...

検証

  • 次のコマンドを入力して、サーバーとポートへの TLS 接続を確認します。

    $  openssl s_client -connect <quay-server.example.com>:443

    出力例

    # ...
    SSL-Session:
        Protocol  : TLSv1.3
        Cipher    : TLS_AES_256_GCM_SHA384
        Session-ID: 0E995850DC3A8EB1A838E2FF06CE56DBA81BD8443E7FA05895FBD6FBDE9FE737
        Session-ID-ctx:
        Resumption PSK: 1EA68F33C65A0F0FA2655BF9C1FE906152C6E3FEEE3AEB6B1B99BA7C41F06077989352C58E07CD2FBDC363FA8A542975
        PSK identity: None
        PSK identity hint: None
        SRP username: None
        TLS session ticket lifetime hint: 7200 (seconds)
    
    # ...

第2章 Red Hat Quay と SQL 間の証明書ベースの認証

Red Hat Quay 管理者は、クライアント側認証用に独自の SSL/TLS 証明書を提供することで、Red Hat Quay と SQL (PostgreSQL および GCP CloudSQL) 間の証明書ベースの認証を設定できます。これにより、セキュリティーが強化され、Red Hat Quay レジストリーの自動化が容易になります。

次のセクションでは、Red Hat Quay と PostgreSQL、および Red Hat Quay と CloudSQL の間で証明書ベースの認証を設定する方法を説明します。

2.1. SQL による証明書ベースの認証の設定

次の手順では、安全なクライアント側証明書を使用して、Red Hat Quay を SQL データベースに接続する方法を示します。この方法では、信頼できる認証局 (CA) に対して SQL サーバーの証明書を検証するため、証明書信頼検証を通じて接続と認証の両方が確保されます。これにより、Red Hat Quay と SQL サーバー間の接続のセキュリティーが強化され、デプロイメントの自動化が簡素化されます。この例では Google Cloud Platform の CloudSQL を使用していますが、この手順は PostgreSQL やその他のサポートされているデータベースにも適用されます。

前提条件

  • カスタム認証局 (CA) が生成され、CloudSQL データベースとの SSL 接続を生成するために使用される PEM 形式の SSL/TLS 証明書とキーが利用可能となっている。詳細は、Red Hat Quay の SSL および TLS を参照してください。
  • base64 で元の設定バンドルを config.yaml ファイルにデコードしている。詳細は、既存の設定のダウンロード を参照してください。
  • 外部で管理されている PostgreSQL または CloudSQL データベースを使用している。詳細は、DB_URI 変数が設定された 既存の PostgreSQL データベースの使用 を参照してください。
  • 外部で管理されている PostgreSQL または CloudSQL データベースが SSL/TLS 用に設定されている。
  • QuayRegistry CRD の postgres コンポーネントが managed: false に設定され、CloudSQL データベースが DB_URI 設定変数で設定されている。次の手順では、postgresql://<cloudsql_username>:<dbpassword>@<database_host>:<port>/<database_name> を使用します。

手順

  1. CloudSQL データベースの CA と SSL/TLS 証明書およびキーを生成し、それらが .pem 形式であることを確認したら、CloudSQL サーバーへの SSL 接続をテストします。

    1. 次のコマンドを入力して、CloudSQL サーバーへの接続を開始します。

      $ psql "sslmode=verify-ca sslrootcert=<ssl_server_certificate_authority>.pem sslcert=<ssl_client_certificate>.pem sslkey=<ssl_client_key>.pem hostaddr=<database_host> port=<5432> user=<cloudsql_username> dbname=<cloudsql_database_name>"
  2. Red Hat Quay ディレクトリーで、次のコマンドを実行して、新しい YAML ファイル (例: quay-config-bundle.yaml) を作成します。

    $ touch quay-config-bundle.yaml
  3. 次のコマンドを入力して、postgresql-client-certs リソースを作成します。

    $ oc -n <quay_namespace> create secret generic postgresql-client-certs \
    --from-file config.yaml=<path/to/config.yaml> 
    1
    
    --from-file=tls.crt=<path/to/ssl_client_certificate.pem> 
    2
    
    --from-file=tls.key=<path/to/ssl_client_key.pem> 
    3
    
    --from-file=ca.crt=<path/to/ssl_server_certificate.pem> 
    4
    1
    ` <config.yaml>` は base64 でデコードされた config.yaml ファイルです。
    2
    ここで、ssl_client_certificate.pem.pem 形式の SSL 証明書です。
    3
    ここで、ssl_client_key.pem.pem 形式の SSL キーです。
    4
    ここで、ssl_server_certificate.pem.pem 形式の SSL ルート CA です。
  4. `quay-config-bundle.yaml ファイルを編集して、次のデータベース接続設定を含めます。

    重要
    • DB_CONNECTION_ARGS 変数に含まれる情報 (例: sslmodesslrootcertsslcertsslkey) は、DB_URI 変数に追加された情報と一致する 必要があります。一致しない場合は、接続に失敗する可能性があります。
    • カスタムファイル名またはパスを指定することはできません。sslrootcertsslcert、および sslkey の証明書ファイルパスはハードコードされたデフォルトであり、Kubernetes シークレットから Quay Pod にマウントされます。次の命名規則に従わないと、接続が失敗します。
    DB_CONNECTION_ARGS:
        autorollback: true
        sslmode: verify-ca 
    1
    
        sslrootcert: /.postgresql/root.crt 
    2
    
        sslcert: /.postgresql/postgresql.crt 
    3
    
        sslkey: /.postgresql/postgresql.key 
    4
    
        threadlocals: true 
    5
    
    DB_URI: postgresql://<dbusername>:<dbpassword>@<database_host>:<port>/<database_name>?sslmode=verify-full&sslrootcert=/.postgresql/root.crt&sslcert=/.postgresql/postgresql.crt&sslkey=/.postgresql/postgresql.key 
    6
    1
    verify-ca を使用すると、データベース接続で SSL/TLS が必ず使用され、信頼できる CA に対してサーバー証明書が検証されます。これは、信頼できる CA 証明書と自己署名 CA 証明書の両方で機能します。ただし、このモードではサーバーのホスト名は検証されません。完全なホスト名と証明書の検証には、verify-full を使用します。使用可能な設定オプションの詳細は、PostgreSQL SSL/TLS 接続引数 を参照してください。
    2
    root.crt ファイルには、CloudSQL データベースとの SSL/TLS 接続を検証するために使用されるルート証明書が含まれています。このファイルは、Kubernetes シークレットから Quay Pod にマウントされています。
    3
    postgresql.crt ファイルには、CloudSQL データベースへの接続を認証するために使用されるクライアント証明書が含まれています。このファイルは、Kubernetes シークレットから Quay Pod にマウントされています。
    4
    postgresql.key ファイルには、クライアント証明書に関連付けられた秘密鍵が含まれています。このファイルは、Kubernetes シークレットから Quay Pod にマウントされています。
    5
    接続の自動ロールバックを有効にします。
    6
    CloudSQL データベースにアクセスする URI。sslmode タイプ、root.crtpostgresql.crtpostgresql.key ファイルを追加する必要があります。DB_URI に含まれる SSL/TLS 情報は、DB_CONNECTION_ARGS で提供される情報と一致する必要があります。CloudSQL を使用している場合は、この変数にデータベースのユーザー名とパスワードを含める必要があります。
  5. 次のコマンドを入力して、configBundleSecret リソースを作成します。

    $ oc create -n <namespace> -f quay-config-bundle.yaml

    出力例

    secret/quay-config-bundle created

  6. 次のコマンドを入力して、QuayRegistry YAML ファイルを更新し、quay-config-bundle オブジェクトを参照します。

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"quay-config-bundle"}}'

    出力例

    quayregistry.quay.redhat.com/example-registry patched

  7. 次のコマンドを入力して、QuayRegistry YAML ファイルが更新され、追加の CA 証明書 configBundleSecret リソースが使用されるようにします。

    $ oc get quayregistry <registry_name> -n <namespace> -o yaml

    出力例

    # ...
      configBundleSecret: quay-config-bundle
    # ...

第3章 Red Hat Quay の認証局の追加

認証局 (CA) は、Red Hat Quay によって、ODIC プロバイダー、LDAP プロバイダー、ストレージプロバイダーなどの外部サービスとの SSL/TLS 接続を検証するために使用されます。

次のセクションでは、デプロイメントの種類に応じて、追加の CA を Red Hat Quay にアップロードする方法を説明します。

3.1. Red Hat Quay コンテナーへの認証局の追加

extra_ca_certs ディレクトリーは、信頼できる証明書のセットを拡張するために認証局 (CA) を追加で保存できるディレクトリーです。これらの証明書は、Red Hat Quay によって外部サービスとの SSL/TLS 接続を検証するために使用されます。Red Hat Quay をデプロイするときに、必要な CA をこのディレクトリーに配置して、LDAP、OIDC、ストレージシステムなどのサービスへの接続が適切に保護され、検証されるようにすることができます。

スタンドアロンの Red Hat Quay デプロイメントの場合は、このディレクトリーを作成し、追加の CA 証明書をそのディレクトリーにコピーする必要があります。

前提条件

  • 希望するサービス用の CA があります。

手順

  1. 次のコマンドを入力して、コンテナーに追加する証明書を表示します。

    $ cat storage.crt

    出力例

    -----BEGIN CERTIFICATE-----
    MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV...
    -----END CERTIFICATE-----

  2. 次のコマンドを入力して、Red Hat Quay ディレクトリーの /config フォルダーに extra_ca_certs を作成します。

    $ mkdir -p /path/to/quay_config_folder/extra_ca_certs
  3. CA ファイルを extra_ca_certs フォルダーにコピーします。以下に例を示します。

    $ cp storage.crt /path/to/quay_config_folder/extra_ca_certs/
  4. 次のコマンドを入力して、extra_ca_certs フォルダー内に storage.crt ファイルが存在することを確認します。

    $ tree /path/to/quay_config_folder/extra_ca_certs

    出力例

    /path/to/quay_config_folder/extra_ca_certs
    ├── storage.crt----

  5. 次のコマンドを入力して、QuayCONTAINER ID を取得します。

    $ podman ps

    出力例

    CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS
    5a3e82c4a75f        <registry>/<repo>/quay:{productminv} "/sbin/my_init"          24 hours ago        Up 18 hours         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 443/tcp   grave_keller

  6. 次のコマンドを入力してコンテナーを再起動します。

    $ podman restart 5a3e82c4a75f
  7. 次のコマンドを実行して、証明書がコンテナー namespace にコピーされたことを確認します。

    $ podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pem

    出力例

    -----BEGIN CERTIFICATE-----
    MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV...
    -----END CERTIFICATE-----

3.2. Red Hat Quay on OpenShift Container Platform への認証局のさらなる追加

Red Hat Quay on OpenShift Container Platform では、extra_ca_certs 設定フィールドを使用して追加の認証局 (CA) が CA ディレクトリーに入力され、その後、CA がシステムトラストバンドルに追加されます。これらの証明書は、LDAP、OIDC、ストレージシステムなどの外部サービスとの SSL/TLS 接続を検証するために Red Hat Quay によって使用されます。

OpenShift Container Platform に Red Hat Quay をデプロイまたは再デプロイする場合、外部サービスが適切に保護されて検証されるように、1 つまたは複数の CA を CA ディレクトリーに追加できます。OpenShift Container Platform デプロイメント上の Red Hat Quay では、extra_ca_certs 設定フィールドを config.yaml ファイルに手動で追加し、config.yaml を OpenShift Container Platform に再アップロードする必要があります。

以下の手順では、既存の設定ファイルをダウンロードし、OpenShift Container Platform デプロイメント上の Red Hat Quay に CA をさらに追加して、設定ファイルを再アップロードする方法を示します。

3.2.1. CLI を使用して設定ファイルを変更する

CLI を使用して既存の設定をダウンロードすることにより、configBundleSecret によって保存されている config.yaml ファイルを変更できます。変更を加えた後、configBundleSecret リソースを再度アップロードして、Red Hat Quay レジストリーに変更を加えることができます。

注記

configBundleSecret リソースによって保存される config.yaml ファイルを変更するには、既存の設定ファイルを base64 でデコードした後に変更をアップロードするという、複数のステップからなる手順が必要です。ほとんどの場合、OpenShift Container Platform Web コンソールを使用して config.yaml ファイルに変更を加える方が簡単です。

前提条件

  • 管理者権限を持つユーザーとして OpenShift Container Platform クラスターにログインしている。

手順

  1. 次のコマンドを入力して、QuayRegistry リソースを記述します。

    $ oc describe quayregistry -n <quay_namespace>
    # ...
      Config Bundle Secret:  example-registry-config-bundle-v123x
    # ...
  2. 次のコマンドを入力してシークレットデータを取得します。

    $ oc get secret -n <quay_namespace> <example-registry-config-bundle-v123x> -o jsonpath='{.data}'

    出力例

    {
        "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo="
    }

  3. >> config.yaml フラグを渡して、データをカレントディレクトリーの YAML ファイルにデコードします。以下に例を示します。

    $ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode >> config.yaml
  4. config.yaml ファイルに必要な変更を加え、ファイルを config.yaml として保存します。
  5. 次のコマンドを入力して、新しい configBundleSecret YAML を作成します。

    $ touch <new_configBundleSecret_name>.yaml
  6. 次のコマンドを入力し、config.yaml ファイルを渡して新しい configBundleSecret リソースを作成します。

    $ oc -n <namespace> create secret generic <secret_name> \
      --from-file=config.yaml=</path/to/config.yaml> \ 
    1
    
      --dry-run=client -o yaml > <new_configBundleSecret_name>.yaml
    1
    <config.yaml>base64 でデコード された config.yaml ファイルです。
  7. 次のコマンドを入力して、configBundleSecret リソースを作成します。

    $ oc create -n <namespace> -f <new_configBundleSecret_name>.yaml

    出力例

    secret/config-bundle created

  8. 次のコマンドを入力して、新しい configBundleSecret オブジェクトを参照するように QuayRegistry YAML ファイルを更新します。

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"<new_configBundleSecret_name>"}}'

    出力例

    quayregistry.quay.redhat.com/example-registry patched

検証

  1. QuayRegistry CR が新しい configBundleSecret で更新されていることを確認します。

    $ oc describe quayregistry -n <quay_namespace>

    出力例

    # ...
      Config Bundle Secret: <new_configBundleSecret_name>
    # ...

    レジストリーにパッチを適用すると、Red Hat Quay Operator が自動的に変更を調整します。

3.2.2. Red Hat Quay on OpenShift Container Platform への認証局のさらなる追加

次の例は、OpenShift Container Platform デプロイメント上の Red Hat Quay に認証局をさらに追加する方法を示しています。

前提条件

  • base64 で元の設定バンドルを config.yaml ファイルにデコードしている。詳細は、既存の設定のダウンロード を参照してください。
  • 認証局 (CA) ファイルがある。

手順

  1. 新しい YAML ファイル (例: extra-ca-certificate-config-bundle-secret.yaml) を作成します。

    $ touch extra-ca-certificate-config-bundle-secret.yaml
  2. extra-ca-certificate-config-bundle-secret リソースを作成します。

    1. 次のコマンドを入力してリソースを作成します。

      $ oc -n <namespace> create secret generic extra-ca-certificate-config-bundle-secret \
        --from-file=config.yaml=</path/to/config.yaml> \ 
      1
      
        --from-file=extra_ca_cert_<name-of-certificate-one>=<path/to/certificate_one> \ 
      2
      
        --from-file=extra_ca_cert_<name-of-certificate-two>=<path/to/certificate_two> \ 
      3
      
        --from-file=extra_ca_cert_<name-of-certificate-three>=<path/to/certificate_three> \ 
      4
      
        --dry-run=client -o yaml > extra-ca-certificate-config-bundle-secret.yaml
      1
      <config.yaml>base64 でデコード された config.yaml ファイルです。
      2
      システムトラストバンドルに余分に追加される CA ファイル。
      3
      オプション: システムトラストバンドルに追加される 2 番目の CA ファイル。
      4
      オプション: システムトラストバンドルに追加される 3 番目の CA ファイル。
  3. オプション: 次のコマンドを入力すると、extra-ca-certificate-config-bundle-secret.yaml ファイルの内容を確認できます。

    $ cat extra-ca-certificate-config-bundle-secret.yaml

    出力例

    apiVersion: v1
    data:
      config.yaml: QUxMT1dfUFVMTFNfV0lUSE9VVF9TVFJJQ1RfTE9HR0lORzogZmFsc2UKQVVUSEVOVElDQVRJT05fVFlQRTogRGF0YWJhc2UKREVGQVVMVF9UQUdfRVhQSVJBVElPTjogMncKUFJFRkVSU...
      extra_ca_cert_certificate-one: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQyVENDQXNHZ0F3SUJBZ0lVS2xOai90VUJBZHBkNURjYkdRQUo4anRuKzd3d0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZERUxNQWtHQ...
      extra_ca_cert_certificate-three: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ0ekNDQXN1Z0F3SUJBZ0lVQmJpTXNUeExjM0s4ODNWby9GTThsWXlOS2lFd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZERUxNQWtHQ...
      extra_ca_cert_certificate-two: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ0ekNDQXN1Z0F3SUJBZ0lVVFVPTXZ2YVdFOFRYV3djYTNoWlBCTnV2QjYwd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZERUxNQWtHQ...
    kind: Secret
    metadata:
      creationTimestamp: null
      name: custom-ssl-config-bundle-secret
      namespace: <namespace>

  4. 次のコマンドを入力して、configBundleSecret リソースを作成します。

    $ oc create -n <namespace> -f extra-ca-certificate-config-bundle-secret.yaml

    出力例

    secret/extra-ca-certificate-config-bundle-secret created

  5. 次のコマンドを入力して、QuayRegistry YAML ファイルを更新し、extra-ca-certificate-config-bundle-secret オブジェクトを参照します。

    $ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"extra-ca-certificate-config-bundle-secret"}}'

    出力例

    quayregistry.quay.redhat.com/example-registry patched

  6. 次のコマンドを入力して、QuayRegistry YAML ファイルが更新され、追加の CA 証明書 configBundleSecret リソースが使用されるようにします。

    $ oc get quayregistry <registry_name> -n <namespace> -o yaml

    出力例

    # ...
      configBundleSecret: extra-ca-certificate-config-bundle-secret
    # ...

3.3. Red Hat Quay が Kubernetes にデプロイされている場合のカスタム SSL/TLS 証明書の追加

Kubernetes にデプロイすると、Red Hat Quay は config アセットを保存するボリュームとしてシークレットにマウントします。現在、これによりスーパーユーザーパネルの証明書のアップロード機能が中断されます。

一時的な回避策として、Red Hat Quay の デプロイ後 に、base64 でエンコードされた証明書をシークレットに追加できます。

Red Hat Quay が Kubernetes にデプロイされている場合は、次の手順を使用してカスタム SSL/TLS 証明書を追加します。

前提条件

  • Red Hat Quay がデプロイされている。
  • カスタムの ca.crt ファイルがある。

手順

  1. 次のコマンドを入力して、SSL/TLS 証明書の内容を Base64 でエンコードします。

    $ cat ca.crt | base64 -w 0

    出力例

    ...c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=

  2. 次の kubectl コマンドを入力して、quay-enterprise-config-secret ファイルを編集します。

    $ kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secret
  3. 証明書のエントリーを追加し、base64 でエンコードされた完全なストリンガーをエントリーの下に貼り付けます。以下に例を示します。

      custom-cert.crt:
    c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
  4. kubectl delete コマンドを使用して、すべての Red Hat Quay Pod を削除します。以下に例を示します。

    $ kubectl delete pod quay-operator.v3.7.1-6f9d859bd-p5ftc quayregistry-clair-postgres-7487f5bd86-xnxpr quayregistry-quay-app-upgrade-xq2v6  quayregistry-quay-database-859d5445ff-cqthr quayregistry-quay-redis-84f888776f-hhgms

    その後、Red Hat Quay デプロイメントにより、Pod を新しい証明書データに置き換えるスケジュールが自動的に設定されます。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る