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 2048
Copy 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.pem
Copy 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 2048
Copy 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.csr
Copy 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.cnf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、作成した証明書とファイルを確認します。
ls /path/to/certificates
$ ls /path/to/certificates
Copy 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.csr
Copy 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_directory
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、設定ディレクトリーに移動します。
cd /path/to/configuration_directory
$ cd /path/to/configuration_directory
Copy 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.cert
Copy 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.15.1
$ 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.15.1
Copy 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.crt
Copy 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.com
Copy 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 extract
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
trust list
コマンドを使用して、Quay
サーバーが設定されていることを確認できます。trust list | grep quay
$ trust list | grep quay label: quay-server.example.com
Copy 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.pem
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sudo update-ca-trust extract
$ sudo update-ca-trust extract
Copy to Clipboard Copied! Toggle word wrap Toggle overflow trust list | grep quay
$ trust list | grep quay
Copy 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.yaml
Copy 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.yaml
Copy 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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
secret/custom-ssl-config-bundle-secret created
secret/custom-ssl-config-bundle-secret created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistry
YAML ファイルを更新して、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 patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistry
YAML の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 patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistry
YAML ファイルが更新され、カスタム SSLconfigBundleSecret
リソースが使用されるように設定されていること、およびtls
リソースがFalse
に設定されていることを確認します。oc get quayregistry <registry_name> -n <namespace> -o yaml
$ oc get quayregistry <registry_name> -n <namespace> -o yaml
Copy 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>:443
Copy 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 用に設定されている。
-
QuayRegistry
CRD の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.yaml
Copy 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 シークレットからQuay
Pod にマウントされます。次の命名規則に従わないと、接続が失敗します。
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 シークレットからQuay
Pod にマウントされています。- 3
postgresql.crt
ファイルには、CloudSQL データベースへの接続を認証するために使用されるクライアント証明書が含まれています。このファイルは、Kubernetes シークレットからQuay
Pod にマウントされています。- 4
postgresql.key
ファイルには、クライアント証明書に関連付けられた秘密鍵が含まれています。このファイルは、Kubernetes シークレットからQuay
Pod にマウントされています。- 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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
secret/quay-config-bundle created
secret/quay-config-bundle created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistry
YAML ファイルを更新し、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 patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistry
YAML ファイルが更新され、追加の CA 証明書configBundleSecret
リソースが使用されるようにします。oc get quayregistry <registry_name> -n <namespace> -o yaml
$ oc get quayregistry <registry_name> -n <namespace> -o yaml
Copy 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.crt
Copy 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_certs
Copy 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_certs
Copy 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 ps
Copy 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_keller
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力してコンテナーを再起動します。
podman restart 5a3e82c4a75f
$ podman restart 5a3e82c4a75f
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、証明書がコンテナー namespace にコピーされたことを確認します。
podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pem
$ podman exec -it 5a3e82c4a75f cat /etc/ssl/certs/storage.pem
Copy 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. CLI を使用して設定ファイルを変更する リンクのコピーリンクがクリップボードにコピーされました!
CLI を使用して既存の設定をダウンロードすることにより、configBundleSecret
によって保存されている config.yaml
ファイルを変更できます。変更を加えた後、configBundleSecret
リソースを再度アップロードして、Red Hat Quay レジストリーに変更を加えることができます。
configBundleSecret
リソースによって保存される config.yaml
ファイルを変更するには、既存の設定ファイルを base64 でデコードした後に変更をアップロードするという、複数のステップからなる手順が必要です。ほとんどの場合、OpenShift Container Platform Web コンソールを使用して config.yaml
ファイルに変更を加える方が簡単です。
前提条件
- 管理者権限を持つユーザーとして OpenShift Container Platform クラスターにログインしている。
手順
次のコマンドを入力して、
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 >> config.yaml
フラグを渡して、データをカレントディレクトリーの YAML ファイルにデコードします。以下に例を示します。echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode >> config.yaml
$ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode >> config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
config.yaml
ファイルに必要な変更を加え、ファイルをconfig.yaml
として保存します。 次のコマンドを入力して、新しい
configBundleSecret
YAML を作成します。touch <new_configBundleSecret_name>.yaml
$ touch <new_configBundleSecret_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力し、
config.yaml
ファイルを渡して新しいconfigBundleSecret
リソースを作成します。oc -n <namespace> create secret generic <secret_name> \ --from-file=config.yaml=</path/to/config.yaml> \ --dry-run=client -o yaml > <new_configBundleSecret_name>.yaml
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<config.yaml>
はbase64 でデコード
されたconfig.yaml
ファイルです。
次のコマンドを入力して、
configBundleSecret
リソースを作成します。oc create -n <namespace> -f <new_configBundleSecret_name>.yaml
$ oc create -n <namespace> -f <new_configBundleSecret_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
secret/config-bundle created
secret/config-bundle created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、新しい
configBundleSecret
オブジェクトを参照するようにQuayRegistry
YAML ファイルを更新します。oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"<new_configBundleSecret_name>"}}'
$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"<new_configBundleSecret_name>"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
quayregistry.quay.redhat.com/example-registry patched
quayregistry.quay.redhat.com/example-registry patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
QuayRegistry
CR が新しいconfigBundleSecret
で更新されていることを確認します。oc describe quayregistry -n <quay_namespace>
$ oc describe quayregistry -n <quay_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
... ...
# ... Config Bundle Secret: <new_configBundleSecret_name> # ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow レジストリーにパッチを適用すると、Red Hat Quay Operator が自動的に変更を調整します。
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.yaml
Copy 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.yaml
Copy 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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
secret/extra-ca-certificate-config-bundle-secret created
secret/extra-ca-certificate-config-bundle-secret created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
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"}}'
$ 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 patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
QuayRegistry
YAML ファイルが更新され、追加の CA 証明書configBundleSecret
リソースが使用されるようにします。oc get quayregistry <registry_name> -n <namespace> -o yaml
$ oc get quayregistry <registry_name> -n <namespace> -o yaml
Copy 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 0
Copy 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-secret
Copy 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-hhgms
Copy to Clipboard Copied! Toggle word wrap Toggle overflow その後、Red Hat Quay デプロイメントにより、Pod を新しい証明書データに置き換えるスケジュールが自動的に設定されます。