서버 인증서에 서명하고 업로드

데이터베이스 클러스터를 만들면 기본 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 비공개 키 파일의 경로입니다.