Ce document décrit la procédure à suivre pour demander un certificat à l'aide du service d'autorité de certification (CAS, Certificate Authority Service).
Pour établir la confiance et sécuriser la communication dans votre Google Distributed Cloud (GDC) sous air gap, demandez un certificat ACME activé ou désactivé au service Certificate Authority Service.
Ce document est destiné aux audiences du groupe d'opérateurs d'application, telles que les développeurs d'applications ou les data scientists, qui gèrent les cycles de vie des certificats dans leur projet. Pour en savoir plus, consultez la documentation sur les audiences pour GDC sous air gap.
Avant de commencer
Avant de pouvoir demander un certificat, vous devez demander les autorisations nécessaires et préparer votre environnement.
Demander des rôles IAM
Pour créer, afficher et supprimer des demandes de certificat, contactez l'administrateur IAM de votre organisation afin qu'il vous attribue le rôle Demandeur de certificat du service d'autorité de certification (certificate-authority-service-certificate-requester) dans l'espace de noms du projet de l'autorité de certification.
Préparer votre environnement
Téléchargez et installez la CLI gdcloud, si ce n'est pas déjà fait.
Générez un fichier kubeconfig pour configurer l'accès
kubectl.
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 dans 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éeUSER_PROJECT_NAMESPACE: nom de l'espace de noms dans lequel réside le projet utilisateur
Demander un certificat à l'aide d'une 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 sous air gap. Pour ce faire, il existe deux moyens :
- Créez une
CertificateResourceet incluez une requête de signature de certificat dans la ressource. - Créez une
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 requête de signature de certificat
Créez une ressource
CertificateRequestet 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 et ajoutez-la à 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_OVERRIDERemplacez les variables suivantes :
Variable Description CERT_REQ_NAME Nom de la ressource CertificateRequestUSER_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 Requête 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 des informations sur les conflits, consultez Modèles de certificats 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, remplaçant les informations d'objet de la requête de signature de certificat. Fournissez cette valeur en tant qu'objet X.509 brut encodé au format ASN.1 DER. Appliquez la ressource personnalisée à votre instance Distributed Cloud :
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGRemplacez
MANAGEMENT_API_SERVER_KUBECONFIGpar le chemin d'accès au fichier kubeconfig du serveur d'API Management.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))'Remplacez les éléments suivants :
MANAGEMENT_API_SERVER_KUBECONFIG: chemin d'accès au fichier kubeconfig du serveur d'API ManagementUSER_PROJECT_NAMESPACE: nom de l'espace de noms dans lequel réside le projet utilisateurCERT_REQ_NAME: nom de la ressourceCertificateRequest
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" }Obtenez le nom 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'Remplacez les éléments suivants :
MANAGEMENT_API_SERVER_KUBECONFIG: chemin d'accès au fichier kubeconfig du serveur d'API ManagementUSER_PROJECT_NAMESPACE: nom de l'espace de noms dans lequel réside le projet utilisateurCERT_REQ_NAME: nom de la ressourceCertificateRequest
Le résultat affiche le
SECRET_NAMEcontenant le certificat signé :test-jwk-1
Demander un certificat à l'aide d'une clé générée automatiquement
Créez une ressource
CertificateRequestet 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_OVERRIDERemplacez les variables suivantes :
Variable Description CERT_REQ_NAME Nom de la ressource CertificateRequestUSER_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.subjectConfigde la ressourceCertificateRequest: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 Liste des dNSName subjectAltNamesà définir sur le certificatIP_ADDRESS Liste des ipAddress subjectAltNamesà définir sur le certificatRFC822_NAMES Liste des rfc822Name subjectAltNamesà définir sur le certificatURIS Liste des uniformResourceIdentifier subjectAltNamesà définir sur le certificatTEMPLATE_NAME Nom du modèle de certificat prédéfini que vous souhaitez utiliser. Pour obtenir la liste des modèles disponibles et des informations sur les conflits, consultez Modèles de certificats 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, remplaçant les informations d'objet de la requête de signature de certificat. Fournissez cette valeur en tant qu'objet X.509 brut encodé au format ASN.1 DER. Appliquez la ressource personnalisée à votre instance Distributed Cloud :
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIGRemplacez
MANAGEMENT_API_SERVER_KUBECONFIGpar le chemin d'accès au fichier kubeconfig du serveur d'API Management.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))'Remplacez les éléments suivants :
MANAGEMENT_API_SERVER_KUBECONFIG: chemin d'accès au fichier kubeconfig du serveur d'API ManagementUSER_PROJECT_NAMESPACE: nom de l'espace de noms dans lequel réside le projet utilisateurCERT_REQ_NAME: nom de la ressourceCertificateRequest
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" }Obtenez le nom 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'Remplacez les éléments suivants :
MANAGEMENT_API_SERVER_KUBECONFIG: chemin d'accès au fichier kubeconfig du serveur d'API ManagementUSER_PROJECT_NAMESPACE: nom de l'espace de noms dans lequel réside le projet utilisateurCERT_REQ_NAME: nom de la ressourceCertificateRequest
Le résultat affiche le
SECRET_NAMEcontenant 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 certificaterequest.pki.security.gdc.goog
Remplacez les éléments suivants :
MANAGEMENT_API_SERVER_KUBECONFIG: chemin d'accès au fichier kubeconfig du serveur d'API ManagementUSER_PROJECT_NAMESPACE: nom de l'espace de noms dans lequel réside le projet utilisateur
L'exemple suivant montre une commande utilisant l'espace de noms agtest-project :
kubectl --kubeconfig /root/release/root-admin/root-admin-kubeconfig -n agtest-project get certificaterequest.pki.security.gdc.goog
Le résultat ressemble à ce qui suit :
NAME READY AGE
test-externalca-subca-cert-req-with-csr True 17h
test-externalca-subca-cert-req-with-csr-override True 17h
Supprimer un certificat
Pour supprimer un certificat, vous devez supprimer la ressource personnalisée CertificateRequest correspondante. Cette action supprime la ressource de la base de données du service d'autorité de certification.
Recherchez le nom de la
CertificateRequestque vous souhaitez supprimer. Vous pouvez lister les demandes de certificat pour vous aider à trouver le nom.Supprimez la ressource
CertificateRequest:kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE delete certificaterequest.pki.security.gdc.goog/CERT_REQ_NAMERemplacez les éléments suivants :
MANAGEMENT_API_SERVER_KUBECONFIG: chemin d'accès au fichier kubeconfig du serveur d'API ManagementUSER_PROJECT_NAMESPACE: nom de l'espace de noms dans lequel réside le projet utilisateurCERT_REQ_NAME: nom de la ressourceCertificateRequest
Limites et nettoyage des demandes de certificat
Pour assurer la stabilité du système et éviter une utilisation élevée des ressources, le service d'autorité de certification applique des limites au nombre de ressources personnalisées CertificateRequest et propose une fonctionnalité de nettoyage automatique facultative.
Quota de demandes de certificat
Le service d'autorité de certification applique un quota au nombre de ressources personnalisées CertificateRequest par organisation, avec une limite par défaut de 5 000. Le dépassement de cette limite peut dégrader les performances du service d'autorité de certification et du serveur d'API de gestion.
Lorsque le nombre total de ressources CertificateRequest approche le quota (par exemple, à 80% et 90% de la limite), des avertissements s'affichent dans la sortie de la commande lorsque vous créez des demandes. Si vous tentez de créer une CertificateRequest une fois le quota atteint, la demande est refusée.
Un message d'erreur semblable à celui-ci peut s'afficher :
Error from server (Forbidden): error when creating "cert-request.yaml":
admission webhook "certificaterequests.pki.security.gdc.goog" denied the
request: the number of certificate requests has exceeded the per organization
limit of {LIMIT}. Please refer to the guide PLATAUTH-G2102 for troubleshooting
this issue
Si cette erreur se produit, vous devrez peut-être
supprimer les ressources CertificateRequest anciennes ou inutiles. Pour ajuster le quota, contactez un membre du groupe d'opérateurs d'infrastructure de votre organisation. Il peut remplacer le quota en suivant les instructions du
runbook
PLATAUTH-G2102.
Nettoyage automatique
Vous pouvez activer le nettoyage automatique pour supprimer les ressources CertificateRequest expirées. Cette fonctionnalité permet de libérer des ressources en les supprimant après un délai de grâce configurable. Le délai de grâce définit la durée entre l'expiration d'un certificat et la suppression de la ressource CertificateRequest.
Le nettoyage automatique est désactivé par défaut. Un membre du groupe d'opérateurs d'infrastructure de votre organisation peut activer cette fonctionnalité et configurer le délai de grâce en suivant les instructions du runbook PLATAUTH-G2103. La fonctionnalité reste désactivée si le délai de grâce n'est pas défini ou est défini sur zéro.