Upgrade to Pro — share decks privately, control downloads, hide ads and more …

複数のAWSアカウントから横断で 利用する Lambda Authorizer の作り方

複数のAWSアカウントから横断で 利用する Lambda Authorizer の作り方

2025年2月25日に開催された、「JAWS-UG 名古屋 2月会「アクセス権限管理の解体新書」」でのアーキテクト岩倉のLT資料です。
https://jawsug-nagoya.connpass.com/event/342964/

複数のAWSアカウント間で利用できる Lambda Authorizer の構築方法について解説しました。本セッションでは、マルチテナントSaaSの開発者やLambda Authorizerの活用を検討している方を対象に、Tactna の事例をもとにした実践的なアプローチを紹介。各事業者ごとに異なるAWSアカウントを持つ環境での認証管理の課題を整理し、それを統合する クロスアカウントLambda Authorizer の設計と実装について詳しく説明しました。

特に、Lambdaのリソースポリシーを活用した統合アプローチの利点や、JWTの発行元AWSアカウントIDを活用してセキュアな認可を実現する方法について具体的なコード例を交えながら解説。また、API Gatewayのリクエストパターン(REQUEST/TOKEN)の選択や、Lambda Authorizerのキャッシュ最適化についても触れ、効率的な認証管理の設計方法を共有しました。

このセッションを通じて、マルチテナント環境における認証管理の課題を解決し、よりスケーラブルでセキュアなAPI認証基盤を構築するためのベストプラクティスを学ぶことができます。

TC3株式会社

February 25, 2025
Tweet

More Decks by TC3株式会社

Other Decks in Programming

Transcript

  1. 自己紹介 • id: iwakrur • TC3株式会社 ◦ アーキテクト • 趣味

    ◦ バラエティ番組鑑賞 ◦ 10ヶ月の我が子を笑顔にすること 2
  2. • TactnaにカスタムAPIをデ プロイする機能がある ◦ 用途例 ▪ アプリ毎の従量課金な ど、独自の利用状況レ ポート表示 ▪

    アプリサーバーからバッ チ処理の実行 6 事業者毎のAuthorizer サービス事業者A 用のAWS環境 API Gateway Lambda Authorizer 独自のAPI処理 Tactnaが 発行するJWT
  3. 8 統合Authorizer サービス事業者A サービス事業者B 参考: クロスアカウントの API Gateway Lambda オーソライザーを設定する

    • Lambdaのリソースポ リシーを利用して共通 化することで解決 Lambda Authorizer
  4. • Lambda Authorizerに 渡るパラメータを見る と、呼び出し元のAWS アカウントに関する情 報を発見 • JWTに発行元のAWSア カウントIDを格納し、

    別事業者のAPIが実行 できないように 10 統合Authorizerをセキュアに 参考: API Gateway Lambda オーソライ ザーへの入力 JWT event パラメータ例 { "type": "TOKEN", "authorizationToken": "<JWT文字列>", "methodArn": "arn:aws:execute-api:ap-northeast-1:11111111111 1:8z1dq6ba9e/v1/GET/report" } 発行元のアカウントID
  5. • 実際には、Tactnaでは以下 理由からJWTには環境毎の IDを格納し、DynamoDBと 照合しながら制御している ◦ 事業者AWSアカウント内に は本番環境だけでなく結合 環境などもある →API

    Gateway ID も必要 ◦ エンドユーザーが扱うJWT に AWSアカウントID や API Gateway ID が含まれ るのは好ましくない 12 統合Authorizer完成版(改) サービス事業者A サービス事業者B JWT 環境毎のID integ 環境 prod 環境 event パラメータ例(再掲) "methodArn": "arn:aws:execute-api:ap-northeast-1:11111111111 1:8z1dq6ba9e/v1/GET/report" 環境毎のID アカウントID API Gateway ID Lambda Authorizer
  6. 結論 • JWT内の値と対応付けて 認可することで、1つの Authorizerで複数環境か らの利用を賄える ◦ JWTをカスタマイズした い場合 Cognito:

    カスタムLambda Auth0: Actions 13 サービス事業者A サービス事業者B JWT integ 環境 prod 環境 Lambda Authorizer
  7. • Authorizerの結果をキャッ シュ可能 ◦ 同じペイロードなら、 Authorizerを実行せず に同じ結果が返る ◦ APIのpath単位など細か く制御したい場合は、

    Rsourceを * にしない 17 Lambda Authorizerのキャッシュ 参考: API Gateway Lambda オーソライ ザーからの出力
  8. API側のLambdaに値を渡したい場合 • JWT内の属性など、API側の Lambdaに値を渡したい場合 は、 context を利用する ◦ 例: ユーザーの識別子、テナ

    ントID ◦ API側は認可済みの値として 利用できるため、実装がシン プルになる ▪ event.requestContext.aut horizer 18