인증서 요청

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

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

시작하기 전에

인증서를 요청하기 전에 필요한 권한과 kubeconfig 파일이 있는지 확인하세요.

필수 권한

인증서를 요청하는 데 필요한 권한을 얻으려면 조직 IAM 관리자에게 CA Service 인증서 요청자(certificate-authority-service-certificate-requester) 역할을 부여해 달라고 요청하세요. 역할에 대한 자세한 내용은 역할 정의를 참고하세요.

kubeconfig 파일 가져오기

관리 API 서버에 대해 명령어를 실행하려면 다음을 실행하세요.

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

  2. 관리 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)을 만들고 리소스에 추가합니다.

    원하는 경우 certificateTemplate 필드에 템플릿 이름을 입력하여 사전 구성된 X.509 매개변수 집합으로 인증서를 발급할 수 있습니다.

    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
      certificateTemplate: TEMPLATE_NAME
      signedCertificateSecret: SECRET_NAME
      notBefore: VALIDITY_START_TIME
      notAfter: VALIDITY_END_TIME
      subjectOverride: SUBJECT_OVERRIDE
    

    다음 변수를 바꿉니다.

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

    다음 선택적 변수를 바꿉니다.

    변수 설명
    TEMPLATE_NAME 사용하려는 사전 정의된 인증서 템플릿의 이름입니다. 사용 가능한 템플릿 목록과 충돌에 관한 자세한 내용은 사전 정의된 인증서 템플릿을 참고하세요.
    VALIDITY_START_TIME 인증서가 유효한 것으로 간주되는 시간입니다. 이 값은 YYYY-MM-DDTHH:MM:SSZ 형식이어야 합니다 (예: 2025-10-19T21:45:30Z). 설정하지 않으면 인증서가 발급 즉시 유효합니다.
    VALIDITY_END_TIME 인증서가 만료되는 시간입니다. 이 값은 YYYY-MM-DDTHH:MM:SSZ 형식이어야 합니다 (예: 2026-01-17T18:25:40Z). 설정하지 않으면 인증서가 시작 시간으로부터 90일 후에 만료됩니다.
    SUBJECT_OVERRIDE 발급된 인증서에 사용할 맞춤 주체로, CSR의 주체 정보를 재정의합니다. 이 값을 원시 ASN.1 DER 인코딩 X.509 주제로 제공합니다.
  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 파일로 저장합니다. 인증서에 선택한 값을 입력합니다.

    원하는 경우 certificateTemplate 필드에 템플릿 이름을 입력하여 사전 구성된 X.509 매개변수 집합으로 인증서를 발급할 수 있습니다.

    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
      certificateTemplate: TEMPLATE_NAME
      signedCertificateSecret: SECRET_NAME
      notBefore: VALIDITY_START_TIME
      notAfter: VALIDITY_END_TIME
      subjectOverride: SUBJECT_OVERRIDE
    

    다음 변수를 바꿉니다.

    변수 설명
    CERT_REQ_NAME 인증서의 이름입니다.
    USER_PROJECT_NAMESPACE 사용자 프로젝트가 있는 네임스페이스의 이름입니다.
    CA_NAME CA의 이름입니다. 루트 CA 또는 하위 CA일 수 있습니다.
    SECRET_NAME 비공개 키와 서명된 CA 인증서가 포함된 Kubernetes 보안 비밀의 이름입니다.

    다음 선택적 변수를 바꿉니다. CertificateRequest 리소스의 spec.certificateConfig.subjectConfig 블록에 있는 필드 중 하나 이상을 포함해야 합니다.

    변수 설명
    COMMON_NAME 인증서의 일반 이름입니다.
    ORGANIZATION 인증서에 사용할 조직입니다.
    LOCALITY 인증서의 지역입니다.
    STATE 인증서에 사용할 주 또는 도입니다.
    COUNTRY 인증서의 국가입니다.
    DNS_NAMES DNSNames은 인증서에 설정할 dNSName subjectAltNames 목록입니다.
    IP_ADDRESS 인증서에 설정할 ipAddress subjectAltNames 목록입니다.
    RFC822_NAMES 인증서에 설정할 rfc822Name subjectAltNames 목록입니다.
    URIS 인증서에 설정할 uniformResourceIdentifier subjectAltNames 목록입니다.
    TEMPLATE_NAME 사용하려는 사전 정의된 인증서 템플릿의 이름입니다. 사용 가능한 템플릿 목록과 충돌에 관한 자세한 내용은 사전 정의된 인증서 템플릿을 참고하세요.
    VALIDITY_START_TIME 인증서가 유효한 것으로 간주되는 시간입니다. 이 값은 YYYY-MM-DDTHH:MM:SSZ 형식이어야 합니다 (예: 2025-10-19T21:45:30Z). 설정하지 않으면 인증서가 발급 즉시 유효합니다.
    VALIDITY_END_TIME 인증서가 만료되는 시간입니다. 이 값은 YYYY-MM-DDTHH:MM:SSZ 형식이어야 합니다 (예: 2026-01-17T18:25:40Z). 설정하지 않으면 인증서가 시작 시간으로부터 90일 후에 만료됩니다.
    SUBJECT_OVERRIDE 발급된 인증서에 사용할 맞춤 주체로, CSR의 주체 정보를 재정의합니다. 이 값을 원시 ASN.1 DER 인코딩 X.509 주제로 제공합니다.
  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