BeyondCorp Enterprise アプリコネクタを使用した Google Cloud 以外のアプリケーションの保護

このページでは、BeyondCorp Enterprise アプリコネクタを設定して使用する方法について説明します。

概要

BeyondCorp Enterprise アプリコネクタを使用すると、Google Cloud 以外の環境とオンプレミス環境で動作している HTTPS アプリケーションに ID とコンテキストアウェア アクセスを提供できます。BeyondCorp Enterprise アプリコネクタは、BeyondCorp Enterprise 適用プレーンと Google Cloud 以外の環境およびオンプレミス環境で動作しているアプリケーションとの間の安全な認証済みインターフェースです。

BeyondCorp Enterprise アプリコネクタは、Google Cloud と組織の環境を接続する TCP プロキシです。TCP プロキシには、Google Cloud でホストされるエンドユーザー向けコンポーネントと、組織の環境でホストされるアプリケーション向けコンポーネントがあります。BeyondCorp Enterprise アプリコネクタを使用するために、ファイアウォールを開けることや、サイト間 Cloud VPN 接続を設定する必要はありません。

始める前に

BeyondCorp Enterprise アプリコネクタを使用するには、次のものが必要です。

現時点では、HTTPS アプリケーションでのみ、BeyondCorp Enterprise アプリコネクタを使用できます。

各 BeyondCorp Enterprise アプリコネクタ エージェントには、Docker を実行する Linux VM が必要です。次の Linux ディストリビューションをおすすめします。

  • Debian 10.7(buster)
  • Red Hat Enterprise Linux Server 7.8(Maipo)x86_64
  • Ubuntu 16.04 以降

Linux VM ハードウェアには、少なくとも 2 個の CPU、2 GB の RAM をおすすめします。

BeyondCorp Enterprise アプリコネクタを設定してデプロイする

BeyondCorp Enterprise アプリコネクタを設定してデプロイするために必要な主な手順は次のとおりです。

  • Google Cloud プロジェクトを設定する
  • アプリコネクタのリモート エージェントをインストールする
  • リモート アプリケーションを VPC に接続する
  • 外部 HTTP(S) ロードバランサを構成する
  • Identity-Aware Proxy の有効化

Google Cloud プロジェクトを設定する

BeyondCorp Enterprise アプリコネクタを使用する Google Cloud プロジェクトを設定するには、BeyondCorp Enterprise API を有効にする必要があります。API は、次の手順で有効にします。

  1. 次のコマンドを実行して、必要な環境変数を設定します。

    PROJECT_ID=my-project
    

    my-project は、Google Cloud プロジェクト ID に置き換えます。

  2. 次のコマンドを実行して、API を有効にします。

    gcloud config set project $PROJECT_ID
    gcloud services enable beyondcorp.googleapis.com
    

アプリコネクタのリモート エージェントをインストールする

コネクタのリモート エージェント VM は、BeyondCorp Enterprise で保護するアプリケーションをホストするネットワーク環境ごとにデプロイする必要があります。作成するリモート エージェントごとに、専用の VM または Docker がインストールされた Bare Metal サーバーが必要です。

リモート エージェントを作成するには、次の手順を行います。

  1. アプリケーション環境に VM インスタンスを作成します。
  2. リモート エージェントをインストールします。

    1. curl を実行して、DNS が正しく構成されアプリケーションにアクセスできることを確認します。
    2. Docker Engine をインストールします。
    3. リモート エージェント VM で次のコマンドを実行します。
      curl https://raw.githubusercontent.com/GoogleCloudPlatform/beyondcorp-applink/main/bash-scripts/install-beyondcorp-runtime -o ./install-beyondcorp-runtime && chmod +x ./install-beyondcorp-runtime && ./install-beyondcorp-runtime
      
    4. 画面の手順に沿って、リモート エージェント CLI である bce-connctl のエイリアスを作成します。
    5. 次のコマンドを実行して、必要な環境変数を設定します。

      PROJECT_ID=my-project
      REGION=us-central1
      CONNECTOR_NAME=my-connector
      

      次のように置き換えます。

      • my-project: Google Cloud プロジェクト ID。
      • us-central1: 接続とゲートウェイをデプロイするリージョン。
      • my-connector: コネクタの名前。
    6. bce-connctl CLI で次のコマンドを実行して、コネクタを登録します。

      bce-connctl init --project=$PROJECT_ID --region=$REGION --connector=$CONNECTOR_NAME
      

      画面の指示に沿って登録スクリプトをコピーして貼り付け、コネクタの登録を完了します。登録スクリプトを実行するには、プロジェクトに対する OWNER 権限が必要です。

      登録スクリプトが完了すると、ランタイムはコネクタの構成を自動的に同期します。

  3. リモート エージェントのインストールを確認します。

    1. 次のコマンドを実行して、サービスが動作していることを確認します。
      sudo systemctl status beyondcorp
      
    2. リモート エージェントは、3 つの Docker コンテナ(bce-control-runtimebce-logagentbce-connector)で構成されます。次のコマンドを実行して、3 つのコンテナがすべて動作していることを確認します。
      docker ps --filter name=bce
      
    3. (省略可)次のコマンドを実行して、Docker コンテナのログファイルを確認できます。
      docker logs -f CONTAINER_NAME
      
      CONTAINER_NAME は、Docker コンテナ名に置き換えます。

リモート アプリケーションを VPC に接続する

次の手順を実施する前に、gcloud CLI SDK がインストールされ、beyondcorp.admin ロールを持つアカウントでログインしていることを確認します。

  1. 次のコマンドを実行して、必要な環境変数を設定します。

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    PROJECT_ID=my-project
    REGION=us-central1
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    次のように置き換えます。

    • my-connector: 前の手順で定義したコネクタの名前。
    • my-connection: 接続の一意の名前。
    • my-project: Google Cloud プロジェクト ID。
    • us-central1: 接続とゲートウェイをデプロイするリージョン。
    • APP_HOST: アプリケーションをホストするオンプレミスの IP アドレスまたは FQDN。
    • APP_PORT: アプリケーションに接続するポート番号。
  2. アプリケーションと VPC の間の接続を作成するために、次のコマンドを実行します。

    gcloud alpha beyondcorp app connections create $CONNECTION_NAME \
       --project=$PROJECT_ID \
       --location=$REGION \
       --application-endpoint=$APP_ENDPOINT \
       --type=tcp \
       --connectors=$CONNECTOR_NAME \
       --display-name=$CONNECTION_NAME
    

    この手順は、完了まで数分かかることがあります。

  3. 接続を作成したら、次のコマンドを実行してゲートウェイ URI を取得します。

    GATEWAY_URI="$(gcloud alpha beyondcorp app connections describe $CONNECTION_NAME --project=$PROJECT_ID --location=$REGION --format='get(gateway.uri)')"
    GATEWAY_URI_L7="${GATEWAY_URI/bce-psc/"bce-ps7"}"
    

    GATEWAY_URI_L7 は、転送ルールの作成に使用されます。BeyondCorp Enterprise アプリコネクタは、Private Service Connect を使用して、ユーザー プロジェクトを Google 管理プロジェクトのマネージド リソースにリンクします。

外部 HTTP(S) ロードバランサを構成する

外部 HTTP(S) ロードバランサには、HTTPS アプリケーションのみ接続できます。HTTP アプリケーションはサポートされていません。

  1. 次のコマンドを実行して、必要な環境変数を設定します。

    LB_PREFIX=web-app
    PROJECT_ID=my-project
    REGION=us-central1
    DOMAIN_NAME=app.example.com
    
    次のように置き換えます。

    • web-app: すべてのロードバランサ リソースの名前に追加される接頭辞。
    • my-project: Google Cloud プロジェクト ID。
    • us-central1: 接続とゲートウェイがデプロイされるリージョン。
    • app.example.com: アプリケーションのドメイン名。
  2. 次のコマンドを実行して、NEG ベースのバックエンド サービスを作成し、Private Service Connect サービス アタッチメントに接続します。

    gcloud beta compute network-endpoint-groups create $LB_PREFIX-neg \
        --region=$REGION \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=$GATEWAY_URI_L7
    
    gcloud beta compute backend-services create $LB_PREFIX-backend-service \
        --global \
        --protocol=HTTPS \
        --load-balancing-scheme=EXTERNAL_MANAGED
    
    gcloud beta compute backend-services add-backend $LB_PREFIX-backend-service \
        --global \
        --network-endpoint-group=$LB_PREFIX-neg \
        --network-endpoint-group-region=$REGION
    
  3. 次のコマンドを実行して、ドメインの Google マネージド証明書を作成します。

    gcloud compute addresses create $LB_PREFIX-static-ip \
        --ip-version=IPV4 \
        --global
    gcloud compute ssl-certificates create $LB_PREFIX-ssl-cert \
        --domains=$DOMAIN_NAME \
        --global
    
    LB_IP="$(gcloud compute addresses describe $LB_PREFIX-static-ip --global --format='value(address)')"
    
  4. 次のコマンドを実行して、前の手順のバックエンドに基づいて外部 HTTP(S) ロードバランサを作成します。

    gcloud compute url-maps create $LB_PREFIX-map-https \
        --default-service=$LB_PREFIX-backend-service
    
    gcloud compute target-https-proxies create $LB_PREFIX-https-lb-proxy \
        --url-map=$LB_PREFIX-map-https \
        --ssl-certificates=$LB_PREFIX-ssl-cert
    
    gcloud beta compute forwarding-rules create "$LB_PREFIX-https-lb-forwarding-rule" \
        --global \
        --target-https-proxy=$LB_PREFIX-https-lb-proxy \
        --address=$LB_IP \
        --ports=443 \
        --load-balancing-scheme=EXTERNAL_MANAGED
    

    外部 HTTP(S) ロードバランサが作成されると、その IP アドレスによってインターネット経由でアプリケーションにアクセスできるようになります。

  5. 外部 HTTP(S) ロードバランサを作成した後、Google Cloud が SSL 証明書をプロビジョニングできるように、IP アドレスをドメイン名に関連付ける必要があります。IP アドレスを DNS 名に関連付ける方法については、DNS プロバイダの手順をご覧ください。次のコマンドを実行して、プロビジョニング ステータスを確認します。

    1. DNS プロバイダで設定する IP アドレスを表示します。
        echo "Load Balancer ip address - $LB_IP"
        
    2. DNS を設定したら、次のコマンドを実行して、ドメイン名が IP アドレスに解決されるかどうかを確認します。
        dig $DOMAIN_NAME
        
    3. 次のコマンドを実行して、プロビジョニングのステータスを取得します。

      gcloud compute ssl-certificates describe $LB_PREFIX-ssl-cert \
        --global \
        --format="get(name,managed.status, managed.domainStatus)"
      

    SSL 証明書をプロビジョニングすると、DNS 名を使用してアプリケーションにアクセスできるようになります。

Identity-Aware Proxy の有効化

Identity-Aware Proxy の設定については、Identity-Aware Proxy のドキュメントをご覧ください。Identity-Aware Proxy を設定したら、OAuth CLIENT_ID と OAuth CLIENT_SECRET を使用して次の手順を行い、バックエンド サービスで Identity-Aware Proxy を有効にします。

  1. OAuth クライアント ID、OAuth クライアント シークレットに基づいて環境変数を設定します。

    CLIENT_ID=replace-with-client-id
    CLIENT_SECRET=replace-with-client-secret
    

    次のように置き換えます。

    • replace-with-client-id: Cloud Console からの OAuth CLIENT_ID 値。
    • replace-with-client-secret: Cloud Console からの OAuth CLIENT_SECRET 値。
  2. 次のコマンドを実行して、Identity-Aware Proxy を有効にします。

      gcloud compute backend-services update $LB_PREFIX-backend-service \
         --global \
         --iap=enabled,oauth2-client-id=$CLIENT_ID,oauth2-client-secret=$CLIENT_SECRET
    
  3. 次のコマンドを実行して、ユーザーにアプリケーションへのアクセス権を付与します。

    gcloud iap web add-iam-policy-binding \
        --resource-type=backend-services \
        --service=$LB_PREFIX-backend-service \
        --member="user:user-ldap@mydomain.com" \
        --role="roles/iap.httpsResourceAccessor"
    

    user-ldap@mydomain.com は、適切なユーザー アカウントに置き換えます。

これで、オンプレミス アプリケーションがインターネットに公開され、BeyondCorp Enterprise によって保護されます。