エンタープライズ証明書の条件の構成

BeyondCorp Enterprise の重要な原則は、「サービスへのアクセス権限は、ユーザーとそのデバイスについてサービス提供側が知っている情報に基づき付与される」ことです。1 人のユーザーまたは 1 つのデバイスに与えられるアクセスレベルは、複数のデータソースを調べることによって動的に推定されます。BeyondCorp Enterprise は、このレベルの信頼を意思決定プロセスの一部として使用します。

Access Context Manager は、BeyondCorp Enterprise のゼロトラスト ポリシー エンジンです。Access Context Manager を使用すると、管理者はアプリケーションと Google Cloud リソースに対するきめ細かい属性ベースのアクセス制御を定義できます。

アクセスレベルを使用して、リクエストに関するコンテキスト情報に基づいてリソースへのアクセスを許可します。アクセスレベルを使用すると、信頼の階層を整理できるようになります。たとえば、High_Level というアクセスレベルを作成して、高い権限を持つユーザーの少人数のグループからのリクエストを許可できます。リクエストを許可する IP 範囲など、信頼できるより一般的なグループを特定することもできます。その場合、Medium_Level というアクセスレベルを作成して、これらのリクエストを許可します。

ゼロトラスト アクセスの主な要件の 1 つは、デバイスが会社によって管理または所有されている場合のみアクセスを許可することです。デバイスが会社の所有かどうかを判断する方法は多数あり、会社が発行した有効な証明書がデバイスに存在するかどうかで判断する方法はその 1 つです。デバイスにエンタープライズ証明書が存在することで、そのデバイスが会社所有であることを確認できます。

コンテキストアウェア アクセス用のエンタープライズ証明書は、BeyondCorp Enterprise の証明書ベース アクセス ソリューション全体の一つの機能です。この機能は、デバイス証明書を代替のコンテキストアウェア シグナルとして使用して、デバイスが企業所有のアセットかどうかを判断します。この機能は Chrome ブラウザ 110 以降でサポートされています。

デバイスには複数の証明書を含めることができます。そのため、マクロ .exist(e,p) を使用してカスタム アクセスレベルでエンタープライズ証明書にアクセスできます。

device.certificates.exists(cert, predicate)

この例では、cert は、predicator で使用するシンプルな識別子であり、デバイス証明書にバインドされます。exist() マクロは、要素ごとの述語結果を「or」(||)演算子で結合します。つまり、少なくとも 1 つの証明書が predicate 式を満たしている場合、マクロは true を返します。

証明書には次のような属性があり、これらは同時にチェックできます。文字列の比較では大文字と小文字が区別されます。

属性 説明 述語式の例(cert はマクロの識別子)
is_valid 証明書が有効で期限切れでない場合は true (ブール値)。cert.is_valid
cert_fingerprint 証明書のフィンガープリント(Base64 のパディングなしの SHA256)

フィンガープリントは、DER エンコード形式の証明書の、Base64 でエンコードされたパディングなしの SHA256 ダイジェスト(バイナリ形式)です。OpenSSL で次の手順を使用し、PEM 形式の証明書から文字列を生成できます。

$ openssl x509 -in cert.pem -out cert.der -outform DER
$ openssl dgst -sha256 -binary cert.der > digest.sha
$ openssl base64 -in digest.sha

cert.cert_fingerprint == origin.clientCertFingerprint()
root_ca_fingerprint 証明書の署名に使用するルート CA 証明書のフィンガープリント(Base64 のパディングなしの SHA256)。

フィンガープリントは、DER エンコード形式の証明書の、Base64 でエンコードされたパディングなしの SHA256 ダイジェスト(バイナリ形式)です。OpenSSL で次の手順を使用し、PEM 形式の証明書から文字列を生成できます。

$ openssl x509 -in cert.pem -out cert.der -outform DER
$ openssl dgst -sha256 -binary cert.der > digest.sha
$ openssl base64 -in digest.sha

cert.root_ca_fingerprint == "the_fingerprint"
issuer 発行元の名前(完全に展開された名前)

発行者名を調べるには、次の方法があります。

証明書で次のコマンドを実行します。

$ openssl x509 -in ca_1.crt -issuer issuer= /C=IN/ST=UP/L=NCR/O=BCEDemo/OU=BCEDemo_1/CN=inter_1/emailAddress=test_inter1@beyondcorp.in

アクセスレベルで使用される発行元の文字列は出力の逆で、「/」をカンマで置き換えます。例:

EMAILADDRESS=test_inter1@beyondcorp.in, CN=inter_1, OU=BCEDemo_1, O=BCEDemo, L=NCR, ST=UP, C=IN

cert.issuer == "EMAILADDRESS=test_inter1@beyondcorp.in, CN=inter_1, OU=BCEDemo_1, O=BCEDemo, L=NCR, ST=UP, C=IN"
subject 証明書のサブジェクト名(完全に展開された名前) cert.subject == "CA_SUB"
serial_number 証明書のシリアル番号(文字列) cert.serial_number = "123456789"
template_id 証明書の X.509 拡張機能の証明書テンプレートのテンプレート ID(文字列)。cert.template_id = "1.3.6.1.4.1.311.21.8.15608621.11768144.5720724.16068415.6889630.81.2472537.7784047"

次の表に、設定可能なポリシーの例を示します。

ポリシーの例
デバイスに、会社のルート証明書によって署名された有効な証明書がある。 device.certificates.exists(cert, cert.is_valid && cert.root_ca_fingerprint == "ROOT_CA_FINGERPRINT")
デバイスに発行元 CA_ABC. が発行した有効な証明書がある device.certificates.exists(cert, cert.is_valid && cert.issuer == "EMAILADDRESS=test_inter1@beyondcorp.in, CN=inter_1, OU=BCEDemo_1, O=BCEDemo, L=NCR, ST=UP, C=IN")

エンタープライズ証明書の構成

エンタープライズ証明書を構成する前に、カスタム アクセスレベルを構成していることを確認してください。手順については、カスタム アクセスレベルの作成をご覧ください。

Access Context Manager のカスタム アクセスレベル定義を使用して、適切なポリシーを設定できます。カスタム アクセスレベルでは、Common Expression Language(CEL)のサブセットで作成されたブール式を使用して、リクエストを発行するクライアントの属性をテストします。

管理コンソールでのトラスト アンカーのアップロード

BeyondCorp Enterprise がデバイスのエンタープライズ証明書を収集して検証するためには、デバイス証明書の発行に使用するトラスト アンカーをアップロードする必要があります。ここでのトラスト アンカーは、自己署名ルート CA(認証局)証明書と、それに関連する中間証明書や下位証明書を指します。トラスト アンカーをアップロードするには、次の手順に従います。

  1. [管理コンソール] に移動し、[デバイス] > [ネットワーク] > [証明書] に移動します。
  2. 適切な組織部門を選択します。
  3. [証明書を追加] を選択します。
  4. 証明書名を入力します。
  5. 証明書をアップロードします。
  6. [エンドポイントの確認] チェックボックスをオンにします。
  7. [Add] をクリックします。
  8. トラスト アンカーがアップロードされる組織部門にユーザーが属していることを確認します。

AutoSelectCertificateForUrls ポリシーを構成する

Endpoint Verification が Chrome でデバイス証明書を検索して収集するには、次の手順で AutoSelectCertificateForURLs Chrome ポリシーを構成する必要があります。

  1. Chrome ブラウザ クラウド管理で Chrome ブラウザが管理されていることを確認します。

  2. 管理コンソールで AutoSelectCertificateForUrls ポリシーを追加します。

    1. [管理コンソール] に移動し、[デバイス] > [Chrome] > [設定] > [ユーザーとブラウザの設定] > [クライアント証明書] に移動します。
    2. 適切な組織部門を選択します。
    3. 次の例に示すように、ポリシー AutoSelectCertificateForUrls を追加します。

      {"pattern":"https://[*.]clients6.google.com","filter":{"ISSUER":{"CN":"CERTIFICATE_ISSUER_NAME"}}}
      

      CERTIFICATE_ISSUER_NAME は、ルート CA の共通名に置き換えます。pattern の値は変更しないでください。

ポリシーの構成を確認するには、次の手順を行います。

  1. ブラウザで chrome://policy に移動します。
  2. AutoSelectCertificateForUrls に構成されている値を確認します。
  3. ポリシー[対象] の値が [マシン] に設定されていることを確認します。Chrome オペレーティング システムの場合、値は[Current User]* に適用されます。
  4. ポリシーのステータス競合がないことを確認します。

構成のトラブルシューティング

[デバイスの詳細] ページの証明書属性を調べて、証明書の属性が正しくリストされていることを確認します。

エンドポイントの確認ログは、問題のトラブルシューティングに役立ちます。エンドポイントの確認ログをダウンロードするには、次の手順を行います。

  1. エンドポイントの確認拡張機能を右クリックし、[オプション] に移動します。
  2. [ログレベル] > [すべて] > [ログのダウンロード] を選択します。
  3. Cloud カスタマーケアでサポートケースを開き、デバッグのためにログを共有します。