Créer une autorité de certification racine

Ce document décrit la procédure à suivre pour créer une autorité de certification (CA) racine dans Google Distributed Cloud (GDC) sous air gap.

Une autorité de certification racine, qui se trouve au sommet de la hiérarchie de l'infrastructure à clé publique (PKI), établit l'ancre de confiance pour la PKI. Pour utiliser des certificats dans une PKI, les appareils, les logiciels et les composants doivent approuver l'autorité de certification racine. Cette configuration garantit la confiance dans tous les certificats émis par l'autorité de certification racine, ce qui permet de faire confiance à la PKI elle-même.

Ce document est destiné aux audiences du groupe d'opérateurs d'applications, tels 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 créer une autorité de certification racine, vous devez demander les autorisations nécessaires et préparer votre environnement.

Demander des rôles IAM

Pour créer, mettre à jour et supprimer une autorité de certification racine, contactez l'administrateur IAM de votre organisation pour demander le rôle Administrateur du service d'autorité de certification (certificate-authority-service-admin).

Préparer votre environnement

Créer une autorité de certification racine

Pour créer une autorité de certification racine, appliquez une ressource personnalisée à votre instance Distributed Cloud sous air gap.

  1. Créez une ressource CertificateAuthority et enregistrez-la dans un fichier YAML nommé root-ca.yaml :

    apiVersion: pki.security.gdc.goog/v1
    kind: CertificateAuthority
    metadata:
      name: ROOT_CA_NAME
      namespace: USER_PROJECT_NAMESPACE
    spec:
      caProfile:
        commonName: COMMON_NAME
        duration: DURATION
        renewBefore: RENEW_BEFORE
        organizations:
        - ORGANIZATION
        organizationalUnits:
        - ORGANIZATIONAL_UNITS
        countries:
        - COUNTRIES
        localities:
        - LOCALTIES
        provinces:
        - PROVINCES
        streetAddresses:
        - STREET_ADDRESSES
        postalCodes:
        - POSTAL_CODES
      caCertificate:
        selfSignedCA: {}
      certificateProfile:
        keyUsage:
          - digitalSignature
          - keyCertSign
          - crlSign
        extendedKeyUsage:
          - EXTENDED_KEY_USAGE
      secretConfig:
        secretName: SECRET_NAME
        privateKeyConfig:
          algorithm: KEY_ALGORITHM
          size: KEY_SIZE
      acme:
        enabled: ACME_ENABLED
    

    Remplacez les variables suivantes :

    Variable Description
    ROOT_CA_NAME Nom de l'autorité de certification racine.
    USER_PROJECT_NAMESPACE Nom de l'espace de noms dans lequel réside le projet utilisateur.
    COMMON_NAME Nom commun du certificat CA.
    DURATION Durée de vie demandée du certificat CA. Spécifiez une durée en heures (par exemple, 1000h). Les unités telles que les jours (d) ou les années (y) ne sont pas acceptées.
    SECRET_NAME Nom du secret Kubernetes contenant la clé privée et certificat CA signé.

    Les variables suivantes sont des valeurs facultatives :

    Variable Description
    RENEW_BEFORE Délai de rotation avant l'expiration du certificat CA.
    ORGANIZATION Organisation à utiliser sur le certificat.
    ORGANIZATIONAL_UNITS Unités organisationnelles à utiliser sur le certificat.
    COUNTRIES Pays à utiliser sur le certificat.
    LOCALITIES Villes à utiliser sur le certificat.
    PROVINCES État ou province à utiliser sur le certificat.
    STREET_ADDRESSES Adresses postales à utiliser sur le certificat.
    POSTAL_CODES Codes postaux à utiliser sur le certificat.
    EXTENDED_KEY_USAGE Utilisation étendue de la clé pour le certificat. Si elle est fournie, les valeurs autorisées sont serverAuth et clientAuth.
    KEY_ALGORITHYM Algorithme de clé privée utilisé pour ce certificat. Les valeurs autorisées sont RSA, Ed25519, ou ECDSA. Si la taille n'est pas fournie, elle est définie par défaut sur 256 pour ECDSA et 2048 pour RSA. La taille de la clé est ignorée pour Ed25519.
    KEY_SIZE La taille, en bits, de la clé privée de ce certificat dépend de l'algorithme. RSA autorise 2048, 3072, 4096 ou 8192 (par défaut, 2048). ECDSA autorise 256, 384 ou 521 (par défaut, 256). Ed25519 ignore la taille.
    ACME_ENABLED Si la valeur est définie sur true, l'autorité de certification s'exécute en mode ACME et génère l' URL du serveur ACME. Vous pouvez ensuite utiliser le client et le protocole ACME pour gérer les certificats.

  2. Appliquez la ressource personnalisée à votre instance Distributed Cloud :

    kubectl apply -f root-ca.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 l'autorité de certification racine est prête. Il faut généralement environ 40 minutes pour que l'autorité de certification soit prête :

    kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificateauthority.pki.security.gdc.goog/ROOT_CA_NAME -ojson | jq -r ' 
    .status.conditions[] | select( .type as $id | "Ready" | index($id))
    

    La sortie ressemble à ceci :

    {
      "lastTransitionTime": "2025-01-24T17:09:19Z",
      "message": "CA reconciled",
      "observedGeneration": 2,
      "reason": "Ready",
      "status": "True",
      "type": "Ready"
    }
    

Lister les autorités de certification

Pour lister toutes les ressources du service Certificate Authority Service dans votre instance Distributed Cloud sous air gap, procédez comme suit :

Utilisez le paramètre certificateauthorities pour lister toutes les ressources CertificateAuthority :

   kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificateauthorities

La sortie ressemble à ceci :

   NAMESPACE    NAME              READY   REASON   AGE
   foo          root-ca           True    Ready    7h24m
   foo          sub-ca            True    Ready    7h24m