Nesta página, descrevemos as etapas para solicitar um certificado usando o Certificate Authority Service.
Para estabelecer confiança e comunicação segura no seu Google Distributed Cloud (GDC) isolado, solicite um certificado ativado ou desativado para ACME do Certificate Authority Service.
Antes de começar
Antes de solicitar um certificado, verifique se você tem as permissões necessárias e um arquivo kubeconfig.
Permissões necessárias
Para receber as permissões necessárias para solicitar um certificado, peça ao administrador do IAM da organização para conceder a você o papel de solicitante de certificado do serviço de AC (certificate-authority-service-certificate-requester). Para mais informações sobre papéis, consulte
Definições de papéis.
Receber o arquivo kubeconfig
Para executar comandos no servidor da API Management, faça o seguinte:
Faça login e gere o arquivo kubeconfig para o servidor da API Management se você não tiver um.
Use o caminho para o arquivo kubeconfig do servidor da API Management para substituir
MANAGEMENT_API_SERVER_KUBECONFIGnestas instruções.
Solicitar um certificado usando a CA com o modo ACME ativado
Se a autoridade certificadora estiver hospedada no modo ACME, ela vai gerar o URL do servidor ACME no status depois que estiver pronta.
Reúna o URL do servidor ACME da CA no seu ambiente do Distributed Cloud:
kubectl get certificateauthorities CA_NAME -n USER_PROJECT_NAMESPACE -ojson | jq -r '.status.acme.uri'
Substitua:
CA_NAME: o nome da CA, que pode ser uma CA raiz ou subordinada.USER_PROJECT_NAMESPACE: o nome do namespace em que o projeto do usuário reside.
Solicitar um certificado usando a CA com o modo ACME desativado
Para criar uma solicitação de certificado com o modo ACME desativado, crie e aplique um recurso CertificateRequest à sua instância isolada do Distributed Cloud. Há duas maneiras de fazer isso:
- Crie um
CertificateResourcee inclua uma CSR no recurso. - Crie um
CertificateResourceusando uma chave privada gerada automaticamente pelo GDC e forneça as configurações de certificado como valores personalizados.
Solicitar um certificado usando uma CSR
Crie um recurso
CertificateRequeste salve-o como um arquivo YAML chamadocert-request.yaml. Use sua chave privada para criar uma solicitação de assinatura de certificado (CSR) e adicione-a ao seu recurso.Se quiser, emita o certificado com um conjunto pré-configurado de parâmetros X.509 inserindo o nome do modelo no campo
certificateTemplate.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_OVERRIDESubstitua as seguintes variáveis:
Variável Descrição CERT_REQ_NAME O nome do certificado. USER_PROJECT_NAMESPACE O nome do namespace em que o projeto do usuário está localizado. CA_NAME O nome da CA, que pode ser uma CA raiz ou subordinada. CSR A solicitação de assinatura de certificado a ser assinada usando a CA. SECRET_NAME O nome do secret do Kubernetes que contém a chave privada e o certificado de CA assinado. Substitua as seguintes variáveis opcionais:
Variável Descrição TEMPLATE_NAME O nome do modelo de certificado predefinido que você quer usar. Para uma lista de modelos disponíveis e detalhes sobre conflitos, consulte Modelos de certificado predefinidos. VALIDITY_START_TIME O tempo a partir do qual o certificado é considerado válido. Esse valor precisa estar no formato YYYY-MM-DDTHH:MM:SSZ(por exemplo,2025-10-19T21:45:30Z). Se não for definido, o certificado será válido imediatamente após a emissão.VALIDITY_END_TIME O horário em que o certificado expira. Esse valor precisa estar no formato YYYY-MM-DDTHH:MM:SSZ(por exemplo,2026-01-17T18:25:40Z). Se não for definido, o certificado vai expirar 90 dias após o horário de início.SUBJECT_OVERRIDE Um assunto personalizado a ser usado no certificado emitido, substituindo as informações do assunto na CSR. Forneça esse valor como o assunto X.509 bruto codificado em ASN.1 DER. Aplique o recurso personalizado à sua instância do Distributed Cloud:
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGSubstitua
MANAGEMENT_API_SERVER_KUBECONFIGpelo caminho para o arquivo kubeconfig do servidor da API Management.Verifique se a solicitação de certificado está pronta:
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))'O resultado será assim:
{ "lastTransitionTime": "2025-01-27T12:22:59Z", "message": "Certificate is issued", "observedGeneration": 1, "reason": "Issued", "status": "True", "type": "Ready" }Consiga o nome do secret do certificado:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'A saída mostra o
SECRET_NAMEque contém o certificado assinado:test-jwk-1
Solicitar um certificado usando uma chave gerada automaticamente
Crie um recurso
CertificateRequeste salve-o como um arquivo YAML chamadocert-request.yaml. Preencha os valores escolhidos para o certificado.Se quiser, emita o certificado com um conjunto pré-configurado de parâmetros X.509 inserindo o nome do modelo no campo
certificateTemplate.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_OVERRIDESubstitua as seguintes variáveis:
Variável Descrição CERT_REQ_NAME O nome do certificado. USER_PROJECT_NAMESPACE O nome do namespace em que o projeto do usuário está localizado. CA_NAME O nome da CA, que pode ser uma CA raiz ou subordinada. SECRET_NAME O nome do secret do Kubernetes que contém a chave privada e o certificado de CA assinado. Substitua as seguintes variáveis opcionais. É necessário incluir pelo menos um dos campos do bloco
spec.certificateConfig.subjectConfigdo recursoCertificateRequest:Variável Descrição COMMON_NAME O nome comum do certificado. ORGANIZATION Organização a ser usada no certificado. LOCALITY A localidade do certificado. STATE Estado ou província a ser usado no certificado. COUNTRY O país do certificado. DNS_NAMES DNSNamesé uma lista dedNSName subjectAltNamesa serem definidas no certificado.IP_ADDRESS Uma lista de ipAddress subjectAltNamesa serem definidas no certificado.RFC822_NAMES Uma lista de rfc822Name subjectAltNamesa serem definidas no certificado.URIS Uma lista de uniformResourceIdentifier subjectAltNamesa serem definidos no certificado.TEMPLATE_NAME O nome do modelo de certificado predefinido que você quer usar. Para uma lista de modelos disponíveis e detalhes sobre conflitos, consulte Modelos de certificado predefinidos. VALIDITY_START_TIME O tempo a partir do qual o certificado é considerado válido. Esse valor precisa estar no formato YYYY-MM-DDTHH:MM:SSZ(por exemplo,2025-10-19T21:45:30Z). Se não for definido, o certificado será válido imediatamente após a emissão.VALIDITY_END_TIME O horário em que o certificado expira. Esse valor precisa estar no formato YYYY-MM-DDTHH:MM:SSZ(por exemplo,2026-01-17T18:25:40Z). Se não for definido, o certificado vai expirar 90 dias após o horário de início.SUBJECT_OVERRIDE Um assunto personalizado a ser usado no certificado emitido, substituindo as informações do assunto na CSR. Forneça esse valor como o assunto X.509 bruto codificado em ASN.1 DER. Aplique o recurso personalizado à sua instância do Distributed Cloud:
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGVerifique se a solicitação de certificado está pronta:
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))'O resultado será assim:
{ "lastTransitionTime": "2025-01-27T12:22:59Z", "message": "Certificate is issued", "observedGeneration": 1, "reason": "Issued", "status": "True", "type": "Ready" }Consiga o nome do secret do certificado:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'A saída mostra o
SECRET_NAMEque contém o certificado assinado:test-jwk-1
Listar solicitações de certificado
Use o parâmetro certificaterequests para listar todos os recursos CertificateRequest:
kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequests
A saída será assim:
NAMESPACE NAME READY AGE
foo cert-req True 30s