ビュー (リクエスト ハンドラー) を、app.yaml 内ではなく、ビュー内から Google App Engine 内部ネットワーク内からのみ呼び出されるように制限する方法を見つけたいと考えています。
たとえば、Flask アプリケーション内で受信メールを処理するビューがあります。
@app.route('/_ah/mail/notifications@example.appspotmail.com', methods=['POST'])
def inbound_notification_email():
from google.appengine.api import mail
message = mail.InboundEmailMessage(request.data)
...
return '' # 200 OK
私はすべてのメールハンドラーを独自のファイル/ wsgiインスタンスに次のように配置できることを知っています:
handlers:
- url: /_ah/mail/.+
script: inbound_mail.app
login: admin
Webappの代わりにFlaskを使用しているため、これを行う必要はありません。現在、リクエストは上記の設定どおりに機能しますが、世界に公開されています。
inbound_notification_email()
ビューへのリクエストを調べるX-App-Country
と、リクエスト ヘッダーが に設定されZZ
、リクエストのリモート アドレスが に設定されていることがわかります0.1.0.20
。0.xxx の IP 範囲は IANA がローカル ネットワーク用に予約していることを知っているので、request.remote_address が「0」で始まるかどうかをチェックするのは理にかなっているように思えます。動作しますが、App Engine 内のすべての内部リクエストが常にこの方法で処理されるかどうかはわかりません (プッシュ キューと xmpp が思い浮かびます)。
私が見て驚いたことの 1 つは、Webapp を使用するときに設定するにもかかわらず、内部でusers.is_current_user_admin()
False を返すことでした。inbound_notification_mail()
login: admin