サーバー証明書に署名してアップロードする

データベース クラスタを作成すると、デフォルトの GDC CA によって署名されたサーバー証明書が生成され、データベース サーバーで使用するように構成されます。独自の PKI によって発行されたデータベースの証明書に署名してアップロードする手順は次のとおりです。この機能を使用するには、組織のデフォルト発行者が BYO 証明書モードになっている必要があります。

API

  1. データベース クラスタを作成して準備ができたら、生成された証明書署名リクエストをファイルとして保存します。

    kubectl get certificate.pki.security.gdc.goog \
    dbs-DBENGINE_SHORT_NAME-cert-request-DBCLUSTER_NAME \
    -n USER_PROJECT -o jsonpath='{.status.byoCertStatus.csrStatus.csr}' \
    | base64 -d > DBCLUSTER_NAME.csr
    
  2. データベース クラスタの SAN を含む CSR 拡張ファイルを作成します。

    export SAN=$(openssl req -in DBCLUSTER_NAME.csr -noout -text | grep 'DNS:' | sed -s 's/^[ ]*//')
    
    echo "keyUsage=digitalSignature,keyEncipherment
    extendedKeyUsage=serverAuth,clientAuth
    subjectAltName=${SAN:?}" > DBCLUSTER_NAME-csr.ext
    
  3. CSR ファイルと拡張機能ファイルを使用して、CA によって署名された証明書を生成します。このコードサンプルでは openssl を使用していますが、この手順は他のツールでも実行できます。

    openssl x509 -req -in DBCLUSTER_NAME.csr -days 365 \
    -CA CA_CERTIFICATE_FILE -CAkey CA_PRIVATE_KEY_FILE \
    -CAcreateserial -extfile DBCLUSTER_NAME-csr.ext  \
    -out DBCLUSTER_NAME-signed.crt
    
  4. 署名付き証明書と CA 証明書を使用して、証明書リソースを更新します。

    echo "spec:
      byoCertificate:
        certificate: $(base64 -w0 DBCLUSTER_NAME-signed.crt)
        ca: $(base64 -w0 CA_CERTIFICATE_FILE)" > patch.txt
    
    kubectl patch certificate.pki.security.gdc.goog \
    dbs-DBENGINE_SHORT_NAME-cert-request-DBCLUSTER_NAME \
    -n USER_PROJECT --patch-file patch.txt --type='merge'
    
  5. アップロード後に証明書が準備完了状態になっていることを確認します。

    kubectl get certificate.pki.security.gdc.goog \
    dbs-DBENGINE_SHORT_NAME-cert-request-DBCLUSTER_NAME \
    -n USER_PROJECT -o json | jq -r ' .status.conditions[] | select( .type as $id | "Ready" | index($id))'
    

    出力例を以下に示します。

    {
      "lastTransitionTime": "2024-05-03T08:42:10Z",
      "message": "Certificate is issued",
      "observedGeneration": 2,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  6. Oracle データベースを使用している場合にのみ、リスナーの SSL 構成が再読み込みされるように、データベース クラスタを停止して再起動します。

次のように置き換えます。

  • DBENGINE_SHORT_NAME: データベース エンジンの短縮名。これは、al(AlloyDB Omni)、pg(PostgreSQL)、ora(Oracle)のいずれかです。
  • DBCLUSTER_NAME: データベース クラスタの名前。
  • USER_PROJECT: データベース クラスタが作成されたユーザー プロジェクトの名前。
  • CA_CERTIFICATE_FILE: データベース CA 証明書ファイルのパス。
  • CA_PRIVATE_KEY_FILE: データベース CA 秘密鍵ファイルのパス。