非公開の内部専用サービスを構成する

このページでは、App Engine フレキシブル環境サービスを内部 IP アドレスでのみ公開するために必要な構成を示します。

デフォルトでは、フレキシブル環境のサービスは、最初のデプロイ時に、内部 IP アドレスとエフェメラル外部 IP アドレスの両方を受信します。エフェメラル外部 IP アドレスを使用すると、カスタム ドメインやインターネット上のリソースを使用する App Engine サービスにリクエストを送信できます。エフェメラル外部 IP アドレスには費用が発生します。

サービスが外部 IP アドレスを必要としない場合は、サービスがインターネット上のリソースにリクエストを送信しないようにできます。また、サービスが内部 IP アドレスのみを使用するように制限することで、コストを削減できます。サービスの完全修飾ドメインは依然として外部から参照できるため、これによってインターネットや、カスタム ドメインを使用する App Engine サービスからのリクエストを受信できなくなるわけではありません。

制限事項

エフェメラル外部 IP アドレスの無効化には、次の制限があります。

  • カスタム ドメインを使用するサービス: カスタム ドメインを使用する App Engine サービスにリクエストを送信するには、Cloud NAT を構成する必要があります。
  • 外部リソース: 外部リソースにリクエストを送信するには、Cloud NAT を構成する必要があります。
  • 限定公開の Google アクセスの依存関係: IP モードが internal に設定されたインスタンスは、ターゲット サブネットワークで限定公開の Google アクセスが必要です。
  • レガシー ネットワーク: レガシー ネットワークでは限定公開の Google アクセスを使用できないため、エフェメラル外部 IP アドレスを無効にすることはできません。

準備

外部 IP アドレスのないフレキシブル環境アプリをデプロイするには、ターゲット サブネットワークで限定公開の Google アクセスを有効にする必要があります。

共有 VPC ネットワークを準備する

共有 VPC を使用する場合は、次の手順に沿って共有 VPC ネットワークを準備してさらに構成を行ないます。

  1. 限定公開の Google アクセスと互換性のあるルートがあることを確認します。通常、ネットワークのデフォルト ルートは限定公開の Google アクセスと互換性があります。他のルートの場合は、ルートが次のように構成されていることを確認します。

    Network: SHARED_VPC_NETWORK_NAME
    Destination IP address range: 0.0.0.0/0
    Instance tags: INSTANCE_TAGS
    Next hop: DEFAULT_INTERNET_GATEWAY
    

    以下を置き換えます。

    • SHARED_VPC_NETWORK_NAME: 共有 VPC ネットワークの名前。
    • INSTANCE_TAGS: インスタンス タグを使用しない場合は、このフィールドに何も指定しないでください。インスタンス タグを使用する場合は、インスタンス タグのリスト内に aef-instances を含めます。
    • DEFAULT_INTERNET_GATEWAY: デフォルト インターネット ゲートウェイ

    限定公開の Google アクセスと互換性のあるルートの詳細については、ルーティング オプションに関する限定公開の Google アクセスのドキュメントをご覧ください。

  2. 限定公開の Google アクセスと互換性のあるファイアウォール ルールがあることを確認します。ファイアウォール ルールは次のように構成する必要があります。

    Network: SHARED_VPC_NETWORK_NAME
    Destination IP address range: 0.0.0.0/0
    Destination filter: IP ranges
    Direction of traffic: Egress
    Attach on match: Allow
    Instance tags: INSTANCE_TAGS
    

    以下を置き換えます。

    • SHARED_VPC_NETWORK_NAME: 共有 VPC ネットワークの名前。
    • INSTANCE_TAGS: インスタンス タグを使用しない場合は、このフィールドに何も指定しないでください。インスタンス タグを使用する場合は、インスタンス タグのリスト内に aef-instances を含めます。

    限定公開の Google アクセスと互換性のあるファイアウォール ルールの詳細については、ファイアウォール構成に関する限定公開の Google アクセスのドキュメントをご覧ください。

内部 IP アドレスのみを使用するようにサービスを構成する

  1. Google Cloud CLI を更新します。これにより、フレキシブル環境のアプリでプライベート IP アドレスをサポートするバージョンの gcloud CLI を使用できます。

    gcloud components update
  2. app.yaml ファイルで、network セクションinstance_ip_mode フィールドを追加し、internal に設定します。

    • app.yaml ファイルにすでに network セクションがある場合は、network セクション内に次の行を追加します。

      instance_ip_mode: internal

    • app.yaml ファイルに network セクションがない場合は、次の行を追加してセクションを作成し、インスタンスの IP モードを指定します。

      network:
       instance_ip_mode: internal

    変更内容を保存します。

  3. サービスをデプロイします。

    gcloud beta app deploy
  4. Google Cloud コンソールの [インスタンス] ページをチェックして、構成を確認します。

    [インスタンス] に移動

    [インスタンス] テーブル([概要] グラフの下)までスクロールします。[外部 IP] 列に IP アドレスが表示されていないことを確認します。この列に IP アドレスがない場合は、インスタンスに外部 IP アドレスがありません。このフィールドが空であっても、インスタンスには内部 IP アドレスがあります。

外部 IP アドレスなしで外部リクエストを送信する

サービスがリクエストをインターネットに送信するものの、内部 IP アドレスのみを使用するように制限する場合は、Cloud NAT を使用してゲートウェイを作成できます。サービスは、デフォルトのエフェメラル外部 IP アドレスを使用せずに、Cloud NAT ゲートウェイ経由で外部リクエストを送信できます。

  1. 内部 IP アドレスのみを使用するようにサービスを構成するセクションの手順を行います。

  2. 手順に沿って Cloud NAT を構成します。

このアプローチの詳細については、取得用の Cloud NAT のデプロイに関する Cloud Architecture Center のドキュメントをご覧ください。