証明書テンプレートを作成する

このページでは、証明書テンプレートの属性と、証明書テンプレートの作成方法について説明します。証明書テンプレートの詳細については、証明書テンプレートについてをご覧ください。

必要なロール

証明書テンプレートの作成に必要な権限を取得するには、プロジェクト、フォルダ、または組織に対する CA Service オペレーション マネージャー roles/privateca.caManager)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

証明書テンプレートを作成する

証明書テンプレートを作成するには、次のいずれかの方法を使用します。

コンソール

  1. Google Cloud コンソールの [Certificate Authority Service] ページに移動します。

    Certificate Authority Service に移動

  2. [テンプレート マネージャー] タブをクリックし、[テンプレートを作成] をクリックします。

  3. [リージョン] リストを使用して、証明書テンプレートのロケーションを選択します。これは、証明書テンプレートで使用する CA プールと同じロケーションである必要があります。

  4. [証明書テンプレート ID] フィールドに、証明書テンプレートの一意の識別子を入力します。必要に応じて、証明書テンプレートの説明を入力します。

  5. [次へ] をクリックします。

  6. このテンプレートを使用する証明書のデフォルトの X.509 値を構成する場合は、[この証明書テンプレートを使用して発行される証明書に、事前に定義された値を含める] 切り替えをクリックします。[事前定義の値を構成] をクリックします。

  7. 次の情報を使用して、事前定義の値を設定します。

    鍵の基本的用途を定義する

    この設定は、デジタル証明書内の Key Usage フィールドを指します。証明書の秘密鍵の使用方法(鍵の暗号化、データ暗号化、証明書署名、CRL 署名など)を指定します。詳細については、鍵の用途をご覧ください。

    1. 鍵の基本的用途を選択するには、[この CA プールから発行される証明書に関する、鍵の基本的用途を指定する] 切り替えボタンをクリックし、表示されたオプションから選択します。
    2. [次へ] をクリックします。

    鍵の拡張的用途を定義する

    この設定は、デジタル証明書の Extended Key Usage (EKU) フィールドを指します。サーバー認証、クライアント認証、コード署名、メール保護など、キーの使用方法に関するより具体的で洗練された制限を提供します。詳細については、鍵の拡張的用途をご覧ください。

    鍵の拡張的用途は、オブジェクト ID(OID)を使用して定義されます。鍵の拡張的用途を構成しない場合は、すべての鍵の使用シナリオが許可されます。

    1. 鍵の拡張的用途を選択するには、[この CA プールから発行される証明書に関する、鍵の拡張的用途を書き込む] 切り替えボタンをクリックし、表示されたオプションから選択します。
    2. [次へ] をクリックします。

    ポリシー識別子を定義する

    証明書の証明書ポリシー拡張機能は、発行 CA のプールが従うポリシーを表します。この拡張機能には、証明書の発行前に ID を検証する方法、証明書が取り消される方法、CA プールの完全性を確保する方法に関する情報を含めることができます。この拡張機能は、CA プールが発行する証明書を検証し、証明書がどのように使用されているかを確認するのに役立ちます。

    詳細については、証明書ポリシーをご覧ください。

    証明書の用途を定義するポリシーを指定するには、次の操作を行います。

    1. 省略可: [ポリシー識別子] フィールドにポリシー識別子を追加します。
    2. [次へ] をクリックします。

    認証局情報アクセス(AIA)OCSP サーバーを追加する

    証明書の AIA 拡張機能には次の情報が含まれます。

    • 証明書の取り消しステータスを確認できる OCSP サーバーのアドレス。
    • 証明書の発行者のアクセス方法。

    詳細については、認証局情報アクセスをご覧ください。

    OCSP サーバーの追加は任意です。証明書の AIA 拡張機能フィールドに表示される OCSP サーバーを追加するには、次の操作を行います。

    1. [項目を追加] をクリックします。
    2. [サーバー URL] フィールドに、OCSP サーバーの URL を追加します。
    3. [完了] をクリックします。
    4. [次へ] をクリックします。

    CA オプション

    証明書テンプレート内の [CA オプション] フィールドは、結果の証明書を認証局(CA)階層で使用する方法を定義します。基本的には、証明書を他の証明書の署名に使用できるかどうか、使用できる場合は発行する証明書に対する制限があるかどうかを判断します。

    次のいずれかを選択します。

    1. CA X.509 拡張機能の構成ファイルを含める: X.509 拡張機能を制御する証明書テンプレート内の設定を指定します。

    2. 発行済み証明書を CA にのみ使用するように制限する: このオプションは、前の手順で説明したチェックボックスをオンにした場合にのみ表示されます。このブール値は、証明書が CA 証明書かどうかを示します。true に設定されている場合、証明書は他の証明書の署名に使用できます。false の場合、エンド エンティティ証明書であり、他の証明書に署名できません。この切り替えをクリックすると、CA 証明書の拡張機能に名前の制約を定義するよう求められます。

    3. パスの長さを制限する X.509 拡張機能の構成ファイルを含めます: 特定の証明書から派生する証明書チェーンの長さを制御する設定を指定します。この CA 証明書までチェーンできる CA の最大数を指定します。発行元のパスの最大長が 0 に設定されている場合、CA はエンド エンティティ証明書のみを発行できます。1 に設定されている場合、この CA 証明書の下のチェーンに下位 CA を 1 つだけ含めることができます。値が宣言されていない場合、この CA の下のチェーン内の下位 CA の数は無制限になります。

    4. [次へ] をクリックします。

    追加の拡張機能を構成する

    省略可: CA プールによって発行された証明書に含めるように追加のカスタム拡張機能を構成できます。手順は次のとおりです。

    1. [項目を追加] をクリックします。
    2. [オブジェクト識別子] フィールドに、ドット区切りの数字の形式で有効なオブジェクト識別子を追加します。
    3. [] フィールドに、識別子を base64 でエンコードした値を追加します。
    4. 高重要度な拡張機能である場合は、[高重要度な拡張機能] を選択します。
  8. すべての事前定義値を保存するには、[完了] をクリックします。

  9. 次に、拡張機能の制約を構成するセクションに進みます。次のいずれかのオプションを選択します。

    • 証明書リクエストから証明書にすべての拡張をコピーする
    • 証明書リクエストからすべての拡張を削除する
    • 証明書リクエストから証明書に特定の拡張をコピーする
  10. 特定の拡張機能をコピーする場合は、次の操作を行います。
    • [既知の証明書拡張機能] フィールドをクリックし、不要な拡張機能をリストから削除します。
    • [カスタム拡張機能] フィールドに、CA プールが発行する証明書に含める拡張機能のオブジェクト識別子を追加します。

  11. [次へ] をクリックして、[ID 制約を構成する] セクションに進みます。CA プールが発行する証明書のサブジェクトと SAN の制約を構成するには、次のいずれかまたは両方のオプションを選択します。

    • 証明書リクエストから証明書にサブジェクトをコピーする
    • 証明書リクエストから証明書にサブジェクト代替名(SAN)をコピーする
    省略可: [ID 制約を構成する] セクションで、Common Expression Language(CEL)式を追加して、証明書のサブジェクトに対する制限を定義します。詳細については、CEL の使用をご覧ください。

  12. [次へ]、[完了] の順にクリックします。

gcloud

gcloud privateca templates create TEMPLATE_ID \
  --copy-subject \
  --copy-sans \
  --identity-cel-expression <expr> \
  --predefined-values-file FILE_PATH \
  --copy-all-requested-extensions \
  --copy-extensions-by-oid <1.2.3.4,5.6.7.8> \
  --copy-known-extensions <ext1,ext2>

以下を置き換えます。

  • TEMPLATE_ID: 証明書テンプレートの固有識別子。
  • FILE_PATH: 証明書テンプレートによって設定された X.509 値を記述する YAML ファイル。

--copy-sans フラグを使用すると、証明書リクエストからサブジェクト代替名(SAN)拡張機能が署名付き証明書にコピーされます。または、--no-copy-sans を指定して、呼び出し元が指定した SAN を証明書リクエストからドロップできます。

--copy-subject フラグを使用すると、証明書リクエストからサブジェクトを署名付き証明書にコピーできます。または、--no-copy-subject を指定して、呼び出し元が指定したサブジェクトを証明書リクエストからドロップすることもできます。

--identity-cel-expression フラグは、発行前に証明書のサブジェクトとサブジェクト代替名に対して評価される CEL 式を受け取り、リクエストを許可するかどうかを示すブール値を返します。証明書テンプレートで Common Expression Language(CEL)式を使用する方法については、証明書テンプレートで CEL を使用するをご覧ください。

--predefined-values-file フラグは、このテンプレートによって設定された、事前定義された X.509 値を記述する YAML ファイルへのパスを指定します。指定された拡張機能は、このテンプレートを使用する証明書リクエストにコピーされ、証明書リクエストで許可されている拡張機能よりも優先されます。事前定義された X.509 値の一部を更新すると、更新によって事前定義された X.509 値のセット全体が置き換えられます。

--copy-all-requested-extensions フラグが設定されている場合、証明書リクエストで指定されたすべての拡張機能が署名済み証明書にコピーされます。

--copy-extensions-by-oid フラグが設定されている場合、特定の OID が証明書リクエストから署名付き証明書にコピーされます。

--copy-known-extensions フラグが設定されている場合、特定の拡張機能が証明書リクエストから署名済み証明書にコピーされます。これらの既知の拡張子は、base-key-usageextended-key-usageca-optionspolicy-idsaia-ocsp-servers のいずれかです。

証明書リクエスト内の X.509 拡張機能をすべて無視し、このテンプレートで定義されている事前定義値は保持するには、--copy-all-requested-extensions フラグを削除します。

証明書テンプレートの構成例を次に示します。

keyUsage:
  baseKeyUsage:
    digitalSignature: true
    keyEncipherment: true
    contentCommitment: false
    dataEncipherment: false
    keyAgreement: false
    certSign: false
    crlSign: false
    encipherOnly: false
    decipherOnly: false
  extendedKeyUsage:
    serverAuth: true
    clientAuth: false
    codeSigning: false
    emailProtection: false
    timeStamping: false
    ocspSigning: false
caOptions:
  isCa: true
  maxIssuerPathLength: 1
policyIds:
- objectIdPath:
  - 1
  - 2
  - 3
additionalExtensions:
- objectId:
    objectIdPath:
    - 1
    - 2
    - 3
  critical: false
  value: "base64 encoded extension value"

YAML で指定されていない値は省略されるか、デフォルトの false に設定されます。

値が指定されていない場合、次の拡張機能は省略されます。

  • keyUsage
  • policyIds
  • additionalExtensions
  • caOptions 拡張機能の maxIssuerPathLength フィールド

次の拡張機能は、値が指定されていない場合、デフォルトで false になります。

  • caOptions 拡張機能の isCa フィールド

一般的なシナリオの証明書テンプレートを作成する

このセクションでは、一般的なユースケースの証明書テンプレートを作成するための gcloud コマンドについて説明します。

任意のドメイン用の DNS サーバーの TLS 証明書

任意のドメインを許可するサーバー TLS 証明書を発行するための証明書テンプレートを作成する手順は次のとおりです。

  1. leaf_server_tls_values.yaml という名前のファイルを作成し、次のエンド エンティティ サーバーの TLS 構成を追加します。

    leaf_server_tls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
    caOptions:
      isCa: false
    
  2. DNS タイプの SAN を持つ証明書のみを許可するには、次の gcloud コマンドを実行します。

    gcloud

    gcloud privateca templates create server-tls \
      --predefined-values-file leaf_server_tls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == DNS)"
    

    gcloud privateca templates create コマンドの詳細については、gcloud privateca templates create をご覧ください。

テスト ドメインのみを含む DNS サーバーの TLS 証明書

DNS SAN がテスト ドメインに制限されたサーバー TLS 証明書を発行する証明書テンプレートを作成するには、次の gcloud コマンドを使用します。

gcloud

gcloud privateca templates create server-tls \
  --predefined-values-file leaf_server_tls_values.yaml \
  --copy-sans --no-copy-subject \
  --identity-cel-expression "subject_alt_names.all(san, san.type == DNS && san.value.endsWith('.test.example.com'))"

leaf_server_tls_values.yaml ファイルの内容は、前の例と同じである必要があります。

CEL 式を使用して DNS 名が特定の文字列で開始または終了するようにする方法については、CEL 式の例をご覧ください。

Workload Identity 証明書

相互 TLS(mTLS)証明書を発行する証明書テンプレートを作成する手順は次のとおりです。

  1. leaf_mtls_values.yaml という名前のファイルを作成し、次のエンド エンティティの相互 TLS 構成を追加します。

    leaf_mtls_values.yaml

    keyUsage:
      baseKeyUsage:
        digitalSignature: true
        keyEncipherment: true
      extendedKeyUsage:
        serverAuth: true
        clientAuth: true
    caOptions:
      isCa: false
    
  2. SPIFFE URI SAN を含む証明書のみを許可するには、次の gcloud コマンドを使用します。

    gcloud

    gcloud privateca templates create workload-spiffe \
      --predefined-values-file leaf_mtls_values.yaml \
      --copy-sans --no-copy-subject \
      --identity-cel-expression "subject_alt_names.all(san, san.type == URI && san.value.startsWith('spiffe://'))"
    

    gcloud privateca templates create コマンドの詳細については、gcloud privateca templates create をご覧ください。

CEL 式を使用して DNS 名が特定の文字列で開始または終了するようにする方法については、CEL 式の例をご覧ください。

証明書テンプレートへのアクセス権を付与する

CA Service 証明書テンプレート ユーザー(roles/privateca.templateUser)のロールがある場合は、証明書テンプレートを使用できます。証明書テンプレートの作成者は、その証明書テンプレートを使用する可能性がある組織内のメンバーに CA Service 証明書テンプレート ユーザー ロールを付与することをおすすめします。

example.com ドメインのすべてのユーザーに CA Service 証明書テンプレート ユーザー(roles/privateca.templateUser)のロールを付与するには、次の gcloud コマンドを使用します。

gcloud

gcloud privateca templates add-iam-policy-binding TEMPLATE_ID \
  --member "domain:example.com" \
  --role "roles/privateca.templateUser"

以下を置き換えます。

  • TEMPLATE_ID: 証明書テンプレートの固有識別子。

gcloud privateca templates add-iam-policy-binding コマンドの詳細については、gcloud privateca templates add-iam-policy-binding をご覧ください。

CA Service の IAM ロールとそれに関連する権限の詳細については、IAM によるアクセス制御をご覧ください。

次のステップ