이 페이지에서는 인증 기관 서비스를 사용하여 인증서를 요청하는 단계를 설명합니다.
Google Distributed Cloud (GDC) 에어 갭 내에서 신뢰를 구축하고 통신을 보호하려면 인증 기관 서비스에서 ACME 지원 또는 사용 중지 인증서를 요청하세요.
시작하기 전에
인증서를 요청하기 전에 필요한 권한과 kubeconfig 파일이 있는지 확인하세요.
필수 권한
인증서를 요청하는 데 필요한 권한을 얻으려면 조직 IAM 관리자에게 CA Service 인증서 요청자(certificate-authority-service-certificate-requester) 역할을 부여해 달라고 요청하세요. 역할에 대한 자세한 내용은 역할 정의를 참고하세요.
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을 사용하여 인증서 요청
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 주제로 제공합니다. 커스텀 리소스를 Distributed Cloud 인스턴스에 적용합니다.
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGMANAGEMENT_API_SERVER_KUBECONFIG를 관리 API 서버의 kubeconfig 파일 경로로 바꿉니다.인증서 요청의 준비 상태를 확인합니다.
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" }인증서 보안 비밀 이름을 가져옵니다.
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
자동 생성 키를 사용하여 인증서 요청
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 주제로 제공합니다. 커스텀 리소스를 Distributed Cloud 인스턴스에 적용합니다.
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG인증서 요청의 준비 상태를 확인합니다.
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" }인증서 보안 비밀 이름을 가져옵니다.
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