第 2 章 Red Hat Quay 和 SQL 之间的基于证书的身份验证


Red Hat Quay 管理员可以通过为客户端侧验证提供自己的 SSL/TLS 证书,在 Red Hat Quay 和 SQL (PostgreSQL 和 GCP CloudSQL)之间配置基于证书的身份验证。这提供了增强的安全性,并可更轻松地对 Red Hat Quay registry 的自动化。

以下小节演示了如何在 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)和 SSL/TLS 证书和密钥,可以使用 PEM 格式,用于生成带有 CloudSQL 数据库的 SSL 连接。如需更多信息,请参阅 Red Hat Quay 的 SSL 和 TLS
  • 您有 base64 将原始配置捆绑包解码 为一个 config.yaml 文件。如需更多信息 ,请参阅下载现有配置
  • 您使用外部管理的 PostgreSQL 或 CloudSQL 数据库。如需更多信息,请参阅使用带有 DB_URI 变量集的和现有的 PostgreSQL 数据库
  • 为 SSL/TLS 配置外部管理的 PostgreSQL 或 CloudSQL 数据库。
  • 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 是您的 SSL 证书,格式为 .pem
    3
    其中 ssl_client_key.pem 是您的 SSL 密钥,格式为 .pem
    4
    其中 ssl_server_certificate.pem 是您的 SSL root CA,格式为 .pem
  4. 编辑 'quay-config-bundle.yaml 文件,使其包含以下数据库连接设置:

    重要
    • DB_CONNECTION_ARGS 变量中包含的信息,如 sslmode,sslrootcert,sslcert, 和 sslkey 必须与 附加到 DB_URI 变量的信息匹配。不匹配可能会导致连接失败。
    • 您不能指定自定义文件名或路径。sslrootcertsslcertsslkey 的证书文件路径是硬编码的默认值,并挂载到 Kubernetes secret 中的 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 secret 的 Quay pod 中。
    3
    postgresql.crt 文件包含用于验证与 CloudSQL 数据库连接的客户端证书。此文件挂载到来自 Kubernetes secret 的 Quay pod 中。
    4
    postgresql.key 文件包含与客户端证书关联的私钥。此文件挂载到来自 Kubernetes secret 的 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

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.