kakakakakku blog

Weekly Tech Blog: Keep on Learning!

アプリケーションの認可ソリューションを体験できる「Amazon Verified Permissions workshop」

Amazon Verified Permissions を学ぶため「Amazon Verified Permissions workshop」を実施してみた💡3時間ほどで Amazon Verified Permissions の基本的な概念・マネジメントコンソール操作から,実際にサーバーレスアプリケーションに組み込んだときの実装例も学べてとても良かった❗️

boto3 の操作だと,通常の is_authorized() 以外に is_authorized_with_token()batch_is_authorized() も出てくる💡もし Amazon Verified Permissions をまだ試したことがないけど気になってる人がいたらおすすめ.個人的な実施メモをまとめておこうと思う \( 'ω')/

catalog.workshops.aws

Lab 1 - Amazon Verified Permissions Console Demo

まず,マネジメントコンソールで Amazon Verified Permissions に入門する.ポリシーストア・ポリシーを設定して,テストベンチを使って認可リクエストの動作確認をする👌

alice は LIST#000001 を ReadList できる🙆‍♂

alice は LIST#000002 を ReadList できない🙅‍♂

さらに認可仕様のスキーマを設定する.今回は TinyTodo という TODO リストを管理するアプリケーションを題材にしているため「タスク」「タスクリスト」を操作するアクションをスキーマに設定している✅ スキーマによってポリシーを厳格に設定できることを確認し,またポリシーテンプレートも活用することでポリシーを再利用できるようにした.Lab 1 で Amazon Verified Permissions の基本的な流れを掴むことができた.

スキーマ(アクション図)

Lab 2 - Application Built on Amazon Verified Permissions

Lab 2 からは Amazon Verified Permissions を TinyTodo アプリケーションに組み込んでいく❗️Amazon Verified Permissions 以外は AWS CloudFormation で簡単に構築できる.サーバーレスアーキテクチャに理解があれば良いと思うけど,もし Amazon API Gateway / AWS Lambda / Amazon Cognito / Amazon DynamoDB に慣れていなければ,ワークショップを進める前にデプロイされたサービスの設定などをザッと確認しておくと進めやすくなると思う👌

TinyTodo アーキテクチャ図は Lab 2 から引用

あとは API を実行してタスク一覧の取得・新しいタスクの登録を試す.boto3 で is_authorized() を実行する実装の流れも理解できた.

boto3.amazonaws.com

$ curl -X POST "$WS_API_ENDPOINT/task/create" \
>   -H "Content-Type: application/json" \
>   -H "Authorization: Bearer $WS_ACCESS_TOKEN_ALICE" \
>   -d '{
quote>         "listId": 1,
quote>         "name": "Task 7 - Execute The Project Plan",
quote>         "description": "Once you have got your project plan in place, it is time to execute it—and bring your project to life!"
quote>       }' | jq
{
  "taskId": 7
}

$ curl -X POST "$WS_API_ENDPOINT/task/create" \
>   -H "Content-Type: application/json" \
>   -H "Authorization: Bearer $WS_ACCESS_TOKEN_ALICE" \
>   -d '{
quote>         "listId": 2,
quote>         "name": "Task 7 - Execute The Project Plan",
quote>         "description": "Once you have got your project plan in place, it is time to execute it—and bring your project to life!"
quote>       }' | jq
{
  "message": "Access denied -- permissions check failed"
}

さらに Lab 2 の最後は boto3 で create_policy() を実行して,アプリケーションからポリシーを追加する実装もあって参考になった❗️へぇ〜

boto3.amazonaws.com

Lab 3 - Using Identity Sources

Amazon Cognito User Pool の「カスタム属性」として project: Project-Alpha を追加して,認証時の ID Token (JWT) に含まれる custom:project をそのまま認可リクエストに使う流れを体験した.そして,boto3 で is_authorized_with_token() を実行すると ID Token (JWT) をそのまま渡せることも学べた❗️

ID Token (JWT) を渡せるとは言え,boto3 のドキュメントに At this time, Verified Permissions accepts tokens from only Amazon Cognito. と書いてあるのは注意点かなと💡

boto3.amazonaws.com

Lab 4 - Authorization Improvements

最後の Lab 4 ではもともと意図的に組み込まれていた実装上の誤りを修正しつつ,タスクリストの共有機能の動作確認を進めていく.そして,Amazon Verified Permissions への認可リクエストが過剰に増えてしまうことを AWS X-Ray で確認しつつ,boto3 の batch_is_authorized() を使って改善する.

boto3.amazonaws.com

batch_is_authorized() 活用前

batch_is_authorized() 活用後

認可リクエストをまとめて実行できる機能が提供されているのも知らなくて勉強になった❗️2023年11月にリリースされた機能だったのか〜 \( 'ω')/

aws.amazon.com

まとめ

Amazon Verified Permissions に実践入門できるワークショップ「Amazon Verified Permissions workshop」を試した👌 Amazon Verified Permissions の基本的な概念・マネジメントコンソール操作から,実際にサーバーレスアプリケーションに組み込んだときの実装例も学べてとても良かった❗️

今回は TinyTodo アプリケーションに組み込んだけど,実際に仕事で Amazon Verified Permissions を活用する場合は認可モデルの設計が良し悪しを決めるのは間違いなく,ドキュメントにモデリングの指針がまとまっているため,あわせて読んでおくと良さそう📝

docs.aws.amazon.com