인증서 요청

이 페이지에서는 인증 기관 서비스를 사용하여 인증서를 요청하는 단계를 설명합니다.

Google Distributed Cloud (GDC) 에어 갭 내에서 신뢰를 구축하고 통신을 보호하려면 인증 기관 서비스에서 ACME 지원 또는 중지 인증서를 요청하세요.

시작하기 전에

인증서를 요청하는 데 필요한 권한을 얻으려면 조직 IAM 관리자에게 인증 기관 서비스 관리자(certificate-authority-service-admin) 역할을 부여해 달라고 요청하세요.

kubeconfig 파일 가져오기

관리 API 서버에 대해 명령어를 실행하려면 다음 리소스가 있어야 합니다.

관리 API 서버의 kubeconfig 파일이 없는 경우 로그인 및 생성합니다.

관리 API 서버의 kubeconfig 파일 경로를 사용하여 이 안내의 MANAGEMENT_API_SERVER_KUBECONFIG를 바꿉니다.

ACME 모드가 사용 설정된 CA를 사용하여 인증서 요청

인증 기관이 ACME 모드로 호스팅되는 경우 준비가 완료된 후 상태에 ACME 서버 URL을 출력합니다.

분산 클라우드 환경에서 CA ACME 서버 URL을 수집합니다.

kubectl get certificateauthorities CA_NAME -n USER_PROJECT_NAMESPACE -ojson | jq -r '.status.acme.uri'

다음을 바꿉니다.

  • CA_NAME: CA의 이름입니다. 루트 CA 또는 하위 CA일 수 있습니다.
  • USER_PROJECT_NAMESPACE: 사용자 프로젝트가 있는 네임스페이스의 이름입니다.

ACME 모드가 사용 중지된 CA를 사용하여 인증서 요청

ACME 모드가 사용 중지된 인증서 요청을 만들려면 CertificateRequest 리소스를 만들어 오프라인 Distributed Cloud 인스턴스에 적용해야 합니다. 이 작업을 실행하는 두 가지 방법은 다음과 같습니다.

  • CertificateResource를 만들고 리소스에 CSR을 포함합니다.
  • GDC 자동 생성 비공개 키를 사용하여 CertificateResource를 만들고 인증서 구성을 맞춤 값으로 제공합니다.

CSR을 사용하여 인증서 요청

  1. CertificateRequest 리소스를 만들고 cert-request.yaml이라는 YAML 파일로 저장합니다. 비공개 키를 사용하여 인증서 서명 요청 (CSR)을 만들고 리소스에 추가합니다.

    apiVersion: pki.security.gdc.goog/v1
    kind: CertificateRequest
    metadata:
      name: CERT_REQ_NAME
      namespace: USER_PROJECT_NAMESPACE
    spec:
      certificateAuthorityRef:
        name: CA_NAME
        namespace: USER_PROJECT_NAMESPACE
      csr: CSR
      signedCertificateSecret: SECRET_NAME
    

    다음 변수를 바꿉니다.

    변수 설명
    CERT_REQ_NAME 인증서의 이름입니다.
    USER_PROJECT_NAMESPACE 사용자 프로젝트가 있는 네임스페이스의 이름입니다.
    CA_NAME CA의 이름입니다. 루트 CA 또는 하위 CA일 수 있습니다.
    CSR CA를 사용하여 서명할 인증서 서명 요청입니다.
    SECRET_NAME 비공개 키와 서명된 CA 인증서가 포함된 Kubernetes 보안 비밀의 이름입니다.
  2. 커스텀 리소스를 Distributed Cloud 인스턴스에 적용합니다.

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    

    MANAGEMENT_API_SERVER_KUBECONFIG를 관리 API 서버의 kubeconfig 파일 경로로 바꿉니다.

  3. 인증서 요청의 준비 상태를 확인합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r ' .status.conditions[] | select( .type as $id | "Ready" | index($id))'
    

    출력은 다음과 비슷합니다.

    {
      "lastTransitionTime": "2025-01-27T12:22:59Z",
      "message": "Certificate is issued",
      "observedGeneration": 1,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  4. 인증서 보안 비밀 이름을 가져옵니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'
    

    출력에 서명된 인증서가 포함된 SECRET_NAME가 표시됩니다.

    test-jwk-1
    

자동 생성 키를 사용하여 인증서 요청

  1. CertificateRequest 리소스를 만들고 cert-request.yaml이라는 YAML 파일로 저장합니다. 선택한 인증서 값을 입력합니다.

    apiVersion: pki.security.gdc.goog/v1
    kind: CertificateRequest
    metadata:
      name: CERT_REQ_NAME
      namespace: USER_PROJECT_NAMESPACE
    spec:
      certificateAuthorityRef:
        name: CA_NAME
        namespace: USER_PROJECT_NAMESPACE
      certificateConfig:
        subjectConfig:
          commonName: COMMON_NAME
          organization: ORGANIZATION
          locality: LOCALITY
          state: STATE
          country: COUNTRY
          dnsNames: 
          - DNS_NAMES
          ipAddresses:
          - IP_ADDRESSES
          rfc822Names:
          - RFC822NAMES
          uris:
          - URIS
      signedCertificateSecret: SECRET_NAME
    

    COMMON_NAME을 인증서의 일반 이름으로 바꿉니다.

    다음 선택적 변수를 바꿉니다. CertificateRequest 리소스에 다음 값 중 하나 이상을 포함해야 합니다.

    변수 설명
    ORGANIZATION 인증서에 사용할 조직입니다.
    LOCALITY 인증서의 지역입니다.
    STATE 인증서에 사용할 주 또는 도입니다.
    COUNTRY 인증서의 국가입니다.
    DNS_NAMES DNSNames는 인증서에 설정할 dNSName subjectAltNames 목록입니다.
    IP_ADDRESS 인증서에 설정할 ipAddress subjectAltNames 목록입니다.
    RFC822_NAMES 인증서에 설정할 rfc822Name subjectAltNames 목록입니다.
    URIS 인증서에 설정할 uniformResourceIdentifier subjectAltNames 목록입니다.
  2. 커스텀 리소스를 Distributed Cloud 인스턴스에 적용합니다.

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    
  3. 인증서 요청의 준비 상태를 확인합니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r ' .status.conditions[] | select( .type as $id | "Ready" | index($id))'
    

    출력은 다음과 비슷합니다.

    {
      "lastTransitionTime": "2025-01-27T12:22:59Z",
      "message": "Certificate is issued",
      "observedGeneration": 1,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  4. 인증서 보안 비밀 이름을 가져옵니다.

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'
    

    출력에 서명된 인증서가 포함된 SECRET_NAME가 표시됩니다.

    test-jwk-1
    

인증서 요청 나열

certificaterequests 매개변수를 사용하여 모든 CertificateRequest 리소스를 나열합니다.

   kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequests

결과는 다음과 유사합니다.

   NAMESPACE    NAME               READY   AGE
   foo          cert-req           True    30s