データベース クラスタを作成すると、デフォルトの GDC CA によって署名されたサーバー証明書が生成され、データベース サーバーで使用するように構成されます。独自の PKI によって発行されたデータベースの証明書に署名してアップロードする手順は次のとおりです。この機能を使用するには、組織のデフォルト発行者が BYO 証明書モードになっている必要があります。
API
データベース クラスタを作成して準備ができたら、生成された証明書署名リクエストをファイルとして保存します。
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
データベース クラスタの 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
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
署名付き証明書と 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'
アップロード後に証明書が準備完了状態になっていることを確認します。
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" }
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 秘密鍵ファイルのパス。