Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Amazon Verified Permissionsをプロダクトにどう組み込むかを考える
Search
Yodeee
November 15, 2023
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Amazon Verified Permissionsをプロダクトにどう組み込むかを考える
Yodeee
November 15, 2023
More Decks by Yodeee
See All by Yodeee
OCI上で実現するAIエージェント開発方法の紹介
yodeee
0
41
re:Inventから見えたレガシーモダナイぜーションのこれから
yodeee
0
140
Bedrock RAG Evaluationを活用したRAGの定量的評価方法の紹介
yodeee
0
350
Moxie
yodeee
0
24
Agents for Amazon Bedrockで何ができるようになるのか
yodeee
2
1.2k
アウトプットし始めたら QOL (Quality of Learning) が爆上がりした話
yodeee
0
140
Pulumi AIで開発体験は変わるのか
yodeee
0
120
GPT × Alexa × AWS で 英会話学習スキルを作った話
yodeee
0
310
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
980
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
The browser strikes back
jonoalderson
0
1.3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
The Invisible Side of Design
smashingmag
301
52k
Optimizing for Happiness
mojombo
378
71k
Un-Boring Meetings
codingconduct
0
320
Ethics towards AI in product and experience design
skipperchong
2
320
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
210
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
400
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
280
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
55k
Transcript
Amazon Verified Permissionsを プロダクトにどう組み込むか を考える 2023/11/15 JAWS-UG横浜 #61 AWS re:Invent
2023 去年のアレどうなった?スペシャル 依田 涼太
依田 涼太 Ryota YODA • 某SIer所属の入社5年目 • テックリードとしてアプリ・インフラ を幅広く担当 •
AWSではサーバレス系のサービスを 使うことが多い @YodeeeTech
Amazon Verified Permissions (AVP) • 2023/6 GA • アプリケーション上のアクセス許可ルールの管理と 認可の機能を提供
• 認可ルールをビジネスロジックから切り離し、 責務の分離とルールの一元管理が可能に
Amazon Verified Permissions (AVP) • 2023/6 GA • アプリケーション上のアクセス許可ルールの管理と 認可の機能を提供
• 認可ルールをビジネスロジックから切り離し、 責務の分離とルールの一元管理が可能に 正直、あまりイメージわかない
AVPをプロダクトにどう組み込むかを考える
前提: AVP登場前のアプリケーション構成
Cognito 例としてユーザ管理サービスを考える アイディティティプロバイダーとしてCognitoを使用 Backend Lambda EC2 ECS ・・・ AVP登場前のアプリケーション構成 API
Gateway Role: Editor カスタム属性情報として、ロール情報を管理
Cognito ① 認 証 IDト ー ク ン ② GET
/users 例としてユーザ管理サービスを考える アイディティティプロバイダーとしてCognitoを使用 Backend Lambda ③Cognito Authorizer トークン検証 EC2 ECS ・・・ AVP登場前のアプリケーション構成 • 認可判定 • 業務ロジック API Gateway ④ Role: Editor カスタム属性情報として、ロール情報を管理
Cognito ① 認 証 IDト ー ク ン ② GET
/users AVP登場前はバックエンドに細かい認可処理を実装する必要があった Backend ③Cognito Authorizer トークン検証 AVP登場前のアプリケーション構成 • 認可判定 • 業務ロジック API Gateway ④ Role: Editor if (role === "editor") { if (resource === "users") { if (method === ”GET”) { return ”ALLOW"; } . . . } } if (role == "viewer") { . . . } if (role === "admin") { . . . }
パターン1: バックエンド側でAVPを呼び出し認可判定を行う
API Gateway Cognito Role: Editor • 認可判定 • AVP認可要求 •
業務ロジック Verified Permissions 1. バックエンド側でAVPを呼び出し認可判定を行うパターン GET /users トークン検証 認可判定 Backend IDト ー ク ン 認 証
API Gateway Cognito Role: Editor • 認可判定 • AVP認可要求 •
業務ロジック Verified Permissions 1. バックエンド側でAVPを呼び出し認可判定を行うパターン GET /users トークン検証 認可判定 Backend IDト ー ク ン Verified Permissions Cedar言語で認可ルールを定義 認可ロジックはLambdaからAVPのポリシーに移譲 認 証
API Gateway Cognito Role: Editor • 認可判定 • AVP認可要求 •
業務ロジック Verified Permissions 1. バックエンド側でAVPを呼び出し認可判定を行うパターン 認 証 GET /users トークン検証 認可判定 Backend IDト ー ク ン Verified Permissions Cedar言語で認可ルールを定義 バックエンドでは認可ロジックの実装の代わりに AVP呼出、認可判定結果のハンドリング処理の実装が必要 const client = new VerifiedPermissionsClient(); const result = await client.send( new IsAuthorizedWithTokenCommand({ identityToken: idToken, . . . }) ); return result.decision // ”ALLOW” or “DENY”
パターン2: Lambda Authorizerに認可処理を集約する
2. Lambda Authorizerに認可処理を集約するパターン Lambda Authorizer上で認可に関わる処理を集約 バックエンドから認可ロジックが完全に切り離された状態になる API Gateway Cognito Role:
Editor Lambda Authorizer 認 証 GET /users IDト ー ク ン Backend ①トークン検証 ②認可判定 Verified Permissions
API Gateway Cognito Role: Editor Verified Permissions Lambda Authorizer 2.
Lambda Authorizerに認可処理を集約するパターン Cognito Authorizerが自動で行っていたトークン検証を含めて実装が必要となる 認 証 GET /users IDト ー ク ン Backend ①トークン検証 ②認可判定 try { // トークン検証(Cognito) const verifier = CognitoJwtVerifier.create(...); await verifier.verify(idToken); // 認可判定(Verified Permissions) const client = new VerifiedPermissionsClient(); const result = await client.send( new IsAuthorizedWithTokenCommand({ . . . }) ); if (result === "DENY") { throw new Error("Unauthorized"); } return generatePolicy("user", "Allow” ...); } catch (error) { . . . ※AWS公式から下記のトークン検証用のライブラリが提供 aws-jwt-verify(Node.js用): https://github.com/awslabs/aws-jwt-verify ② ① Lambda Authorizerの実装例(一部抜粋)
まとめ • AVPを利用することで、認可ポリシーをバックエンドから 切り離すことが可能 • 完全に認可ロジックを分離させるためには行うためには、 Lambda AuthorizerでAVPを呼び出す等の工夫が必要
参考 • Amazon Verified Permissions関連 • Amazon Verified Permissions のご紹介
https://pages.awscloud.com/rs/112-TZM-766/images/20230126_26th_ISV_DiveDeepSeminar_verified_permissions.pdf • Amazon Verified Permissionsを利用した 責務の分割のメリット・デメリット https://speakerdeck.com/kaminashi/advantages-and-disadvantages-of-separation-of-responsibilities-using-amazon-verified-permissionsCognito • Amazon Verified Permissionsで、APIの認可処理を実装する https://catalog.workshops.aws/verified-permissions-in-action/en-US • ハンズオン資料 https://catalog.workshops.aws/verified-permissions-in-action/en-US • 認証・認可関連 • 一番分かりやすいOAuthの説明 https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be • 一番分かりやすい OpenID Connect の説明 https://qiita.com/TakahikoKawasaki/items/498ca08bbfcc341691fe • OAuth 2.0/OpenID Connectの2つのトークンの使いみち https://qiita.com/TakahikoKawasaki/items/498ca08bbfcc341691fe