Red Hat Quay のセキュリティー保護
はじめに リンクのコピーリンクがクリップボードにコピーされました!
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 による通信を保護できます。
手順
次のコマンドを入力して、ルート CA キーを生成します。
openssl genrsa -out rootCA.key 2048
$ openssl genrsa -out rootCA.key 2048Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ルート CA 証明書を生成します。
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーのホスト名など、証明書の要求に組み込まれる情報を入力します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力してサーバーキーを生成します。
openssl genrsa -out ssl.key 2048
$ openssl genrsa -out ssl.key 2048Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、署名リクエストを生成します。
openssl req -new -key ssl.key -out ssl.csr
$ openssl req -new -key ssl.key -out ssl.csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーのホスト名など、証明書の要求に組み込まれる情報を入力します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のようにサーバーのホスト名を指定して、設定ファイルの
openssl.cnfを作成します。openssl.cnfファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 設定ファイルを使用して、証明書
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
$ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnfCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、作成した証明書とファイルを確認します。
ls /path/to/certificates
$ ls /path/to/certificatesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
rootCA.key ssl-bundle.cert ssl.key custom-ssl-config-bundle-secret.yaml rootCA.pem ssl.cert openssl.cnf rootCA.srl ssl.csr
rootCA.key ssl-bundle.cert ssl.key custom-ssl-config-bundle-secret.yaml rootCA.pem ssl.cert openssl.cnf rootCA.srl ssl.csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2. スタンドアロン Red Hat Quay デプロイメント用の SSL/TLS の設定 リンクのコピーリンクがクリップボードにコピーされました!
スタンドアロンの Red Hat Quay デプロイメントの場合、コマンドラインインターフェイスを使用し、config.yaml ファイルを手動で更新して、SSL/TLS 証明書を設定する必要があります。
1.2.1. コマンドラインインターフェイスを使用してカスタム SSL/TLS 証明書を設定する リンクのコピーリンクがクリップボードにコピーされました!
SSL/TLS は、コマンドラインインターフェイス (CLI) を使用して config.yaml ファイルを手動で更新することで設定する必要があります。
前提条件
- 認証局を作成して証明書に署名している。
手順
証明書ファイルとプライマリーキーファイルを設定ディレクトリーにコピーして、それぞれ
ssl.certとssl.keyという名前が付けられていることを確認します。cp ~/ssl.cert ~/ssl.key /path/to/configuration_directory
cp ~/ssl.cert ~/ssl.key /path/to/configuration_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、設定ディレクトリーに移動します。
cd /path/to/configuration_directory
$ cd /path/to/configuration_directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow config.yamlファイルを編集し、Red Hat Quay で SSL/TLS を処理するように指定します。config.yamlファイルの例# ... SERVER_HOSTNAME: <quay-server.example.com> ... PREFERRED_URL_SCHEME: https # ...
# ... SERVER_HOSTNAME: <quay-server.example.com> ... PREFERRED_URL_SCHEME: https # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 次のコマンドを入力して、
rootCA.pemファイルの内容をssl.certファイルの末尾に追加します。cat rootCA.pem >> ssl.cert
$ cat rootCA.pem >> ssl.certCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
Quayコンテナーを停止します。sudo podman stop <quay_container_name>
$ sudo podman stop <quay_container_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力してレジストリーを再起動します。
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.13.5
$ 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.13.5Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2.2. 認証局を信頼するように Podman を設定する リンクのコピーリンクがクリップボードにコピーされました!
Podman は、/etc/containers/certs.d/ と /etc/docker/certs.d/ の 2 つのパスを使用して認証局 (CA) ファイルを検出します。CA を信頼するように Podman を設定するには、次の手順を使用します。
手順
ルート 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
$ sudo cp rootCA.pem /etc/containers/certs.d/quay-server.example.com/ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Quay レジストリーにログインするときに
--tls-verify=falseオプションを使用する必要がなくなったことを確認します。sudo podman login quay-server.example.com
$ sudo podman login quay-server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Login Succeeded!
Login Succeeded!Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2.3. 認証局を信頼するようにシステムを設定 リンクのコピーリンクがクリップボードにコピーされました!
認証局を信頼するようにシステムを設定するには、次の手順を使用します。
手順
次のコマンドを入力して、
rootCA.pemファイルをシステム全体の統合トラストストアにコピーします。sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/
$ sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、システム全体のトラストストア設定を更新します。
sudo update-ca-trust extract
$ sudo update-ca-trust extractCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
trust listコマンドを使用して、Quayサーバーが設定されていることを確認できます。trust list | grep quay
$ trust list | grep quay label: quay-server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow https://quay-server.example.comでレジストリーを参照すると、接続が安全であることを示すロックアイコンが表示されます。
rootCA.pemファイルをシステム全体の信頼から削除するには、ファイルを削除して設定を更新します。sudo rm /etc/pki/ca-trust/source/anchors/rootCA.pem
$ sudo rm /etc/pki/ca-trust/source/anchors/rootCA.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow sudo update-ca-trust extract
$ sudo update-ca-trust extractCopy to Clipboard Copied! Toggle word wrap Toggle overflow trust list | grep quay
$ trust list | grep quayCopy to Clipboard Copied! Toggle word wrap Toggle overflow
詳細は、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.key と ssl.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 証明書とキーを生成している。
手順
新しい YAML ファイル (例:
custom-ssl-config-bundle-secret.yaml)を作成します。touch custom-ssl-config-bundle-secret.yaml
$ touch custom-ssl-config-bundle-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow custom-ssl-config-bundle-secretリソースを作成します。次のコマンドを入力してリソースを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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ファイルです。
オプション: 次のコマンドを入力して、
custom-ssl-config-bundle-secret.yamlファイルの内容を確認できます。cat custom-ssl-config-bundle-secret.yaml
$ cat custom-ssl-config-bundle-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
configBundleSecretリソースを作成します。oc create -n <namespace> -f custom-ssl-config-bundle-secret.yaml
$ oc create -n <namespace> -f custom-ssl-config-bundle-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
secret/custom-ssl-config-bundle-secret created
secret/custom-ssl-config-bundle-secret createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistryYAML ファイルを更新して、custom-ssl-config-bundle-secretオブジェクトを参照します。oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"custom-ssl-config-bundle-secret"}}'$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"custom-ssl-config-bundle-secret"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
quayregistry.quay.redhat.com/example-registry patched
quayregistry.quay.redhat.com/example-registry patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistryYAML のtlsコンポーネントをfalseに設定します。oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"components":[{"kind":"tls","managed":false}]}}'$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"components":[{"kind":"tls","managed":false}]}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
quayregistry.quay.redhat.com/example-registry patched
quayregistry.quay.redhat.com/example-registry patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistryYAML ファイルが更新されてカスタム SSLconfigBundleSecretリソースが使用されるようになり、およびtlsリソースがfalseに設定されていることを確認します。oc get quayregistry <registry_name> -n <namespace> -o yaml
$ oc get quayregistry <registry_name> -n <namespace> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のコマンドを入力して、サーバーとポートへの TLS 接続を確認します。
openssl s_client -connect <quay-server.example.com>:443
$ openssl s_client -connect <quay-server.example.com>:443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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 用に設定されている。
-
QuayRegistryCRD のpostgresコンポーネントがmanaged: falseに設定され、CloudSQL データベースがDB_URI設定変数で設定されている。次の手順では、postgresql://<cloudsql_username>:<dbpassword>@<database_host>:<port>/<database_name>を使用します。
手順
CloudSQL データベースの CA と SSL/TLS 証明書およびキーを生成し、それらが
.pem形式であることを確認したら、CloudSQL サーバーへの SSL 接続をテストします。次のコマンドを入力して、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>"
$ 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>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Red Hat Quay ディレクトリーで、次のコマンドを実行して、新しい YAML ファイル (例:
quay-config-bundle.yaml)を作成します。touch quay-config-bundle.yaml
$ touch quay-config-bundle.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
postgresql-client-certsリソースを作成します。oc -n <quay_namespace> create secret generic postgresql-client-certs \ --from-file config.yaml=<path/to/config.yaml>
$ 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 Copy to Clipboard Copied! Toggle word wrap Toggle overflow `quay-config-bundle.yamlファイルを編集して、次のデータベース接続設定を含めます。重要-
DB_CONNECTION_ARGS変数に含まれる情報 (例:sslmode、sslrootcert、sslcert、sslkey) は、DB_URI変数に追加された情報と一致する 必要があります。一致しない場合は、接続に失敗する可能性があります。 -
カスタムファイル名またはパスを指定することはできません。
sslrootcert、sslcert、およびsslkeyの証明書ファイルパスはハードコードされたデフォルトであり、Kubernetes シークレットからQuayPod にマウントされます。次の命名規則に従わないと、接続が失敗します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
verify-caを使用すると、データベース接続で SSL/TLS が必ず使用され、信頼できる CA に対してサーバー証明書が検証されます。これは、信頼できる CA 証明書と自己署名 CA 証明書の両方で機能します。ただし、このモードではサーバーのホスト名は検証されません。完全なホスト名と証明書の検証には、verify-fullを使用します。使用可能な設定オプションの詳細は、PostgreSQL SSL/TLS 接続引数 を参照してください。- 2
root.crtファイルには、CloudSQL データベースとの SSL/TLS 接続を検証するために使用されるルート証明書が含まれています。このファイルは、Kubernetes シークレットからQuayPod にマウントされています。- 3
postgresql.crtファイルには、CloudSQL データベースへの接続を認証するために使用されるクライアント証明書が含まれています。このファイルは、Kubernetes シークレットからQuayPod にマウントされています。- 4
postgresql.keyファイルには、クライアント証明書に関連付けられた秘密鍵が含まれています。このファイルは、Kubernetes シークレットからQuayPod にマウントされています。- 5
- 接続の自動ロールバックを有効にします。
- 6
- CloudSQL データベースにアクセスする URI。
sslmodeタイプ、root.crt、postgresql.crt、postgresql.keyファイルを追加する必要があります。DB_URIに含まれる SSL/TLS 情報は、DB_CONNECTION_ARGSで提供される情報と一致する必要があります。CloudSQL を使用している場合は、この変数にデータベースのユーザー名とパスワードを含める必要があります。
-
次のコマンドを入力して、
configBundleSecretリソースを作成します。oc create -n <namespace> -f quay-config-bundle.yaml
$ oc create -n <namespace> -f quay-config-bundle.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
secret/quay-config-bundle created
secret/quay-config-bundle createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistryYAML ファイルを更新し、quay-config-bundleオブジェクトを参照します。oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"quay-config-bundle"}}'$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"quay-config-bundle"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
quayregistry.quay.redhat.com/example-registry patched
quayregistry.quay.redhat.com/example-registry patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistryYAML ファイルが更新され、追加の CA 証明書configBundleSecretリソースが使用されるようにします。oc get quayregistry <registry_name> -n <namespace> -o yaml
$ oc get quayregistry <registry_name> -n <namespace> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
... ...
# ... configBundleSecret: quay-config-bundle # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第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 があります。
手順
次のコマンドを入力して、コンテナーに追加する証明書を表示します。
cat storage.crt
$ cat storage.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
-----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV... -----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV... -----END CERTIFICATE-----Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、Red Hat Quay ディレクトリーの
/configフォルダーにextra_ca_certsを作成します。mkdir -p /path/to/quay_config_folder/extra_ca_certs
$ mkdir -p /path/to/quay_config_folder/extra_ca_certsCopy to Clipboard Copied! Toggle word wrap Toggle overflow CA ファイルを
extra_ca_certsフォルダーにコピーします。以下に例を示します。cp storage.crt /path/to/quay_config_folder/extra_ca_certs/
$ cp storage.crt /path/to/quay_config_folder/extra_ca_certs/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
extra_ca_certsフォルダー内にstorage.crtファイルが存在することを確認します。tree /path/to/quay_config_folder/extra_ca_certs
$ tree /path/to/quay_config_folder/extra_ca_certsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
/path/to/quay_config_folder/extra_ca_certs ├── storage.crt----
/path/to/quay_config_folder/extra_ca_certs ├── storage.crt----Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayのCONTAINER IDを取得します。podman ps
$ podman psCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
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_kellerCONTAINER 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_kellerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力してコンテナーを再起動します。
podman restart 5a3e82c4a75f
$ podman restart 5a3e82c4a75fCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、証明書がコンテナー名前空間にコピーされたことを確認します。
podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pem
$ podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
-----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV... -----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV... -----END CERTIFICATE-----Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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. 既存設定のダウンロード リンクのコピーリンクがクリップボードにコピーされました!
次の手順では、Config Bundle Secret を見つけて既存の設定をダウンロードする方法を示します。
手順
次のコマンドを入力して、
QuayRegistryリソースを記述します。oc describe quayregistry -n <quay_namespace>
$ oc describe quayregistry -n <quay_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... ...
# ... Config Bundle Secret: example-registry-config-bundle-v123x # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力してシークレットデータを取得します。
oc get secret -n <quay_namespace> <example-registry-config-bundle-v123x> -o jsonpath='{.data}'$ oc get secret -n <quay_namespace> <example-registry-config-bundle-v123x> -o jsonpath='{.data}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{ "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo=" }{ "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo=" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力してデータをデコードします。
echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode
$ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
>> config.yamlフラグを渡すことで、データを現在のディレクトリーの YAML ファイルにエクスポートできます。以下に例を示します。echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode >> config.yaml
$ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode >> config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2. Red Hat Quay on OpenShift Container Platform への認証局のさらなる追加 リンクのコピーリンクがクリップボードにコピーされました!
次の例は、OpenShift Container Platform デプロイメント上の Red Hat Quay に認証局をさらに追加する方法を示しています。
前提条件
-
base64 で元の設定バンドルを
config.yamlファイルにデコードしている。詳細は、既存の設定のダウンロード を参照してください。 - 認証局 (CA) ファイルがある。
手順
新しい YAML ファイル (例:
extra-ca-certificate-config-bundle-secret.yaml)を作成します。touch extra-ca-certificate-config-bundle-secret.yaml
$ touch extra-ca-certificate-config-bundle-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow extra-ca-certificate-config-bundle-secretリソースを作成します。オプション: 次のコマンドを入力すると、
extra-ca-certificate-config-bundle-secret.yamlファイルの内容を確認できます。cat extra-ca-certificate-config-bundle-secret.yaml
$ cat extra-ca-certificate-config-bundle-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
configBundleSecretリソースを作成します。oc create -n <namespace> -f extra-ca-certificate-config-bundle-secret.yaml
$ oc create -n <namespace> -f extra-ca-certificate-config-bundle-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
secret/extra-ca-certificate-config-bundle-secret created
secret/extra-ca-certificate-config-bundle-secret createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistryYAML ファイルを更新し、extra-ca-certificate-config-bundle-secretオブジェクトを参照します。oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"extra-ca-certificate-config-bundle-secret"}}'$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"extra-ca-certificate-config-bundle-secret"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
quayregistry.quay.redhat.com/example-registry patched
quayregistry.quay.redhat.com/example-registry patchedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistryYAML ファイルが更新され、追加の CA 証明書configBundleSecretリソースが使用されるようにします。oc get quayregistry <registry_name> -n <namespace> -o yaml
$ oc get quayregistry <registry_name> -n <namespace> -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
... ...
# ... configBundleSecret: extra-ca-certificate-config-bundle-secret # ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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ファイルがある。
手順
次のコマンドを入力して、SSL/TLS 証明書の内容を Base64 でエンコードします。
cat ca.crt | base64 -w 0
$ cat ca.crt | base64 -w 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
...c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
...c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の
kubectlコマンドを入力して、quay-enterprise-config-secretファイルを編集します。kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secret
$ kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書のエントリーを追加し、
base64でエンコードされた完全なストリンガーをエントリーの下に貼り付けます。以下に例を示します。custom-cert.crt: c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
custom-cert.crt: c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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-hhgmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow その後、Red Hat Quay デプロイメントにより、Pod を新しい証明書データに置き換えるスケジュールが自動的に設定されます。