Alamat IP keluar untuk layanan App Engine

Layanan keluar di lingkungan standar App Engine, seperti URL Fetch, Sockets, dan Mail API, memanfaatkan kumpulan alamat IP yang besar. Rentang alamat IP dalam kumpulan ini dapat berubah secara rutin. Bahkan, dua panggilan API berurutan dari aplikasi yang sama mungkin tampak berasal dari dua alamat IP yang berbeda.

Jika perlu mengetahui alamat IP yang terkait dengan traffic keluar dari layanan, Anda dapat menemukan rentang alamat IP saat ini untuk layanan Anda, atau menyiapkan alamat IP statis untuk layanan Anda.

Alamat IP untuk layanan App Engine

Anda dapat menemukan rentang alamat IP saat ini untuk layanan App Engine Anda berdasarkan informasi rentang IP yang dipublikasikan Google:

  • Google memublikasikan daftar lengkap rentang IP yang disediakannya bagi pengguna di internet di goog.json.

  • Google juga memublikasikan daftar rentang alamat IP eksternal global dan regional yang tersedia untuk resource Google Cloud pelanggan di cloud.json.

Alamat IP yang digunakan oleh Google API dan layanan Google sesuai dengan daftar rentang yang dihitung dengan mengambil semua rentang di cloud.json dari rentang di goog.json. Daftar ini sering diupdate.

Anda dapat menggunakan skrip Python berikut untuk membuat daftar rentang alamat IP yang mencakup rentang alamat IP yang digunakan oleh Google API dan layanan Google.

Untuk informasi tentang cara menjalankan skrip ini, lihat Cara menjalankan.

from __future__ import print_function

import json

try:
    from urllib import urlopen
except ImportError:
    from urllib.request import urlopen
    from urllib.error import HTTPError

import netaddr

IPRANGE_URLS = {
    "goog": "https://www.gstatic.com/ipranges/goog.json",
    "cloud": "https://www.gstatic.com/ipranges/cloud.json",
}

def read_url(url):
    try:
        return json.loads(urlopen(url).read())
    except (IOError, HTTPError):
        print("ERROR: Invalid HTTP response from %s" % url)
    except json.decoder.JSONDecodeError:
        print("ERROR: Could not parse HTTP response from %s" % url)

def get_data(link):
    data = read_url(link)
    if data:
        print("{} published: {}".format(link, data.get("creationTime")))
        cidrs = netaddr.IPSet()
        for e in data["prefixes"]:
            if "ipv4Prefix" in e:
                cidrs.add(e.get("ipv4Prefix"))
            if "ipv6Prefix" in e:
                cidrs.add(e.get("ipv6Prefix"))
        return cidrs

def main():
    cidrs = {group: get_data(link) for group, link in IPRANGE_URLS.items()}
    if len(cidrs) != 2:
        raise ValueError("ERROR: Could process data from Google")
    print("IP ranges for Google APIs and services default domains:")
    for ip in (cidrs["goog"] - cidrs["cloud"]).iter_cidrs():
        print(ip)

if __name__ == "__main__":
    main()

Menyiapkan alamat IP keluar statis

Untuk menyiapkan alamat IP statis untuk layanan lingkungan standar App Engine Anda, gunakan Akses VPC Serverless dengan Cloud Router dan Cloud NAT. Dengan Akses VPC Serverless, Anda dapat mengirim traffic keluar ke jaringan Virtual Private Cloud (VPC) Anda. Dengan gateway terjemahan alamat jaringan (NAT) di VPC, Anda dapat mengarahkan traffic App Engine melalui alamat IP khusus.

Mengarahkan traffic Anda melalui Cloud NAT tidak menyebabkan hop tambahan pada stack jaringan Anda karena gateway Cloud NAT dan Cloud Router hanya menyediakan bidang kontrol dan paketnya tidak melewati gateway Cloud NAT atau Cloud Router.

Langkah-langkah berikut menunjukkan cara menyiapkan alamat IP keluar statis untuk layanan lingkungan standar App Engine Anda.

  1. Pastikan Anda memiliki peran roles/compute.networkAdmin atau peran khusus dengan izin yang sama.

  2. Buat subnetwork (subnet) di dalam jaringan VPC Anda untuk traffic App Engine. Tindakan ini memastikan bahwa resource lain di jaringan VPC Anda tidak dapat menggunakan alamat IP statis.

    gcloud compute networks subnets create SUBNET_NAME \
        --range=RANGE \
        --network=NETWORK_NAME \
        --region=REGION

    Pada perintah di atas, ganti:

    • SUBNET_NAME dengan nama yang ingin Anda berikan ke subnet.
    • RANGE dengan rentang IP dalam format CIDR yang ingin Anda tetapkan ke subnet ini (misalnya 10.124.0.0/28)
    • NETWORK_NAME dengan nama jaringan VPC Anda.
    • REGION dengan region layanan App Engine Anda.
  3. Hubungkan layanan App Engine Anda ke subnet.

    Ikuti panduan Menghubungkan ke jaringan VPC, dan tentukan nama subnet yang Anda buat di langkah sebelumnya untuk subnet konektor.

  4. Buat Cloud Router baru. Cloud Router adalah komponen bidang kontrol yang diperlukan untuk Cloud NAT.

    gcloud compute routers create ROUTER_NAME \
        --network=NETWORK_NAME \
        --region=REGION

    Pada perintah di atas, ganti:

    • ROUTER_NAME dengan nama untuk resource Cloud Router yang ingin Anda buat.
    • NETWORK_NAME dengan nama jaringan VPC Anda.
    • REGION dengan region tempat Anda ingin membuat gateway NAT.
  5. Cadangkan alamat IP statis.

    Ini adalah alamat yang akan digunakan layanan Anda untuk mengirim traffic keluar. Resource alamat IP yang dicadangkan mempertahankan alamat IP dasar saat resource yang terkait dengannya dihapus dan dibuat ulang. Alamat IP ini mengurangi kuota alamat IP statis di project Google Cloud Anda.

    gcloud compute addresses create ORIGIN_IP_NAME \
        --region=REGION

    Pada perintah di atas, ganti:

    • ORIGIN_IP_NAME dengan nama yang ingin ditetapkan ke resource alamat IP.
    • REGION dengan region yang akan menjalankan router Cloud NAT. Idealnya, region yang sama dengan layanan App Engine Anda untuk meminimalkan latensi dan biaya jaringan.

    Gunakan perintah compute addresses describe untuk melihat hasilnya:

    gcloud compute addresses describe ORIGIN_IP_NAME
  6. Buat gateway Cloud NAT dan tentukan alamat IP Anda.

    Traffic yang berasal dari subnet Anda akan melewati gateway ini dan menggunakan alamat IP statis yang Anda cadangkan di langkah sebelumnya.

    gcloud compute routers nats create NAT_NAME \
        --router=ROUTER_NAME \
        --region=REGION \
        --nat-custom-subnet-ip-ranges=SUBNET_NAME \
        --nat-external-ip-pool=ORIGIN_IP_NAME
      

    Pada perintah di atas, ganti:

    • NAT_NAME dengan nama untuk resource gateway Cloud NAT yang ingin Anda buat.
    • ROUTER_NAME dengan nama Cloud Router Anda.
    • REGION dengan region tempat Anda ingin membuat gateway NAT.
    • ORIGIN_IP_NAME dengan nama resource alamat IP yang dicadangkan yang Anda buat di langkah sebelumnya.
  7. Tetapkan setelan keluar Akses VPC Serverless ke all-traffic.

    Secara default, layanan App Engine yang menggunakan Akses VPC Serverless hanya mengirim traffic internal ke jaringan VPC Anda. Untuk mengirim traffic dengan tujuan eksternal ke jaringan VPC Anda agar memiliki alamat IP statis yang Anda tentukan, Anda harus mengubah setelan keluar.

    Tentukan setelan traffic keluar dalam file app.yaml untuk layanan Anda:

    vpc_access_connector:
    name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
    egress_setting: all-traffic

    Replace:

    • PROJECT_ID dengan ID project Google Cloud Anda.
    • REGION dengan region tempat konektor Anda berada.
    • CONNECTOR_NAME dengan nama konektor Anda.

Men-deploy layanan:

 gcloud app deploy