Demander un certificat

Cette page décrit la procédure à suivre pour demander un certificat à l'aide du service d'autorité de certification.

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

Avant de pouvoir demander un certificat, assurez-vous de disposer des autorisations requises et d'un fichier kubeconfig.

Autorisations requises

Pour obtenir les autorisations nécessaires pour demander un certificat, demandez à votre administrateur IAM de l'organisation de vous accorder le rôle Demandeur de certificat de service de l'autorité de certification (certificate-authority-service-certificate-requester). Pour en savoir plus sur les rôles, consultez Définitions des rôles.

Obtenir le fichier kubeconfig

Pour exécuter des commandes sur le serveur de l'API Management, procédez comme suit :

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

  2. 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.

    Si vous le souhaitez, vous pouvez émettre le certificat avec un ensemble préconfiguré de paramètres X.509 en saisissant le nom du modèle dans le champ 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_OVERRIDE
    

    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é.

    Remplacez les variables facultatives suivantes :

    Variable Description
    TEMPLATE_NAME Nom du modèle de certificat prédéfini que vous souhaitez utiliser. Pour obtenir la liste des modèles disponibles et en savoir plus sur les conflits, consultez Modèles de certificat prédéfinis.
    VALIDITY_START_TIME Heure à partir de laquelle le certificat est considéré comme valide. Cette valeur doit être au format YYYY-MM-DDTHH:MM:SSZ (par exemple, 2025-10-19T21:45:30Z). Si elle n'est pas définie, le certificat est valide immédiatement après son émission.
    VALIDITY_END_TIME Heure à laquelle le certificat expire. Cette valeur doit être au format YYYY-MM-DDTHH:MM:SSZ (par exemple, 2026-01-17T18:25:40Z). Si elle n'est pas définie, le certificat expire 90 jours après son heure de début.
    SUBJECT_OVERRIDE Objet personnalisé à utiliser dans le certificat émis, qui remplace les informations sur l'objet dans la CSR. Indiquez cette valeur en tant que sujet X.509 brut encodé en ASN.1 DER.
  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.

    Si vous le souhaitez, vous pouvez émettre le certificat avec un ensemble préconfiguré de paramètres X.509 en saisissant le nom du modèle dans le champ 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_OVERRIDE
    

    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.
    SECRET_NAME Nom du secret Kubernetes contenant la clé privée et le certificat CA signé.

    Remplacez les variables facultatives suivantes. Vous devez inclure au moins l'un des champs du bloc spec.certificateConfig.subjectConfig de la ressource CertificateRequest :

    Variable Description
    COMMON_NAME Nom commun du certificat.
    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.
    TEMPLATE_NAME Nom du modèle de certificat prédéfini que vous souhaitez utiliser. Pour obtenir la liste des modèles disponibles et en savoir plus sur les conflits, consultez Modèles de certificat prédéfinis.
    VALIDITY_START_TIME Heure à partir de laquelle le certificat est considéré comme valide. Cette valeur doit être au format YYYY-MM-DDTHH:MM:SSZ (par exemple, 2025-10-19T21:45:30Z). Si elle n'est pas définie, le certificat est valide immédiatement après son émission.
    VALIDITY_END_TIME Heure à laquelle le certificat expire. Cette valeur doit être au format YYYY-MM-DDTHH:MM:SSZ (par exemple, 2026-01-17T18:25:40Z). Si elle n'est pas définie, le certificat expire 90 jours après son heure de début.
    SUBJECT_OVERRIDE Objet personnalisé à utiliser dans le certificat émis, qui remplace les informations sur l'objet dans la CSR. Indiquez cette valeur en tant que sujet X.509 brut encodé en ASN.1 DER.
  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