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
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é. 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.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" }
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
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 dedNSName 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.Appliquez la ressource personnalisée à votre instance Distributed Cloud :
kubectl apply -f cert-request.yaml --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
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" }
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