VM に対して証明書ベースのアクセスを有効にする

このページでは、Google Cloud VM の証明書ベースのアクセス(CBA)を有効にする方法について説明します。CBA を使用すると、信頼できるデバイスから Google Cloud VM へのアクセスが保護されます。

概要

VM の CBA は、Google Cloud のコンテキストアウェア アクセス機能を使用して、相互 TLS(mTLS)でアクセスを保護します。VM で CBA を有効にして使用するために連携する主要コンポーネントは次のとおりです。

  • Access Context Manager: ユーザーがウェブ アプリケーションにアクセスしようとしたときに証明書を要求するアクセスレベルを作成できます。
  • Identity-Aware Proxy(IAP): IAP TCP 転送を使用すると、暗号化されたトンネルを確立し、SSH、RDP、その他のトラフィックを VM インスタンスに転送できます。また、IAP ポリシーでは、特定の VM インスタンスへのトンネルの確立を許可するユーザーと、そのようなトンネルを使用する際にユーザーが満たす必要があるアクセス条件をきめ細かく制御できます。
  • Chrome Enterprise ポリシー: Chrome ブラウザを使用するときに、ユーザーと VM の間で相互認証(mTLS)を行います。
  • Google Cloud CLI: gcloud CLI を使用するときに、ユーザーと VM 間の相互認証(mTLS)を提供します。

始める前に

Google Cloud プロジェクト用の CBA アクセスレベルを作成したことを確認します。

IAP TCP 転送を介して VM にアクセスするためのロールを付与する

プロジェクトに対して適切な Identity and Access Management(IAM)ロールを付与し、ユーザーまたはユーザー グループが IAP TCP 転送を使用して VM にアクセスできるようにする必要があります

次の表は、TCP 転送と関連タスクのために信頼できる管理者に付与する必要がある事前定義ロールを示しています。

タスク ロール 詳細
TCP 転送 IAP で保護されたトンネル ユーザー(roles/iap.tunnelResourceAccessor プロジェクト内のすべての VM インスタンスへのアクセスを許可するまたは特定の VM へのアクセスを許可する
SSH アクセス Compute インスタンス管理者(v1)(roles/compute.instanceAdmin.v1
OS Login(推奨) 複数 ユーザー アカウントに対して OS ログインの役割を構成する
サービス アカウントを使用する サービス アカウント ユーザー(roles/iam.serviceAccountUser serviceAccountUser のロール

IAP TCP 転送のロールの付与の詳細については、IAP TCP 転送のロールを付与するをご覧ください。

VM への証明書ベースのアクセスを構成する

IAP-TCP では、プロジェクト内のすべての VM インスタンスへのアクセスを許可できますが、個々の VM インスタンスごとに証明書ベースのアクセスを構成する必要があります。

証明書ベースの VM へのアクセス権をユーザーまたはユーザー グループに付与するには、VM インスタンスに対する roles/iap.tunnelResourceAccessor ロールを付与します。他のロールはプロジェクトに付与する必要があります。

コンソール

  1. [IAP 管理] ページを開き、[SSH と TCP のリソース] タブを選択します。

    IAP ページに移動

  2. 構成する VM インスタンスを選択します。 情報パネルが表示されていない場合は、[情報パネルを表示] をクリックします。

  3. [プリンシパルを追加] をクリックして、以下を構成します。

    • 新しいプリンシパル: アクセスを許可するユーザーまたはユーザー グループを指定します。
    • [ロールを選択]: [Cloud IAP] > [IAP で保護されたトンネル ユーザー] を選択します。
  4. [IAM 条件を追加] をクリックして、条件を構成します。

    • タイトル: 条件の名前を入力します。
    • [条件作成ツール]: [条件タイプ] プルダウンから [アクセスレベル] を選択し、前の手順で作成した証明書ベースのアクセスレベルを選択します。
  5. [保存] をクリックします。

API

VM への証明書ベースのアクセスを構成するには、アプリケーションの policy.json ファイルを変更します。

IAM API を使用してアクセス ポリシーを管理する方法については、IAP で保護されたリソースへのアクセスの管理をご覧ください。

  1. 次の変数をエクスポートします。

    export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_tunnel
    # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
    export JSON_NEW_POLICY=POLICY_FILE.JSON
    
  2. getIamPolicy メソッドを使用して、Compute Engine インスタンスの IAM ポリシーを取得します。最後にある空のデータビットを使用して、curl リクエストを GET ではなく POST に変えます。

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
         ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:getIamPolicy \
         -d ''
    
  3. iap.tunnelResourceAccessor ロールと証明書ベースのアクセスをプリンシパルに付与するには、IAM ポリシーの JSON ファイルを変更します。

    以下は、iap.tunnelResourceAccessor ロールを VM インスタンス管理者のグループに付与し、IAP で保護されたトンネル リソースに証明書ベースのアクセスを付与する policy.json ファイルの例です。

    プリンシパルにオーナーのロールがある場合、TCP 転送に IAP を使用する権限が付与されています。

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/iap.tunnelResourceAccessor",
            "members": ["group:instance-admins@example.com"],
            "condition": {
              "expression": "\"accessPolicies/POLICY_NAME/accessLevels/CERTIFICATE_BASED_ACCESS_LEVEL_NAME\" in request.auth.access_levels,
              "title": "CERTIFICATE_BASED_CONDITION_NAME"
            }
          }
        ]
      }
    }
    

    ポリシー名を見つけるには、accessPolicies.list メソッドを呼び出します。

    GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
    
  4. setIamPolicy メソッドを使用して、新しい policy.json ファイルを設定します。

    curl -i -H "Content-Type:application/json" \
              -H "Authorization: Bearer $(gcloud auth print-access-token)" \
              ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:setIamPolicy \
              -d @${JSON_NEW_POLICY}
    

クライアント証明書を使用して VM にアクセスする

クライアント証明書を使用して VM にアクセスするには、次のいずれかのメソッドを使用します。

Chrome ブラウザでクライアント証明書を使用して VM にアクセスする

  1. 次のいずれかのオプションを使用して Chrome ブラウザを設定します。
  2. Chrome ブラウザで次のドメインを入力して、Google Cloud コンソール: console-secure.cloud.google.com にアクセスします。
  3. IAP トンネリングを使用して Google Cloud VM にアクセスします。

gcloud CLI でクライアント証明書を使用して VM にアクセスする

  1. 次のいずれかの方法で gcloud CLI を構成します。

  2. IAP トンネリングを使用して Google Cloud VM にアクセスします。