이 페이지에서는 인증 기관 서비스를 사용하여 인증서를 요청하는 단계를 설명합니다.
Google Distributed Cloud (GDC) 에어 갭 내에서 신뢰를 구축하고 통신을 보호하려면 인증 기관 서비스에서 ACME 지원 또는 사용 중지 인증서를 요청하세요.
시작하기 전에
인증서를 요청하기 전에 필요한 권한과 kubeconfig 파일이 있는지 확인하세요.
필수 권한
인증서를 요청하는 데 필요한 권한을 얻으려면 조직 IAM 관리자에게 CA Service 인증서 요청자(certificate-authority-service-certificate-requester) 역할을 부여해 달라고 요청하세요. 역할에 대한 자세한 내용은 역할 정의를 참고하세요.
kubeconfig 파일 가져오기
Management API 서버에 대해 명령어를 실행하려면 다음 단계를 따르세요.
kubeconfig 파일이 없는 경우 관리 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 certificaterequest.pki.security.gdc.goog
다음을 바꿉니다.
MANAGEMENT_API_SERVER_KUBECONFIG: 관리 API 서버의 kubeconfig 파일 경로USER_PROJECT_NAMESPACE: 사용자 프로젝트가 있는 네임스페이스의 이름
다음은 test-project 네임스페이스를 사용하는 명령어의 예입니다.
kubectl --kubeconfig /root/release/root-admin/root-admin-kubeconfig -n test-project get certificaterequest.pki.security.gdc.goog
출력은 다음과 비슷합니다.
NAME READY AGE
test-externalca-subca-cert-req-with-csr True 17h
test-externalca-subca-cert-req-with-csr-override True 17h
인증서 삭제
인증서를 삭제하려면 해당 CertificateRequest 커스텀 리소스를 삭제해야 합니다. 이 작업을 수행하면 CAS 데이터베이스에서 리소스가 삭제됩니다.
삭제하려는
CertificateRequest의 이름을 찾습니다. 인증서 요청을 나열하여 이름을 찾을 수 있습니다.CertificateRequest리소스를 삭제합니다.kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE delete certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME다음을 바꿉니다.
MANAGEMENT_API_SERVER_KUBECONFIG: 관리 API 서버의 kubeconfig 파일 경로USER_PROJECT_NAMESPACE: 사용자 프로젝트가 있는 네임스페이스의 이름CERT_REQ_NAME:CertificateRequest리소스의 이름