第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
    # ...

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

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

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

会社概要

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

© 2024 Red Hat, Inc.