2013-01-07 18 views
6

GAEは、スケジュールされたジョブに対してcronジョブを提供します。誰かがhttp GETを直接実行できないようにするにはどうすればよいでしょうか?次の例では、私は以下の設定でジョブを実行するには、ブラウザのURL欄にいつでも/にupdateDataを入力することができます。Googleアプリエンジン:cronジョブのセキュリティ

cron: 
- description: daily update of the data in the datastore 
    url: /updateData 
    schedule: every day 00:00 
    timezone: ... 

答えて

6

。 Btwでは、ヘッダーをスプーフィングすることはできません。つまり、cronジョブから送信されなかったリクエストにこのヘッダーがある場合、App Engineはヘッダーの名前を変更します。この場合は、X-AppEngine-TaskNameをチェックして、同様のタスクのメソッドを記述することもできます。

""" 
Decorator to indicate that this is a cron method and applies request.headers check 
""" 
def cron_method(handler): 
    def check_if_cron(self, *args, **kwargs): 
     if self.request.headers.get('X-AppEngine-Cron') is None: 
      self.error(403) 
     else: 
      return handler(self, *args, **kwargs) 
    return check_if_cron 

としてそれを使用する:

class ClassName(webapp2.RequestHandler): 
    @cron_method 
    def get(self): 
     .... 
6

あなたのように、投手に

login: admin 

を追加する必要があります詳細:Securing URLS for Cron

EGポールCを使用して、以下に示すようX-AppEngineの-クーロンヘッダをチェックするデコレータを作成することができると言いましたものに加えて

application: hello-cron 
version: 1 
runtime: python27 
api_version: 1 

handlers: 
- url: /updateData 
    script: reports.app 
    login: admin 
+0

私は 'ログインを追加しました:今admin'と私のcronジョブは、それは'ログインを追加するために働くAlex75 @ 403 –

+0

を受け取る:app.yamlを中admin'ハンドラーセクションでGoogle App Engineの標準環境でcronサービスを保護します。 App Engine flexでは、このようなcronハンドラの保護方法が変更されています(PHPの例): $ _SERVER ['HTTP_X_APPENGINE_CRON']を確認し、trueならApp Engine cronサービスからのリクエストです。 –