관리형 Cloud Service Mesh의 Certificate Authority Service 구성

이 가이드에서는 관리형 Cloud Service Mesh의 Certificate Authority Service를 구성하는 방법을 설명합니다. 클러스터 내 Cloud Service Mesh에 관한 자세한 내용은 기본 기능 및 인증 기관(CA) 서비스 설치를 참고하세요.

Cloud Service Mesh 인증 기관 외에 Certificate Authority Service를 사용하도록 Cloud Service Mesh를 구성할 수 있습니다. 이 가이드에서는 다음과 같은 사용 사례에 권장되는 CA 서비스와 통합할 수 있는 기회를 제공합니다.

  • 여러 클러스터에서 워크로드 인증서에 서명하는 데 다른 인증 기관이 필요한 경우
  • 관리형 HSM에서 서명 키를 백업해야 하는 경우
  • 규제가 심한 업종에 속해 있고 규정 준수해야 하는 경우
  • Cloud Service Mesh CA를 커스텀 엔터프라이즈 루트 인증서에 연결하여 워크로드 인증서에 서명하려는 경우

Cloud Service Mesh 인증 기관 비용은 Cloud Service Mesh 가격에 포함되어 있습니다. CA 서비스는 기본 Cloud Service Mesh 가격에 포함되지 않으며 요금이 별도로 청구됩니다. 또한 CA Service에는 명시적 SLA가 제공되지만 Cloud Service Mesh 인증 기관의 경우에는 그렇지 않습니다.

요구사항

CA 풀이 구성될 프로젝트에서 필요한 API를 사용 설정합니다.

 gcloud services enable privateca.googleapis.com \
      --project=CA_PROJECT_ID

CA 서비스 구성

  1. CA 풀DevOps 등급과 과도한 지연 시간 문제나 리전 간 잠재적인 중단을 방지하기 위해 제공되는 클러스터와 동일한 리전에 있는지 확인합니다. 자세한 내용은 워크로드 최적화 등급을 참조하세요.
  2. CA 풀을 만들고 GKE 클러스터와 동일한 프로젝트의 CA 풀에 활성 인증 기관이 최소 하나 이상 있어야 합니다. 하위 CA를 사용하여 Cloud Service Mesh 워크로드 인증서에 서명합니다. 하위 CA에 해당하는 CA 풀을 기록해둡니다.
  3. Cloud Service Mesh 워크로드의 서비스 인증서만 사용하려는 경우 CA 풀에 다음 발급 정책을 설정합니다.

    policy.yaml

    baselineValues:
      keyUsage:
        baseKeyUsage:
          digitalSignature: true
          keyEncipherment: true
        extendedKeyUsage:
          serverAuth: true
          clientAuth: true
      caOptions:
        isCa: false
    identityConstraints:
      allowSubjectPassthrough: false
      allowSubjectAltNamesPassthrough: true
      celExpression:
        expression: subject_alt_names.all(san, san.type == URI && san.value.startsWith("spiffe://PROJECT_ID.svc.id.goog/ns/") )
    
  4. CA 풀의 발급 정책을 업데이트하려면 다음 명령어를 사용합니다.

    gcloud privateca pools update CA_POOL --location ca_region --issuance-policy policy.yaml
    

    풀의 정책 설정에 대한 자세한 내용은 인증서 발급 정책 사용을 참조하세요.

  5. 인증서 템플릿을 사용하는 경우 지금 구성하세요. 자세한 내용은 CA 서비스 가이드에서 워크로드 아이덴티티 인증서를 참조하세요. 인증서 템플릿이 CA 풀과 동일한 리전에 생성되었는지 확인합니다. CA 풀에 리전이 여러 개 있는 경우 리전별로 인증서 템플릿을 만듭니다.

CA 서비스를 사용하기 위해 필요한 역할

이 통합을 위해 Cloud Service Mesh의 모든 워크로드에는 다음과 같은 IAM 역할이 필요합니다. Cloud Service Mesh 워크로드에는 다음과 같은 역할 바인딩을 명시적으로 적용해야 합니다.

    WORKLOAD_IDENTITY="FLEET_PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/"

    gcloud privateca pools add-iam-policy-binding CA_POOL \
      --project FLEET_PROJECT_ID \
      --location ca_region \
      --member "group:${WORKLOAD_IDENTITY}" \
      --role "roles/privateca.workloadCertificateRequester"

    gcloud privateca pools add-iam-policy-binding CA_POOL \
      --project FLEET_PROJECT_ID \
      --location ca_region \
      --member "group:${WORKLOAD_IDENTITY}" \
      --role "roles/privateca.auditor"

인증서 템플릿을 사용하는 경우:

    gcloud privateca templates add-iam-policy-binding CERT_TEMPLATE_ID \
        --member "group:${WORKLOAD_IDENTITY}" \
        --role "roles/privateca.templateUser"

제한사항

  • Cloud Service Mesh 컨트롤 플레인을 프로비저닝하기 전에 CA를 구성하고 선택합니다. CA 변경은 지원되지 않습니다.

CA 서비스를 사용하도록 관리형 Cloud Service Mesh 구성

  1. istio-system 네임스페이스가 있는지 확인하고 누락된 경우 이를 만듭니다.

      kubectl create ns istio-system
    
  2. istio-system 네임스페이스에 asm-options configmap이 있는지 확인합니다.

      kubectl get configmap/asm-options -n istio-system
    
  3. 구성 맵이 없으면 만듭니다.

      kubectl create configmap -n istio-system asm-options
    
  4. 구성 맵을 패치하여 CAS 구성을 추가합니다.

      kubectl patch configmap/asm-options -n istio-system --type merge \
      -p '{"data":{"ASM_OPTS": "CA=PRIVATECA;CAAddr=projects/CA_PROJECT_ID/locations/ca_region/caPools/CA_POOL"}}'
    

    인증서 템플릿이 필요한 경우 :을 구분자로 사용하여 템플릿 ID를 CA 풀 주소에 추가합니다.

      kubectl patch configmap/asm-options -n istio-system --type merge \
      -p '{"data":{"ASM_OPTS": "CA=PRIVATECA;CAAddr=projects/CA_PROJECT_ID/locations/ca_region/caPools/CA_POOL:projects/PROJECT_ID/locations/ca_region/certificateTemplates/CERT_TEMPLATE_ID"}}'
    

구성 단계를 완료한 후 자동 관리를 사용 설정하여 관리형 Cloud Service Mesh 설치를 계속 진행합니다.