Aws/APIGateway/0.はじめに

メモ

・リソースポリシーや認証等にて拒否された API コールは料金が発生しない。
・スロットルされた API コールも料金は発生しない。

記事一覧

APIGateway/JavaScriptでAPIGatewayを呼び出す

はじめに

JavaScriptでAPIGatewayを呼び出すサンプル
こちらで作成したAPIGatewayを利用しています。
下記サンプルコードをhtml形式で保存してブラウザで表示してください。ローカルで利用できます。

事前準備

サンプルコード

Webページのボタンをクリックすると、コンソールログとWeb画面に署名付きURLが表示される。

index.html ハイライトは自身の環境に合わせて書き換える行です。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

<!DOCTYPE html>

<html lang="ja">

<head>

<meta charset="utf-8">

<title>サンプル</title>

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

<script>

$(function(){

  $('#btn1').click(function(){

    //Ajax通信を行う

    $.ajax({

    //APIGatewayで作成したGETメソッドのURLを記載する。

        url:"https://XXXXXXXX.execute-api.ap-northeast-1.amazonaws.com/LambdaTest/lambdatest",

        type:"GET",

        dataType:"text"

    })

    .done((data) => {

    //成功した場合の処理

    var json = data.replace(/\'/g,"\"");       //シングルクオートをダブルクオートに変換

    console.log(JSON.parse(json).UrlPath);     //JSONデータのUrlPathの値を抽出

    $("#msg").text(JSON.parse(json).UrlPath);  //JSONデータのUrlPathの値を抽出

    });

  });

});

</script>

</head>

<body>

<input type="button" id="btn1" value="ボタン">

        <br><br>

        <b id="msg"></b>

</body>

</html>

実行結果

 

Aws/APIGateway/Lambdaオーソライザーを理解してみる

ようやくLambdaオーソライザーが理解できました(多分)

簡単に言うと、Lambdaオーソライザーは、後続のAPIを実行するポリシードキュメントを返す仕組みです。
ポリシードキュメントを返す際、EffectがAllowの場合はContexを必須で付与し、Denyの場合はContexを付与しなくて良いです。
公式ドキュメントには、「principalIdを含む」とありますが、つけてもつけなくても動作します。

​​​​​​Amazon API Gateway Lambda オーソライザーからの出力 - Amazon API Gateway

下記は、認証に成功した場合のフロー図です。

 はじめに

APIの統合リクエストは、eventをLambdaに渡したかったので「Lambda プロキシ統合の使用」を有効にしています。

気にしたことが無かったのですが、下図のメソッドリクエストの認可で、オーソライザーに設定した名前を選択しないとオーソライザーが有効にならないんですね。
オーソライザーに設定したLambdaは実行されるので、有効になっているものだと思いました・・・。※CloudWatchlogsにログ出てたら有効と思うじゃん!!!

クライアントからのAPIの呼び出しは、下記の通りcurlコマンドでAuthorizationヘッダーを指定して呼び出しています。 

1

curl -v https://XXX.execute-api.ap-northeast-1.amazonaws.com/test -H "Authorization:1"

設定値

APIGateway

■オーソライザー
・名前:LambdaAuth
・タイプ:Lambda
・Lambda関数:LambdaAuthorization
・Lambda イベントペイロード:リクエスト
・ID ソース:Authorization
・認可のキャッシュ:無効

■API
・タイプ:REST API
・エンドポイントタイプ:パブリック
・メソッド:GET
・メソッドリクエスト(認可):LambdaAuth
・Lambda プロキシ統合の使用:有効
・統合タイプ:Lambda関数(AllowResponse)
・ドメイン:https://XXX.execute-api.ap-northeast-1.amazonaws.com
・ステージ:test

Lambda(オーソライザー用)サンプル

・event情報(headersのIDソースなど)を元に、認証判定
・許可の場合:プリンシンバルID、後続処理のポリシードキュメント(資格情報)、ContexをReturn
・拒否の場合:プリンシンバルID、後続処理のポリシードキュメント(資格情報)をReturn

Contexはkey-valueで定義できて、返却した値はAPIで指定したLambda関数のevent['requestContext']['authorizer']に格納されます。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

def lambda_handler(event, context):

    token = event['headers']['Authorization']

    if token == '1'

        return {

            'principalId' : "LambdaAuthorization",

            'policyDocument' : {

                'Version' : '2012-10-17',

                'Statement' : [

                    {

                        "Action": "execute-api:Invoke",

                        "Effect": "Allow",

                       #下記の形式を許可しますが、汎用的なオーソライザーにすると思うので*を用いています。

                       #"Resource": "arn:aws:execute-api:ap-northeast-1:{アカウントID}:{api-id}/{ {stageNameOrWildcard}}/{ {httpVerbOrWildcard}}/{ {resourcePathOrWildcard}}"

                        "Resource": "arn:aws:execute-api:ap-northeast-1:*"

                    }

                ]

            },

            'context': {

                    "sukina"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值