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

【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を追加します。



image.png


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



image.png


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

$ curl -H 'x-api-key:zzzzz' https://yyyyy.execute-api.ap-northeast-1.amazonaws.com/api/auth/ 
 
{"secure": true} 
これで無事にアクセスできました。

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

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)