ルート認証局の作成

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

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

このドキュメントは、プロジェクト内の証明書のライフサイクルを管理するアプリケーション デベロッパーやデータ サイエンティストなど、アプリケーション オペレーター グループ内のユーザーを対象としています。詳細については、GDC エアギャップ ドキュメントの対象読者をご覧ください。

始める前に

ルート認証局を作成する前に、必要な権限をリクエストして環境を準備する必要があります。

IAM ロールをリクエストする

ルート認証局を作成、更新、削除するには、IAM 組織管理者に連絡して、Certificate Authority Service 管理者(certificate-authority-service-admin)ロールをリクエストします。

環境を準備する

ルート認証局の作成

ルート 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 証明書のリクエストされた有効期間。時間単位で指定します(例: 1000h)。日(d)や年(y)などの単位はサポートされていません。
    SECRET_NAME 秘密鍵と署名付き CA 証明書を保持する Kubernetes Secret の名前。

    次の変数はオプションの値です。

    変数 説明
    RENEW_BEFORE CA 証明書の有効期限が切れる前のローテーション時間。
    ORGANIZATION 証明書で使用される組織。
    ORGANIZATIONAL_UNITS 証明書で使用される組織部門。
    COUNTRIES 証明書で使用される国。
    LOCALITIES 証明書で使用される都市。
    PROVINCES 証明書で使用する都道府県。
    STREET_ADDRESSES 証明書で使用する番地。
    POSTAL_CODES 証明書で使用する郵便番号。
    EXTENDED_KEY_USAGE 証明書の鍵の拡張的用途。指定する場合、使用できる値は serverAuth と clientAuth です。
    KEY_ALGORITHYM この証明書に使用される秘密鍵アルゴリズム。指定できる値は RSA、Ed25519、ECDSA です。サイズが指定されていない場合、デフォルトは ECDSA の場合は 256、RSA の場合は 2048 です。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