Configurar o Certificate Authority Service para o Cloud Service Mesh gerenciado

Neste guia, descrevemos como configurar o serviço de autoridade certificadora para o Cloud Service Mesh gerenciado. Para informações sobre o Cloud Service Mesh no cluster, consulte Instale os recursos padrão e o serviço de autoridade de certificação (CA, na sigla em inglês).

Além da autoridade certificadora do Cloud Service Mesh, é possível configurar o Cloud Service Mesh para usar o Certificate Authority Service. Este guia oferece uma oportunidade de integração com o serviço de CA, o que é recomendado para os seguintes casos de uso:

  • Se você precisar de autoridades de certificação diferentes para assinar certificados de carga de trabalho em clusters diferentes.
  • Se você precisar fazer backup das chaves de assinatura em um HSM gerenciado.
  • sua empresa é altamente regulada e está sujeita a conformidade.
  • Se você quiser encadear a CA do Cloud Service Mesh a uma raiz corporativa personalizada para assinar certificados de carga de trabalho.

O custo da autoridade certificadora do Cloud Service Mesh está incluído no preço do Cloud Service Mesh. O serviço de CA não está incluído no preço base do Cloud Service Mesh e é cobrado separadamente. Além disso, CA Service vem com um SLA explícito, mas a autoridade de certificação do Cloud Service Mesh não faz isso.

Requisitos

Ative a API necessária no projeto em que o pool de AC será configurado.

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

Configurar o serviço de CA

  1. Crie o pool de CAs no nível DevOps e na mesma região que o cluster usado para evitar problemas de excesso de latência ou possíveis interrupções entre regiões. Saiba mais em Níveis otimizados para carga de trabalho.
  2. Crie a CA para ter pelo menos uma autoridade certificadora ativa no pool de CAs no mesmo projeto que o cluster do GKE. Use ACs subordinadas para assinar certificados de carga de trabalho do Cloud Service Mesh. Anote o pool de CAs correspondente à CA subordinada.
  3. Se ela se destina apenas a certificados de serviço para cargas de trabalho do Cloud Service Mesh, defina a seguinte política de emissão para o pool de AC:

    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. Para atualizar a política de emissão do pool de CAs, use o seguinte comando:

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

    Para informações sobre como definir uma política em um pool, consulte Como usar uma política de emissão de certificado.

  5. Se você estiver usando um modelo de certificado, configure-o agora. Para mais informações, siga o Guia de serviço de CA para certificados de identidade da carga de trabalho. Verifique se o modelo de certificado foi criado na mesma região do pool de CAs. Se houver várias regiões para pools de CAs, crie um modelo de certificado por região.

Papéis necessários para usar o serviço de AC

Para essa integração, todas as cargas de trabalho no Cloud Service Mesh exigem os seguintes papéis do IAM. Essas vinculações de papéis precisam ser aplicadas explicitamente às cargas de trabalho do 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"

Se estiver usando modelos de certificado:

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

Limitações

  • Configure e escolha a AC antes de provisionar o plano de controle do Cloud Service Mesh. Não é possível mudar a AC.

Configurar o Cloud Service Mesh gerenciado para usar o serviço de AC

  1. Verifique se o namespace istio-system existe ou crie-o se ele estiver ausente:

      kubectl create ns istio-system
    
  2. Verifique se o configmap asm-options existe no namespace istio-system:

      kubectl get configmap/asm-options -n istio-system
    
  3. Crie o configmap se ele não existir:

      kubectl create configmap -n istio-system asm-options
    
  4. Corrija o configmap para adicionar a configuração do 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"}}'
    

    Se um modelo de certificado for necessário, anexe o ID do modelo ao pool de AC: endereço usando : como separador:

      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"}}'
    

Depois de concluir as etapas de configuração, continue a instalação do Cloud Service Mesh gerenciado ativando o gerenciamento automático.