[レポート] How to secure your serverless applications on AWS #APS251-R #AWSreInforce

[レポート] How to secure your serverless applications on AWS #APS251-R #AWSreInforce

Clock Icon2023.06.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!AWS事業本部コンサルティング部のたかくに(@takakuni_)です。

アナハイムで開催されている AWS re:Inforce 2023 に参加しています。

本記事は AWS re:Inforce 2023 のセッション「How to secure your serverless applications on AWS」のセッションレポートです。

セッション概要

Organizations today are choosing serverless and event-driven architectures to host their application workloads. In this builders’ session, get hands-on experience with securely developing serverless applications on AWS with AWS SAM, Amazon API Gateway, AWS Lambda, and Amazon Aurora Serverless. Learn how to identify potential issues during the development and use AWS security services to discover unexpected behavior once the workload is deployed.

構成図

構成図は以下の通りです。

資料より引用

シナリオ

ワークショップは 3 つのラボに分かれていました。

  • ラボ1:API Gateway の認証に Cognito を導入する
  • ラボ2:Amazon Aurora の認証情報を Secrets Manager に登録する
  • ラボ3:API Gateway の前段に AWS WAF を搭載する

最終的な構成図は以下になります。

資料より引用

Cognitoの利用

ラボ 1 では、 API Gateway に認証機能を追加します。今のところ、認証機能を実装していないことがわかります。

API Gateway の GET リクエストに対して、認証機能を実装します。

dev ステージにデプロイして、検証してみます。

数十秒後、API Gateway が更新されて、curl した結果が {"message":"Unauthorized"} に変わりました。

Cognito で認証しトークンを利用することで、再度情報を取得することができるようになりました。

Secrets Manager の利用

ラボ 2 では Secrets Manager を使用して Aurora の認証情報を保管、認証情報取得周りのアプリケーションの更新を行いました。

シークレットの更新

まずは、Secrets Manager のシークレットを作成します。

ローテーションオプションを利用して、シークレットを 30 日間隔でローテーション設定しました。

アプリケーションの更新

Aurora へアクセスする Lambda 関数側の認証情報まわりを変更していきます。

現在のコードを確認すると、がっつりハードコードされていました。

認証情報を保管した Secrets Manager へ取得するよう、アプリケーションコードを書き換えます。

テスト

認証情報、取得するロジックを更新しても問題なくデータが返ってくることをテストできました!

AWS WAF の利用

最後に AWS WAF を利用して、特定の IP アドレスをブロックする仕組みを導入しました。

指定した IP アドレスは、先ほどテストしていた Cloud9 のパブリック IP アドレスです。

先ほど指定した IP アドレスを Allow するカスタムルールを作成します。

デフォルトアクションが Block であるため、Cloud9 のパブリック IP 以外はブロックするような WebACL が出来上がりました。

最後に、 API Gateway に関連付けを行います。 Dev ステージのみ WebACL を関連づけるような設定を行いました。

テスト

最後にテストです。API Gateway で公開している URL に対して私のローカルマシンのパブリック IP アドレスからアクセスします。

アクセスが拒否されていることがわかります。

Cloud9 側では、引き続き問題なくアクセスできました!

まとめ

以上、「How to secure your serverless applications on AWS」のレポートでした。

サーバレスな構成においてセキュリティのとっかかりを意識できるハンズオンで受けてよかったです。

AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.