Configure o Certificate Authority Service para o Managed Cloud Service Mesh

Este guia descreve como configurar o serviço de autoridade de certificação para a malha de serviços na nuvem gerida. Para obter informações sobre a malha de serviços do Google Cloud no cluster, consulte o artigo Instale as funcionalidades predefinidas e o serviço de autoridade de certificação (AC).

Além da autoridade de certificação do Cloud Service Mesh, pode configurar o Cloud Service Mesh para usar o Certificate Authority Service. Este guia oferece-lhe uma oportunidade de integração com o serviço de CA, que é recomendado para os seguintes exemplos de utilização:

  • Se precisar de diferentes autoridades de certificação para assinar certificados de carga de trabalho em diferentes clusters.
  • Se precisar de fazer uma cópia de segurança das suas chaves de assinatura num HSM gerido.
  • Se estiver num setor altamente regulamentado e estiver sujeito a conformidade.
  • Se quiser encadear a sua AC do Cloud Service Mesh a um certificado de raiz empresarial personalizado para assinar certificados de carga de trabalho.

O custo da autoridade de certificação do Cloud Service Mesh está incluído nos preços do Cloud Service Mesh. O serviço de AC não está incluído no preço base da Cloud Service Mesh e é cobrado separadamente. Além disso, o serviço de AC inclui um SLA explícito, mas a autoridade de certificação da malha de serviços na nuvem não.

Requisitos

Ative a API necessária no projeto onde o conjunto de ACs vai ser configurado.

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

Configure o serviço de CA

  1. Crie o conjunto de ACs no nível DevOps e na mesma região que o cluster que serve para evitar problemas de latência excessiva ou potenciais interrupções entre regiões. Para mais informações, consulte o artigo Níveis otimizados para cargas de trabalho.
  2. Crie a AC para ter, pelo menos, uma autoridade de certificação ativa no grupo de ACs no mesmo projeto que o cluster do GKE. Use ACs subordinadas para assinar certificados de carga de trabalho da Cloud Service Mesh. Anote o conjunto de ACs correspondente à AC subordinada.
  3. Se se destinar apenas a certificados de serviço para cargas de trabalho da Cloud Service Mesh, configure a seguinte política de emissão para o conjunto de ACs:

    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 conjunto de ACs, use o seguinte comando:

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

    Para obter informações sobre como definir uma política num conjunto, consulte o artigo Usar uma política de emissão de certificados.

  5. Se estiver a usar um modelo de certificado, configure-o agora. Para mais informações, siga o guia do serviço de AC para certificados de identidade de carga de trabalho. Certifique-se de que o modelo de certificado é criado na mesma região que o conjunto de ACs. Se existirem várias regiões para pools de ACs, crie um modelo de certificado por região.

Funções necessárias para usar o serviço de AC

Para esta integração, todas as cargas de trabalho no Cloud Service Mesh requerem as seguintes funções da IAM. Estas associações de funções têm de ser aplicadas explicitamente para cargas de trabalho da 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 usar modelos de certificados:

    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 aprovisionar o plano de controlo da Cloud Service Mesh. A alteração da CA não é suportada.

Configure a malha de serviço na nuvem gerida para usar o serviço de AC

  1. Verifique se o espaço de nomes istio-system existe ou crie-o se estiver em falta:

      kubectl create ns istio-system
    
  2. Verifique se o configmap asm-options existe no espaço de nomes istio-system:

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

      kubectl create configmap -n istio-system asm-options
    
  4. Aplique uma patch ao configmap para adicionar a configuração da 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 precisar de um modelo de certificado, anexe o ID do modelo ao endereço do conjunto de ACs 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 os passos de configuração, continue a instalação do Cloud Service Mesh gerido ativando a gestão automática.