こちらの記事をベースに進めていきます。
上記の記事では、LaravelからAPIGatewayを経由してDynamoDBと通信をしております。
ただし、上記の設定だとエンドポイントがバレると誰でもデータ取得出来てしまう状況した。 APIGatewayにアクセストークンの認証を追加することでセキュリティを高めます。
APIGatewayの通信に認証を追加する際には、Cognito, Lambdaなどで追加できます。今回は、Cognitoを利用していきます。
そして今回も、既に素晴らしい記事を書いて頂いている方がいたので、ほぼそちらを参考に進めてまいります。↓↓↓↓
Cognitoで認証されたユーザーだけがAPI Gatewayを呼び出せるオーソライザーを使ってみた
Cognitoユーザーの「アカウントステータス」をCONFIRMEDに変更するのに躓いている方は、こちらの記事を参考にして頂ければ問題ないかと思います。↓↓↓↓
【AWS】CognitoのFORCE_CHANGE_PASSWORDをCONFIRMEDに変える方法
さて、アクセストークンは発行できましたでしょうか。
aws cognito-idp admin-initiate-auth --user-pool-id CognitoユーザープールID --client-id アプリクライアントID --auth-flow ADMIN_NO_SRP_AUTH --auth-parameters USERNAME=ユーザ名,PASSWORD=パスワード {
コマンドを実行した結果の「”IdToken”:」部分です。
こちらのトークンを利用して、Laravelにアクセストークンを追加し、アクセス可能な状態にします。
.env
AWS_APIGATEWAY_ACCESS_KEY={IdTokenの部分}
Contoroller
追加する部分は1箇所. headerにトークンを追加します。
'Authorization: '.env('AWS_APIGATEWAY_ACCESS_KEY'),
public function index() { $header = [ 'Content-Type: application/json', 'Authorization: '.env('AWS_APIGATEWAY_ACCESS_KEY'), // headerにkeyを追加 ]; $params = [ "OperationType" => "SCAN" ]; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, env('AWS_APIGATEWAY_URL')); curl_setopt($curl, CURLOPT_POST, TRUE); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($params)); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $output= curl_exec($curl); $result = json_decode($output); curl_close($curl); dd($result); }