IAP でオンプレミス アプリとリソースを保護する

このガイドでは、IAP コネクタをデプロイして、Google Cloud の外部にある HTTP ベースのオンプレミス アプリを Identity-Aware Proxy(IAP)で保護する方法について説明します。

IAP がオンプレミスのアプリとリソースを保護する仕組みについては、オンプレミス アプリ用 IAP の概要をご覧ください。

始める前に

始める前に、次のものが必要になります。

  • インストール済みの Google Cloud SDK
  • DNS ホスト名によるアクセスが可能で、HTTPS トラフィックを受け入れる HTTP ベースのオンプレミス アプリ。アプリには独自の IAP インスタンスも必要です。
  • アプリが一般公開されていない場合は、Cloud Interconnect を使用して Google Cloud とオンプレミス アプリの間の接続を確立します。
  • Google Cloud プロジェクトでオーナーロールが付与されている Cloud Identity メンバー。
  • 課金が有効になっている Google Cloud プロジェクト
  • Google Cloud へのトラフィックの受信ポイントとして使用する DNS ホスト名。例: www.hr-domain.com
  • オンプレミス アプリの DNS ホスト名。たとえば、hr-internal.domain.com
  • Google Cloud へのトラフィックの受信ポイントとして使用する DNS ホスト名の SSL 証明書または TLS 証明書。既存のセルフマネージドまたは Google 管理の証明書を使用できます。証明書がない場合は、Let's Encrypt を使用して証明書を作成してください。

必要な API の有効化

IAP コネクタを構成するには、次の API を有効にする必要があります。

  1. Compute Engine API を有効にします。

    Compute Engine API を有効にする

  2. Google Kubernetes Engine API を有効にします。

    Google Kubernetes Engine API を有効にする

  3. Cloud Deployment Manager API V2 を有効にします。

    Cloud Deployment Manager API V2 を有効にする

IAP コネクタ デプロイの作成

IAP コネクタDeployment Manager のテンプレートです。デプロイすると、テンプレートにより、IAP で認証および承認されたリクエストをオンプレミス アプリに転送するために必要なリソースとルーティング ルールが生成されます。ここでは、IAP コネクタの構成とデプロイについて説明します。

権限の設定

IAP コネクタをデプロイするには、Google Cloud プロジェクトの Google API サービス エージェント アカウントに Kubernetes Engine 管理者のロールが必要です。このサービス アカウントを使用すると、Deployment Manager で Google Kubernetes Engine(GKE)クラスタとそこで実行されるすべてのリソースを作成できます。

Google API サービス エージェント アカウントに Kubernetes Engine 管理者のロールを付与するには、次のようにします。

  1. IAM ページに移動
    IAM ページに移動
  2. [メンバーを編集] をクリックして、PROJECT_NUMBER@cloudservices.gserviceaccount.com メンバーの権限を編集します。
  3. [別のロールを追加] をクリックし、[ロール] プルダウンから [Kubernetes Engine] > [Kubernetes Engine 管理者] を選択します。
  4. [保存] をクリックします。

これで、Google API サービス エージェント アカウントにプロジェクトに対する編集者のロールと Kubernetes Engine 管理者のロールが付与されました。

SSL 証明書リソースの作成

IAP コネクタの HTTP(S) ロードバランサ プロキシを構成する際は、新しい SSL 証明書リソースが必要になります。

gcloud コマンドライン ツールで、SSL または TLS 証明書と秘密鍵を使用して SSL 証明書リソースを作成するには、次のようにします。

  1. compute ssl-certificates create を使用して、SSL 証明書リソースを作成します。

    gcloud compute ssl-certificates create CERTIFICATE_NAME --private-key=PRIVATE_KEY_FILE.pem
    --certificate=CERTIFICATE_FILE.pem
    
  2. 必要に応じて、新しい SSL 証明書リソースが利用可能であることを確認します。

    1. [負荷分散] ページに移動します。
      [負荷分散] ページに移動
    2. ロードバランサの一覧の下にある [詳細設定メニュー] をクリックします。
    3. [証明書] をクリックします。

IAP コネクタのダウンロードと構成

デプロイメントのニーズに合わせて、IAP コネクタの構成可能な Deployment Manager テンプレートを更新する必要があります。テンプレートをダウンロードして構成するには、次の手順に従います。

  1. IAP コネクタ GitHub リポジトリのクローンを作成して、IAP コネクタの Deployment Manager テンプレートをダウンロードします。

  2. クローンのリポジトリに含まれるフォルダを開き、iap-connector.yaml ファイル内の必須フィールドを更新します。ルーティング ルールの詳細については、オンプレミス アプリ用 IAP の概要をご覧ください。

         resources:
         - name: iap-connector
           type: iap-connector.py
           properties:
             zone: ZONE
             serviceAccountName: PROJECT_NUMBER@cloudservices.gserviceaccount.com
             routing:
             - name: BACKEND_SERVICE_NAME
               mapping:
               - name: host
                 source: SOURCE
                 destination: DESTINATION_URL
             tls:
             - CERTIFICATE_NAME
    
    必須フィールド:

    • ゾーン: IAP コネクタがデプロイされているゾーン。例: us-central1-a
    • serviceAccountName: Kubernetes Engine 管理者のロールが付与されている Google API サービス エージェント アカウントの名前。
    • routing.mapping.source: Google Cloud に送信されるリクエストの URL。トラフィックはこの URL から環境内に入ります。
    • routing.mapping.destination: オンプレミス アプリの URL。ユーザーが認証され、承認された後、IAP はこの URL にトラフィックをルーティングします。IAP は TLS を使用してトラフィックをこの URL にルーティングし、そこでホストされているアプリケーションは HTTPS エンドポイントを提供する必要があります。
    • tls: SSL 証明書リソースの名前。
    • routing.name: HTTP(S) ロードバランサの背後に配置する新しいバックエンド サービスの名前。

    オプション フィールド:

    • initialNodeCount: クラスタ内に必要な初期ノード数。デフォルトの初期ノード数は 3 です。
    • imageVersion: 実行する Ambassador イメージのバージョン。デフォルトのイメージ バージョンは 0.39.0 です。
    • replicas: Ambassador デプロイメントの初期レプリカ数。デフォルトのレプリカ数は 3 です。

    IAP コネクタの仕様を確認するには、iap-connector.py.schema ファイルをご覧ください。

  3. 更新した iap-connector.yaml ファイルを保存します。

IAP コネクタのデプロイ

  1. 次の gcloud コマンドを実行して、IAP コネクタと Google Kubernetes Engine クラスタをデプロイします。

    gcloud deployment-manager deployments create NAME_OF_DEPLOYMENT --config=iap-connector.yaml
    
  2. Google Cloud Console からデプロイを監視することもできます。

    1. Deployment Manager のページに移動します。
      Deployment Manager のページに移動
    2. デプロイメントの名前を選択して、デプロイメントのステータスを表示します。最近 IAP コネクタをデプロイした場合は、デプロイが完了し、ステータスが確認できるまでに数分かかることがあります。
  3. Kubernetes クラスタのページに移動して、Google Kubernetes Engine クラスタのステータスを確認することもできます。
    [Kubernetes クラスタ] ページに移動

  4. デプロイメントにより、Cloud Load Balancing HTTP(S) ロードバランサが作成されます。Domain Manager 内の DNS リソース レコードを更新して、送信元ドメインをロードバランサのパブリック IPv4 アドレスに関連付けます。

    パブリック IPv4 アドレスを取得するには:

    1. [負荷分散] ページに移動します。
      [負荷分散] ページに移動
    2. 生成されたロードバランサ リソースの名前をクリックします。

      IPv4 アドレスは [フロントエンド] に示され、これは証明書名に関連付けられています。

これで、アプリへのウェブ リクエスト トラフィックが、IAP コネクタからオンプレミス アプリに転送されるようになりました。

OAuth 同意画面の構成

プロジェクトの OAuth 同意画面を構成していない場合は、画面を構成する必要があります。この画面では、メールアドレスとプロダクト名が必要です。

  1. OAuth 同意画面に移動します。
    同意画面を構成
  2. [サポートメール] で、一般公開される連絡先として表示するメールアドレスを選択します。このメールアドレスは、自分のメールアドレスまたは自身が所有する Google グループにする必要があります。
  3. [アプリケーション名] に、アプリケーションの表示名を入力します。
  4. 任意の詳細を追加します。
  5. [保存] をクリックします。

プロダクト名やメールアドレスなど、OAuth 同意画面の情報を後で変更する場合は、上記の手順を繰り返して同意画面を構成します。

IAP アクセス権の設定

  1. [Identity-Aware Proxy] ページに移動します。
    [Identity-Aware Proxy] ページに移動
  2. IAP で保護するプロジェクトを選択します。
  3. メンバーを追加するリソースの横にあるチェックボックスをオンにします。
  4. 右側のパネルで [メンバーを追加] をクリックします。
  5. 表示される [メンバーの追加] ダイアログで、プロジェクトに対する IAP で保護されたウェブアプリ ユーザーの役割を付与するグループ、または個人のメールアドレスを追加します。

    メンバーにすることができるアカウントの種類は以下のとおりです。

    • Google アカウント: user@gmail.com
    • Google グループ: admins@googlegroups.com
    • サービス アカウント: server@example.gserviceaccount.com
    • G Suite のドメイン: example.com

    追加する Google アカウントは、自分がアクセスできるものにしてください。

  6. [役割] のプルダウン リストから [Cloud IAP] > [IAP で保護されたウェブアプリ ユーザー] を選択します。
  7. [保存] をクリックします。

IAP の有効化

  1. [Identity-Aware Proxy] ページの [HTTPS Resources] で、IAP コネクタのデプロイ名を探します。IAP を有効にするには、
  2. 表示された [IAP の有効化] ウィンドウで [有効にする] をクリックし、IAP でオンプレミス アプリを保護することを確認します。IAP が有効になると、ロードバランサへのすべての接続でログイン認証情報が必要になります。プロジェクトで IAP で保護されたウェブアプリ ユーザーの役割を持つアカウントにのみアクセスが許可されます。
  3. オンプレミス アプリの内部 URL にアクセスして、IAP が有効であることを確認します。認証を求められた場合は、IAP が有効になっています。

IAP がオンプレミス アプリに対するすべてのトラフィックを認証し、承認します。

送信トラフィックの保護

IAP コネクタがデプロイされた後は、IAP コネクタによってリクエストがオンプレミス バックエンドに転送されます。IAM アクセス ポリシーは IAP コネクタで適用されるため、IAP がバックエンドへのすべてのリクエストを認証し、承認していることを確認します。

送信トラフィックが IAP コネクタ経由で送信されていることを確認するには、IAP の署名付きヘッダーのリクエストを確認します。IAP によって認証および承認されたリクエストには、IAP の署名付き JWT ヘッダーが追加されます。

IAP コネクタ デプロイの更新

次のプロセスを使用すると、IAP コネクタのルーティング ルールを更新して、デプロイ済み GKE クラスタに push できます。詳細については、デプロイを更新するをご覧ください。

  1. 新しいルーティング パラメータで iap-connector.yaml ファイルを更新します。
  2. 次の gcloud コマンドを実行します。

    gcloud deployment-manager deployments update NAME_OF_DEPLOYMENT
    

IAP コネクタ デプロイの削除

IAP コネクタのデプロイを削除すると、IAP が無効になり、アプリにアクセス認証システムがない状態になります。ルーティング ルールを含め、デプロイで作成されたすべてのリソースが削除されます。

IAP コネクタ デプロイを削除するには:

  1. Deployment Manager のページに移動します。
    Deployment Manager のページに移動
  2. デプロイのリストで、IAP デプロイの横にあるチェックボックスをオンにします。
  3. ページの上部にある [削除] をクリックします。

削除した IAP コネクタのデプロイを再作成する場合は、元の構成ファイルを使用できます。再作成されたデプロイは、新しいリソースを使用する新しいデプロイとみなされます。

次のステップ