ルート認証局の作成

このページでは、Google Distributed Cloud(GDC)エアギャップでルート認証局(CA)を作成する手順について説明します。

公開鍵基盤(PKI)階層の最上位にあるルート CA は、PKI のトラスト アンカーを確立します。PKI 内で証明書を使用するには、デバイス、ソフトウェア、コンポーネントがルート CA を信頼する必要があります。この構成により、ルート CA によって発行されたすべての証明書が信頼され、PKI 自体が信頼されるようになります。

始める前に

ルート認証局の作成に必要な権限を取得するには、組織の IAM 管理者に Certificate Authority Service 管理者(certificate-authority-service-admin)ロールの付与を依頼してください。ロールの詳細については、ロールの定義をご覧ください。

kubeconfig ファイルを取得する

Management API サーバーに対してコマンドを実行するには、次のリソースがあることを確認します。

  1. Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。

  2. これらの手順では、Management API サーバーの kubeconfig ファイルのパスを使用して MANAGEMENT_API_SERVER_KUBECONFIG を置き換えます。

ルート認証局の作成

ルート CA を作成するには、カスタム リソースを Distributed Cloud のエアギャップ インスタンスに適用します。

  1. CertificateAuthority リソースを作成し、root-ca.yaml という名前の 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
    

    次の変数を置き換えます。

    変数 説明
    ROOT_CA_NAME ルート CA の名前。
    USER_PROJECT_NAMESPACE ユーザー プロジェクトが存在する Namespace の名前。
    COMMON_NAME CA 証明書の共通名。
    DURATION リクエストされた CA 証明書の有効期間。
    SECRET_NAME 秘密鍵と署名付き CA 証明書を保持する Kubernetes Secret の名前。

    次の変数は省略可能な値です。

    変数 説明
    RENEW_BEFORE CA 証明書の有効期限が切れるまでのローテーション時間。
    ORGANIZATION 証明書で使用される組織。
    ORGANIZATIONAL_UNITS 証明書で使用される組織部門。
    COUNTRIES 証明書で使用する国。
    LOCALITIES 証明書に記載する市区町村。
    PROVINCES 証明書で使用する都道府県。
    STREET_ADDRESSES 証明書で使用される住所。
    POSTAL_CODES 証明書で使用する郵便番号。
    EXTENDED_KEY_USAGE 証明書の鍵の拡張的用途。指定する場合、使用できる値は serverAuthclientAuth です。
    KEY_ALGORITHYM この証明書に使用される秘密鍵アルゴリズム。指定できる値は RSAEd25519ECDSA です。サイズが指定されていない場合、デフォルトは ECDSA では 256、RSA では 2, 048 です。Ed25519 ではキーサイズは無視されます。
    KEY_SIZE この証明書の秘密鍵のサイズ(ビット単位)は、アルゴリズムによって異なります。RSA では、2048、3072、4096、8192 を指定できます(デフォルトは 2048)。ECDSA では 256、384、521 を指定できます(デフォルトは 256)。Ed25519 はサイズを無視します。
    ACME_ENABLED true に設定すると、CA は ACME モードで実行され、ACME サーバーの URL が出力されます。ACME クライアントとプロトコルを使用して、証明書を管理できます。

  2. カスタム リソースを Distributed Cloud インスタンスに適用します。

    kubectl apply -f root-ca.yaml –kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG
    

    MANAGEMENT_API_SERVER_KUBECONFIG は、Management API サーバーの kubeconfig ファイルへのパスに置き換えます。

  3. ルート CA の準備状況を確認します。通常、CA が準備完了するまでに約 40 分かかります。

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

    出力は次のようになります。

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

CA を一覧表示する

Distributed Cloud のエアギャップ インスタンス内のすべての Certificate Authority Service リソースを一覧表示するには、次の操作を行います。

certificateauthorities パラメータを使用して、すべての CertificateAuthority リソースを一覧表示します。

   kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG -n USER_PROJECT_NAMESPACE get certificateauthorities

出力は次のようになります。

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