Edited at

【AWS】Pythonの開発環境Chaliceを使ってみる - API Key

PythonのLambda関数の開発環境としてChaliceを使ってみます。今回はChaliceによって作られるAPI Gatewayへのアクセスを、API Keyで制限してみます。

Chaliceの環境設定などは以下の記事を参照してください。

【AWS】Python Lambdaのdeploy - Chalice

ドキュメントは「AWS Chalice」「aws/chalice - github」 になります。


1.プロジェクト作成

まずプロジェクトを作成作成します。

$ chalice new-project api-key-test

$ cd api-key-test

次にソースコートは、ドキュメントにあるものを流用させていただきます。

APIが必要なパスと、必要無いパスを設定します。


app.py

from chalice import Chalice

app = Chalice(app_name='api-key-test')

# 以下のパスへのアクセスにはAPI Keyが必要ありません。
@app.route('/')
def index():
return {'hello': 'world'}

# 以下のパスへのアクセスにはAPI Keyが必要です。
@app.route('/auth', methods=['GET'], api_key_required=True)
def authenticated():
return {"secure": True}


次にdeployします。自動的にIAM roleが生成され、LambdaとAPI Gatewayが作成されます。最後に作成されたリソースが表示されます。

$ chalice deploy

Creating deployment package.
Creating IAM role: api-key-test-dev
Creating lambda function: api-key-test-dev
Creating Rest API
Resources deployed:
- Lambda ARN: arn:aws:lambda:ap-northeast-1:xxxxx:function:api-key-test-dev
- Rest API URL: https://yyyyy.execute-api.ap-northeast-1.amazonaws.com/api/


2.テスト

まずAPI Keyの必要ないパスにアクセスします。問題ありません。

$ curl https://yyyyy.execute-api.ap-northeast-1.amazonaws.com/api/

{"hello": "world"}

次に、API Keyを要求するパスに、API Keyを指定せずに、アクセスします。これはエラーとなります。

$ curl  https://yyyyy.execute-api.ap-northeast-1.amazonaws.com/api/auth/

{"message":"Forbidden"}

それでは作成したAPI GatewayにAPI Keyの紐づけを行います。「ゼロから作りながら覚えるAPI Gateway環境構築」を参考にさせていただきました。今回はLambdaやAPI Gateway自体は自動生成されているので、API Keyの紐づけだけが必要となります。

AWSのコンソールのAPI Gatewayで使用量プランを選択します。無かったら上記ブログを参考にして作成ます。以下の画面のように作成されたAPI Gatewayを追加します。

追加されたら、APIキーの画面で「表示」をクリックし、キーをコピーします。

コピーしたキーをx-api-keyの値(zzzzz)にしてアクセスします。

$ curl -H 'x-api-key:zzzzz' https://yyyyy.execute-api.ap-northeast-1.amazonaws.com/api/auth/

{"secure": true}

これで無事にアクセスできました。

今回はこれで終わりです。


★最近の投稿

Python でいろいろスクレイピング

【AWS】Pythonの開発環境Chaliceを使ってみる - アマゾン売れ筋ランキング

【AWS】Pythonの開発環境Chaliceを使ってみる - CloudWatch Events

【AWS】Pythonの開発環境Chaliceを使ってみる - API Key

【AWS】Python Lambdaのdeploy - Chalice

【AWS】Python Lambdaのdeploy - CloudFormation