Red Hat Quay のセキュリティー保護
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次のコマンドを入力して、ルート CA 証明書を生成します。
$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pemサーバーのホスト名など、証明書の要求に組み込まれる情報を入力します。以下に例を示します。
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次のコマンドを入力してサーバーキーを生成します。
$ openssl genrsa -out ssl.key 2048次のコマンドを入力して、署名リクエストを生成します。
$ openssl req -new -key ssl.key -out ssl.csrサーバーのホスト名など、証明書の要求に組み込まれる情報を入力します。以下に例を示します。
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 []:以下のようにサーバーのホスト名を指定して、設定ファイルの
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設定ファイルを使用して、証明書
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次のコマンドを入力して、作成した証明書とファイルを確認します。
$ 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 ファイルを手動で更新することで設定する必要があります。
前提条件
- 認証局を作成して証明書に署名している。
手順
証明書ファイルとプライマリーキーファイルを設定ディレクトリーにコピーして、それぞれ
ssl.certとssl.keyという名前が付けられていることを確認します。cp ~/ssl.cert ~/ssl.key /path/to/configuration_directory次のコマンドを入力して、設定ディレクトリーに移動します。
$ cd /path/to/configuration_directoryconfig.yamlファイルを編集し、Red Hat Quay で SSL/TLS を処理するように指定します。config.yamlファイルの例# ... SERVER_HOSTNAME: <quay-server.example.com> ... PREFERRED_URL_SCHEME: https # ...オプション: 次のコマンドを入力して、
rootCA.pemファイルの内容をssl.certファイルの末尾に追加します。$ cat rootCA.pem >> ssl.cert次のコマンドを入力して、
Quayコンテナーを停止します。$ sudo podman stop <quay_container_name>次のコマンドを入力してレジストリーを再起動します。
$ 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 を設定するには、次の手順を使用します。
手順
ルート CA ファイルを
/etc/containers/certs.d/または/etc/docker/certs.d/のいずれかにコピーします。サーバーのホスト名によって決定される正確なパスを使用し、ファイルにca.crtという名前を付けます。$ sudo cp rootCA.pem /etc/containers/certs.d/quay-server.example.com/ca.crtRed Hat Quay レジストリーにログインするときに
--tls-verify=falseオプションを使用する必要がなくなったことを確認します。$ sudo podman login quay-server.example.com出力例
Login Succeeded!
1.2.3. 認証局を信頼するようにシステムを設定 リンクのコピーリンクがクリップボードにコピーされました!
認証局を信頼するようにシステムを設定するには、次の手順を使用します。
手順
次のコマンドを入力して、
rootCA.pemファイルをシステム全体の統合トラストストアにコピーします。$ sudo cp rootCA.pem /etc/pki/ca-trust/source/anchors/次のコマンドを入力して、システム全体のトラストストア設定を更新します。
$ sudo update-ca-trust extractオプション:
trust listコマンドを使用して、Quayサーバーが設定されていることを確認できます。$ trust list | grep quay label: quay-server.example.comhttps://quay-server.example.comでレジストリーを参照すると、接続が安全であることを示すロックアイコンが表示されます。
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.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.yamlcustom-ssl-config-bundle-secretリソースを作成します。次のコマンドを入力してリソースを作成します。
$ 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ファイルです。
オプション: 次のコマンドを入力して、
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>次のコマンドを入力して、
configBundleSecretリソースを作成します。$ oc create -n <namespace> -f custom-ssl-config-bundle-secret.yaml出力例
secret/custom-ssl-config-bundle-secret created次のコマンドを入力して、
QuayRegistryYAML ファイルを更新して、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次のコマンドを入力して、
QuayRegistryYAML の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次のコマンドを入力して、
QuayRegistryYAML ファイルが更新されてカスタム SSLconfigBundleSecretリソースが使用されるようになり、および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 用に設定されている。
-
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>"
Red Hat Quay ディレクトリーで、次のコマンドを実行して、新しい YAML ファイル (例:
quay-config-bundle.yaml)を作成します。$ touch quay-config-bundle.yaml次のコマンドを入力して、
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 `quay-config-bundle.yamlファイルを編集して、次のデータベース接続設定を含めます。重要-
DB_CONNECTION_ARGS変数に含まれる情報 (例:sslmode、sslrootcert、sslcert、sslkey) は、DB_URI変数に追加された情報と一致する 必要があります。一致しない場合は、接続に失敗する可能性があります。 -
カスタムファイル名またはパスを指定することはできません。
sslrootcert、sslcert、およびsslkeyの証明書ファイルパスはハードコードされたデフォルトであり、Kubernetes シークレットからQuayPod にマウントされます。次の命名規則に従わないと、接続が失敗します。
DB_CONNECTION_ARGS: autorollback: true sslmode: verify-ca1 sslrootcert: /.postgresql/root.crt2 sslcert: /.postgresql/postgresql.crt3 sslkey: /.postgresql/postgresql.key4 threadlocals: true5 DB_URI: postgresql://<dbusername>:<dbpassword>@<database_host>:<port>/<database_name>?sslmode=verify-full&sslrootcert=/.postgresql/root.crt&sslcert=/.postgresql/postgresql.crt&sslkey=/.postgresql/postgresql.key6 - 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出力例
secret/quay-config-bundle created次のコマンドを入力して、
QuayRegistryYAML ファイルを更新し、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次のコマンドを入力して、
QuayRegistryYAML ファイルが更新され、追加の 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 があります。
手順
次のコマンドを入力して、コンテナーに追加する証明書を表示します。
$ cat storage.crt出力例
-----BEGIN CERTIFICATE----- MIIDTTCCAjWgAwIBAgIJAMVr9ngjJhzbMA0GCSqGSIb3DQEBCwUAMD0xCzAJBgNV... -----END CERTIFICATE-----次のコマンドを入力して、Red Hat Quay ディレクトリーの
/configフォルダーにextra_ca_certsを作成します。$ mkdir -p /path/to/quay_config_folder/extra_ca_certsCA ファイルを
extra_ca_certsフォルダーにコピーします。以下に例を示します。$ cp storage.crt /path/to/quay_config_folder/extra_ca_certs/次のコマンドを入力して、
extra_ca_certsフォルダー内にstorage.crtファイルが存在することを確認します。$ tree /path/to/quay_config_folder/extra_ca_certs出力例
/path/to/quay_config_folder/extra_ca_certs ├── storage.crt----次のコマンドを入力して、
QuayのCONTAINER 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次のコマンドを入力してコンテナーを再起動します。
$ podman restart 5a3e82c4a75f次のコマンドを実行して、証明書がコンテナー 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 クラスターにログインしている。
手順
次のコマンドを入力して、
QuayRegistryリソースを記述します。$ oc describe quayregistry -n <quay_namespace># ... Config Bundle Secret: example-registry-config-bundle-v123x # ...次のコマンドを入力してシークレットデータを取得します。
$ oc get secret -n <quay_namespace> <example-registry-config-bundle-v123x> -o jsonpath='{.data}'出力例
{ "config.yaml": "RkVBVFVSRV9VU0 ... MDAwMAo=" }>> config.yamlフラグを渡して、データをカレントディレクトリーの YAML ファイルにデコードします。以下に例を示します。$ echo 'RkVBVFVSRV9VU0 ... MDAwMAo=' | base64 --decode >> config.yaml-
config.yamlファイルに必要な変更を加え、ファイルをconfig.yamlとして保存します。 次のコマンドを入力して、新しい
configBundleSecretYAML を作成します。$ touch <new_configBundleSecret_name>.yaml次のコマンドを入力し、
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ファイルです。
次のコマンドを入力して、
configBundleSecretリソースを作成します。$ oc create -n <namespace> -f <new_configBundleSecret_name>.yaml出力例
secret/config-bundle created次のコマンドを入力して、新しい
configBundleSecretオブジェクトを参照するようにQuayRegistryYAML ファイルを更新します。$ oc patch quayregistry <registry_name> -n <namespace> --type=merge -p '{"spec":{"configBundleSecret":"<new_configBundleSecret_name>"}}'出力例
quayregistry.quay.redhat.com/example-registry patched
検証
QuayRegistryCR が新しい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) ファイルがある。
手順
新しい YAML ファイル (例:
extra-ca-certificate-config-bundle-secret.yaml)を作成します。$ touch extra-ca-certificate-config-bundle-secret.yamlextra-ca-certificate-config-bundle-secretリソースを作成します。次のコマンドを入力してリソースを作成します。
$ 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
オプション: 次のコマンドを入力すると、
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>次のコマンドを入力して、
configBundleSecretリソースを作成します。$ oc create -n <namespace> -f extra-ca-certificate-config-bundle-secret.yaml出力例
secret/extra-ca-certificate-config-bundle-secret created次のコマンドを入力して、
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"}}'出力例
quayregistry.quay.redhat.com/example-registry patched次のコマンドを入力して、
QuayRegistryYAML ファイルが更新され、追加の 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ファイルがある。
手順
次のコマンドを入力して、SSL/TLS 証明書の内容を Base64 でエンコードします。
$ cat ca.crt | base64 -w 0出力例
...c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=次の
kubectlコマンドを入力して、quay-enterprise-config-secretファイルを編集します。$ kubectl --namespace quay-enterprise edit secret/quay-enterprise-config-secret証明書のエントリーを追加し、
base64でエンコードされた完全なストリンガーをエントリーの下に貼り付けます。以下に例を示します。custom-cert.crt: c1psWGpqeGlPQmNEWkJPMjJ5d0pDemVnR2QNCnRsbW9JdEF4YnFSdVd3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=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 を新しい証明書データに置き換えるスケジュールが自動的に設定されます。