인증서 템플릿 만들기

이 페이지에서는 인증서 템플릿의 속성과 인증서 템플릿을 만드는 방법을 설명합니다.

인증서 템플릿 개요

Certificate Authority Service는 일반적인 인증서 발급 시나리오에 사용할 수 있는 재사용 가능한 매개변수화된 템플릿을 제공합니다. 인증서 템플릿은 조직 내에서 비교적 정적이고 잘 정의된 인증서 발급 스키마를 나타냅니다. CertificateTemplate 리소스에는 다음이 포함됩니다.

  1. 템플릿을 사용하는 모든 인증서 요청에서 요청된 주체 및 SAN에 대해 평가되는 Common Expression Language(CEL) 표현식입니다. CEL 사용에 대한 자세한 내용은 CEL 사용을 참조하세요.
  2. 주체 또는 주체 대체 이름이 최종 사용자 요청에서 발급된 인증서로 복사될 수 있는지 여부를 지정하는 허용 목록입니다.
  3. 최종 사용자 요청에서 발급된 인증서로 복사할 수 있는 X.509 확장 프로그램이 있는 경우 이를 지정하는 선택적 허용 목록입니다.
  4. 템플릿을 사용하는 발급된 모든 인증서에 추가되는 X.509 확장 프로그램 값의 선택적인 집합입니다.

인증서 템플릿은 본질적으로 정식 수직 인증서 발급 프레임워크가 될 수 있습니다. 자세한 내용은 전체 CertificateTemplate 메시지 정의를 참조하세요.

인증서 템플릿의 사전 정의된 값

인증서 템플릿의 사전 정의된 값은 인증서 템플릿을 사용하는 모든 인증서에 추가됩니다. mTLS 또는 코드 서명과 같은 일반적인 인증서 발급 시나리오를 만들 수 있습니다. 값에는 다음이 포함됩니다.

  • 키 사용: RFC 5280 섹션 4.2.1.12에 따라 인증서의 기본 키 사용을 지정합니다.
  • 확장 키 사용: RFC 5280 섹션 4.2.1.3에 따라 인증서의 확장 키 사용을 지정합니다.
  • 인증서가 CA인 경우: 인증서가 추가 인증서를 발급할 수 있는지 또는 종단 개체 인증서인지 지정합니다.
  • 최대 발급기관 경로 길이: CA의 경우 이 CA 인증서에 연결할 수 있는 최대 CA 수를 지정합니다. 최대 발급기관 경로 길이가 0으로 설정되면 CA는 종단 개체 인증서만 발급할 수 있습니다. 1로 설정하면 이 CA 인증서 아래에 있는 체인에는 하위 CA가 하나만 포함될 수 있습니다. 값이 선언되지 않으면 이 CA 아래 체인에 있는 하위 CA의 수는 제한되지 않습니다.
  • AIA OCSP 서버: RFC 5280 섹션 4.2.2.1에 설명된 대로 인증서의 기관 정보 액세스(AIA) 확장 프로그램에서 OCSP 서버를 참조합니다.
  • 추가 X.509 확장 프로그램: 커스텀 X.509 확장 프로그램을 설명합니다.

다음 코드 샘플에서는 인증서 템플릿의 모든 사전 정의된 필드를 언급합니다.

keyUsage:
  baseKeyUsage:
    digitalSignature: true
    keyEncipherment: true
    contentCommitment: false
    dataEncipherment: false
    keyAgreement: false
    certSign: false
    crlSign: false
    encipherOnly: false
    decipherOnly: false
  extendedKeyUsage:
    serverAuth: true
    clientAuth: false
    codeSigning: false
    emailProtection: false
    timeStamping: false
    ocspSigning: false
caOptions:
  isCa: true
  maxIssuerPathLength: 1
policyIds:
- objectIdPath:
  - 1
  - 2
  - 3
additionalExtensions:
- objectId:
    objectIdPath:
    - 1
    - 2
    - 3
  critical: false
  value: "base64 encoded extension value"

YAML에 지정되지 않은 값은 생략되거나 기본값이 false로 설정됩니다.

값이 지정되지 않은 경우 다음 확장 프로그램이 생략됩니다.

  • keyUsage
  • policyIds
  • additionalExtensions
  • caOptions 확장 프로그램의 maxIssuerPathLength 필드

값이 지정되지 않은 경우 다음 확장 프로그램은 기본값이 false로 설정됩니다.

  • caOptions 확장 프로그램의 isCa 필드

인증서 템플릿 만들기

인증서 템플릿을 만들려면 다음 gcloud 명령어를 사용합니다.

gcloud

gcloud privateca templates create TEMPLATE_ID \
  --copy-subject \
  --copy-sans \
  --identity-cel-expression <expr> \
  --predefined-values-file FILE_PATH \
  --copy-all-requested-extensions \
  --copy-extensions-by-oid <1.2.3.4,5.6.7.8> \
  --copy-known-extensions <ext1,ext2>

다음을 바꿉니다.

  • TEMPLATE_ID: 인증서 템플릿의 고유 식별자입니다.
  • FILE_PATH: 인증서 템플릿에서 설정된 X.509 값을 설명하는 YAML 파일입니다.

--copy-sans 플래그를 사용하면 인증서 요청의 주체 대체 이름(SAN) 확장을 서명된 인증서에 복사할 수 있습니다. 또는 --no-copy-sans를 지정하여 인증서 요청에서 호출자가 지정한 SAN을 삭제할 수 있습니다.

--copy-subject 플래그를 사용하면 인증서 요청의 주체를 서명된 인증서에 복사할 수 있습니다. 또는 --no-copy-subject를 지정하여 인증서 요청에서 호출자가 지정한 주체를 삭제할 수 있습니다.

--identity-cel-expression 플래그는 발급되기 전에 인증서의 주체 및 주체 대체 이름에 대해 평가되는 CEL 표현식을 사용하고 요청을 허용해야 하는지 여부를 나타내는 불리언을 반환합니다. 인증서 템플릿에 Common Expression Language(CEL) 표현식을 사용하는 방법에 대한 자세한 내용은 인증서 템플릿에 CEL 사용을 참조하세요.

--predefined-values-file 플래그는 이 템플릿에서 설정한 사전 정의된 X.509 값을 설명하는 YAML 파일의 경로를 지정합니다. 제공된 확장 프로그램은 이 템플릿을 사용하는 모든 인증서 요청에 복사되며, 인증서 요청에서 허용되는 확장 프로그램보다 우선 적용됩니다. 사전 정의된 X.509 값의 일부를 업데이트하면 사전 정의된 X.509 값 집합 전체를 대체합니다.

--copy-all-requested-extensions 플래그를 설정하면 인증서 요청에 지정된 모든 확장 프로그램이 서명된 인증서에 복사됩니다. 또는 --copy-extensions-by-oid 플래그를 사용하여 인증서 요청의 특정 OID를 서명된 인증서로 복사하고 --copy-known-extensions 플래그를 사용하여 인증서 요청에서 서명된 인증서로 확장 프로그램을 복사할 수 있습니다. base-key-usage, extended-key-usage, ca-options, policy-ids, aia-ocsp-servers 중 하나여야 합니다.

인증서 요청에서 모든 X.509 확장 프로그램을 무시하도록 --copy-all-requested-extensions 플래그를 삭제하되 이 템플릿에 정의된 사전 정의 값은 유지합니다.

일반적인 시나리오의 인증서 템플릿 만들기

이 섹션에서는 일반적인 사용 사례의 인증서 템플릿을 만들기 위한 gcloud 명령어를 제공합니다.

모든 도메인의 DNS 서버 TLS 인증서

모든 도메인을 허용하는 서버 TLS 인증서를 발급하기 위한 인증서 템플릿을 만들려면 다음 안내를 따르세요.

  1. 이름이 leaf_server_tls_values.yaml인 파일을 만들고 다음 최종 항목 서버 TLS 구성을 추가합니다.

    leaf_server_tls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
    caOptions:
      isCa: false
    
  2. DNS 유형의 SAN이 있는 인증서만 허용하려면 다음 gcloud 명령어를 실행합니다.

    gcloud

    gcloud privateca templates create server-tls \
      --predefined-values-file leaf_server_tls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == DNS)"
    

    gcloud privateca templates create 명령어에 대한 자세한 내용은 gcloud privateca templates create를 참조하세요.

테스트 도메인만 있는 DNS 서버 TLS 인증서

테스트 도메인으로 제한된 DNS SAN으로 서버 TLS 인증서를 발급하는 인증서 템플릿을 만들려면 다음 gcloud 명령어를 사용합니다.

gcloud

gcloud privateca templates create server-tls \
  --predefined-values-file leaf_server_tls_values.yaml \
  --copy-sans --no-copy-subject \
  --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.test.example.com'))"

leaf_server_tls_values.yaml 파일의 콘텐츠는 이전 예시와 동일해야 합니다.

CEL 표현식을 사용하여 DNS 이름이 특정 문자열로 시작하거나 끝나는지 확인하는 방법에 대한 자세한 내용은 CEL 표현식 예시를 참조하세요.

워크로드 아이덴티티 인증서

상호 TLS(mTLS) 인증서를 발급하기 위한 인증서 템플릿을 만들려면 다음 안내를 따르세요.

  1. 이름이 leaf_mtls_values.yaml인 파일을 만들고 다음 최종 항목 상호 TLS 구성을 추가합니다.

    leaf_mtls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
        clientAuth: true
    caOptions:
      isCa: false
    
  2. SPIFFE URI SAN이 있는 인증서만 허용하려면 다음 gcloud 명령어를 사용합니다.

    gcloud

    gcloud privateca templates create workload-spiffe \
      --predefined-values-file leaf_mtls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == URI && san.value.startsWith('spiffe://'))"
    

    gcloud privateca templates create 명령어에 대한 자세한 내용은 gcloud privateca templates create를 참조하세요.

CEL 표현식을 사용하여 DNS 이름이 특정 문자열로 시작하거나 끝나는지 확인하는 방법에 대한 자세한 내용은 CEL 표현식 예시를 참조하세요.

인증서 템플릿에 대한 액세스 권한 부여

CA Service 인증서 템플릿 사용자(roles/privateca.templateUser) 역할이 있는 경우 인증서 템플릿을 사용할 수 있습니다. 인증서 템플릿 작성자는 해당 인증서 템플릿을 사용할 수 있는 조직의 구성원에게 CA Service 인증서 템플릿 사용자 역할을 부여하는 것이 좋습니다.

example.com 도메인의 모든 사용자에게 CA Service 인증서 템플릿 사용자(roles/privateca.templateUser) 역할을 부여하려면 다음 gcloud 명령어를 사용합니다.

gcloud

gcloud privateca templates add-iam-policy-binding TEMPLATE_ID \
  --member "domain:example.com" \
  --role "roles/privateca.templateUser"

다음을 바꿉니다.

  • TEMPLATE_ID: 인증서 템플릿의 고유 식별자입니다.

gcloud privateca templates add-iam-policy-binding 명령어에 대한 자세한 내용은 gcloud privateca templates add-iam-policy-binding을 참조하세요.

CA Service의 IAM 역할 및 관련 권한에 대한 자세한 내용은 IAM으로 액세스 제어를 참조하세요.

다음 단계