第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