Demander un certificat

Cette page décrit la procédure à suivre pour demander un certificat à l'aide de Certificate Authority Service.

Pour établir la confiance et sécuriser la communication dans votre environnement Google Distributed Cloud (GDC) sous air gap, demandez un certificat ACME activé ou désactivé auprès de Certificate Authority Service.

Avant de commencer

Pour obtenir les autorisations nécessaires pour demander un certificat, demandez à votre administrateur IAM de l'organisation de vous accorder le rôle Administrateur du service d'autorité de certification (certificate-authority-service-admin).

Obtenir le fichier kubeconfig

Pour exécuter des commandes sur le serveur de l'API Management, assurez-vous de disposer des ressources suivantes :

Connectez-vous et générez le fichier kubeconfig pour le serveur d'API Management si vous n'en avez pas.

Utilisez le chemin d'accès au fichier kubeconfig du serveur de l'API Management pour remplacer MANAGEMENT_API_SERVER_KUBECONFIG dans ces instructions.

Demander un certificat à l'aide d'une autorité de certification avec le mode ACME activé

Si l'autorité de certification est hébergée en mode ACME, elle génère l'URL du serveur ACME dans son état une fois qu'elle est prête.

Récupérez l'URL du serveur ACME de l'autorité de certification à partir de votre environnement Distributed Cloud :

kubectl get certificateauthorities CA_NAME -n USER_PROJECT_NAMESPACE -ojson | jq -r '.status.acme.uri'

Remplacez les éléments suivants :

  • CA_NAME : nom de l'autorité de certification, qui peut être une autorité de certification racine ou subordonnée.
  • USER_PROJECT_NAMESPACE : nom de l'espace de noms dans lequel réside le projet utilisateur.

Demander un certificat à l'aide de l'autorité de certification avec le mode ACME désactivé

Pour créer une demande de certificat avec le mode ACME désactivé, vous devez créer et appliquer une ressource CertificateRequest à votre instance Distributed Cloud isolée. Pour ce faire, il existe deux moyens :

  • Créez un CertificateResource et incluez un CSR dans la ressource.
  • Créez un CertificateResource à l'aide d'une clé privée générée automatiquement par GDC et fournissez les configurations de certificat en tant que valeurs personnalisées.

Demander un certificat à l'aide d'une CSR

  1. Créez une ressource CertificateRequest et enregistrez-la en tant que fichier YAML nommé cert-request.yaml. Utilisez votre clé privée pour créer une requête de signature de certificat (CSR) et l'ajouter à votre ressource :

    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
      signedCertificateSecret: SECRET_NAME
    

    Remplacez les variables suivantes :

    Variable Description
    CERT_REQ_NAME Nom du certificat.
    USER_PROJECT_NAMESPACE Nom de l'espace de noms dans lequel réside le projet utilisateur.
    CA_NAME Nom de l'autorité de certification, qui peut être une autorité de certification racine ou subordonnée.
    CSR Demande de signature de certificat à signer à l'aide de l'autorité de certification.
    SECRET_NAME Nom du secret Kubernetes contenant la clé privée et le certificat CA signé.
  2. Appliquez la ressource personnalisée à votre instance Distributed Cloud :

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    

    Remplacez MANAGEMENT_API_SERVER_KUBECONFIG par le chemin d'accès au fichier kubeconfig du serveur de l'API Management.

  3. Vérifiez que la demande de certificat est prête :

    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))'
    

    Le résultat ressemble à ce qui suit :

    {
      "lastTransitionTime": "2025-01-27T12:22:59Z",
      "message": "Certificate is issued",
      "observedGeneration": 1,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  4. Récupérez le nom du secret du certificat :

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'
    

    Le résultat affiche le SECRET_NAME contenant le certificat signé :

    test-jwk-1
    

Demander un certificat à l'aide d'une clé générée automatiquement

  1. Créez une ressource CertificateRequest et enregistrez-la en tant que fichier YAML nommé cert-request.yaml. Renseignez les valeurs choisies pour le certificat :

    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
      signedCertificateSecret: SECRET_NAME
    

    Remplacez COMMON_NAME par le nom commun du certificat.

    Remplacez les variables facultatives suivantes. Vous devez inclure au moins l'une de ces valeurs dans la ressource CertificateRequest :

    Variable Description
    ORGANIZATION Organisation à utiliser sur le certificat.
    LOCALITY Localité du certificat.
    STATE État ou province à utiliser sur le certificat.
    COUNTRY Pays du certificat.
    DNS_NAMES DNSNames est une liste de dNSName subjectAltNames à définir sur le certificat.
    IP_ADDRESS Liste des ipAddress subjectAltNames à définir sur le certificat.
    RFC822_NAMES Liste des rfc822Name subjectAltNames à définir sur le certificat.
    URIS Liste des uniformResourceIdentifier subjectAltNames à définir sur le certificat.
  2. Appliquez la ressource personnalisée à votre instance Distributed Cloud :

    kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    
  3. Vérifiez que la demande de certificat est prête :

    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))'
    

    Le résultat ressemble à ce qui suit :

    {
      "lastTransitionTime": "2025-01-27T12:22:59Z",
      "message": "Certificate is issued",
      "observedGeneration": 1,
      "reason": "Issued",
      "status": "True",
      "type": "Ready"
    }
    
  4. Récupérez le nom du secret du certificat :

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequest.pki.security.gdc.goog/CERT_REQ_NAME -ojson | jq -r '.spec.signedCertificateSecret'
    

    Le résultat affiche le SECRET_NAME contenant le certificat signé :

    test-jwk-1
    

Lister les demandes de certificat

Utilisez le paramètre certificaterequests pour lister toutes les ressources CertificateRequest :

   kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificaterequests

La sortie ressemble à ceci :

   NAMESPACE    NAME               READY   AGE
   foo          cert-req           True    30s