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が必要なパスと、必要無いパスを設定します。
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