Amazon Verified Permissions workshopをやってみた

2024.06.04

こんにちは、NTT東日本の白鳥です。
5月28日開催の「AWSを最大活用するための1dayカンファレンス」にご参加いただいた方、誠にありがとうございました。
たくさんの方にご参加いただき、感謝しております。
カンファレンスは終わっても、クラソルとのクロスコラボレーションは続いていきます!

きっかけ

先日のカンファレンスの質疑応答でこのような質問がありました。
「Webアプリの認証認可でAmazon Cognitoを利用するのは古くないか?」
古いかどうかはさておき、当日の回答では認証やユーザープールでOIDCを使う話をさせていただきました。しかし、認可のほうではAmazon Verified Permissionsも使えることに触れていませんでした。
当サービスGAして約1年になりますが、まだまだDevelopersIOでの記事も少なく、まだ自身の理解も少なかったため、ちょうどいいワークショップを見つけたのでやってみることにしました。

できるようになること

ワークショップはこちらです。

日本語対応は今日時点ではされていないので、英語で読み進めることになります。
本ワークショップを完了すると、こんなことができるようになります。

  • Amazon Verified Permissionsのポリシーストアの作成
  • 静的ポリシーまたはテンプレートにリンクされたポリシーの作成
  • Amazon Verified Permissionsのテストベンチを使ったポリシーのテスト
  • ポリシーが追加される前に検証できるよう、スキーマを定義する
  • ポリシーストアとIdPの接続のためのアイデンティティソースの利用
  • バッチ認証を使用して複数のリクエストを同時に承認する

大きな流れとしては、アプリケーションを構築し、主に認証認可まわりの設定を確認していく形になります。
サンプルのアプリケーションは、ToDoリストを管理するアプリで、API GatewayやLambdaなどを利用したサーバレスアプリをイメージしていただければと思います。
認証にCognito、認可にVerified permissionsを使用します。
ワークショップの中にも概要はありますが、詳細なアプリの構成は本筋ではないので省略します。

やってみた

準備

本ワークショップでは、AWS Cloud9を使っていきます。
Cloud9のインスタンス構築はチュートリアル通りに進めます。
AWS Cloud9公式ドキュメント

AWS Cloud9構築が終わったら、ワークショップの手順に基づいて開発環境を整えます。
ここで、アプリケーションの構築まで完了させます。 アプリケーションの構築が完了すると、認証認可まわりは次のような構成になります。

認証認可の動き

  1. ユーザーがAmazon Cognito経由でサインアップ
  2. Pre Signup Lambdaがユーザーを確認
  3. Post Confirmation LambdaがDynamoDBにユーザーを登録、ユーザーのタスクのStarterListを作成
  4. ユーザーがアプリケーションからリソースを要求する際にCognitoのアクセストークンを送信
  5. Cognitoがアクセストークンを検証
  6. API LambdaがDynamoDBからリクエストコンテクストを収集し、Verified permissionsでユーザーがアクセスできるかを検証。承認されたら、ユーザーにリクエストされたリソースを返す

Lab 1 - Amazon Verified Permissions Consoleデモ

ここでは、ポリシーストアの作成、スキーマの編集、サンプルポリシーとポリシーテンプレートの作成を行います。テストベンチを使って、Ceder(シーダー)ポリシーの書き方と、それがどのように働くかを見ていきます。

Lab 2 - Amazon Verified Permissionsを使ったアプリケーションの構築

ここでは、Amazon Verified Permissionsを使った認可の仕組みを整えていきます。Lambdaでのポリシーの呼び出しやユーザーがタスクのシェアなどなんらかのアクションを行った際のポリシーの追加を見ていきます。

Lab 3 - アイデンティティソースの利用

ここでは、Amazon Verified permissionsとIdPとの連携を行っていきます。 Amazon Verified Permissionsを使うと、Cognitoで生成されたIDまたはアクセストークンを直接渡して認可を引き受けることができます。

Lab 4 - 認可機能の改善

最後のLabでは、認可機能のチューニングや改善を行ってUXを改善していく方法を試していきます。パーミッションの固定、X-Rayを利用したトレースやバッチ認証を試しながら、パフォーマンス改善を行います。

まとめ

Cederの概念の理解から始まり、Amazon Verified permissionsを使っていくのはなかなか学習コストが高いと感じていましたが、本ワークショップを通じて一通りの動きは理解できたように思います。
認可機能をアプリケーションから切り離すことが可能になる、ポリシーチェックが一元化されるといったメリットはあるので、ぜひ使ってみてはいかがでしょうか?
なおAmazon Verified Permissionsに関する記事は、下記の記事一覧も参考にしていただければと思います。

Amazon Verified Permissionsの記事一覧