はじめに
AWS Verified AccessやAmazon Verified Permissionsって紛らわしいですよね。どっちがどっちだかわからなくなるところなのですが、今回は、Amazon Verified Permissionsを使った認可制御についてのアーキテクチャを考えます。
ゴールとしては、Amazon Verified Permissionsはどんなやつなのか理解する、です。
Amazon Verified Permissionsとは
Amazon Verified Permissionsは、アプリケーションのアクセス許可の管理およびきめ細かな承認サービスです。制御については、ポリシー言語である Cedar を使用して、ロールと属性を使用してポリシーベースのアクセス制御を定義し、よりきめ細かくコンテキストに応じたアクセス制御を行うことができます。
単純に認可だけするサービスです。
認可制御するとき
よくあるアーキテクチャ(EC2)
EC2でアプリケーションを起動していることを考えてみます。いろいろなフレームワークがありますが、認可制御するための情報は、例えば、設定ファイルでEC2に持っていたり、DBに持っていたりします。
リクエストがくる(/usersにgetなど)と、アプリケーションが認可制御するための情報を読み取り、アクセスを許可するか、拒否するかを判断し、制御を行います。
オンプレでもよくある構成ですが、システムそれぞれで設定する手間などがありますね。
クラウドネイティブアーキテクチャ(API Gateway + Lambda)
次にクラウドネイティブアーキテクチャについて考えてみます。認証はCognito、APIとしてAPI Gateway、Lambdaの構成を例にします。(API GatewayはLambda Authorizerパターンです。細かい説明は割愛します。)
よくあるアーキテクチャ(EC2)と同様に認可制御するための情報を設定ファイルやDBで持っていたりします。ハードコーディングもあるかも?!
Lambda(アプリケーション部分)で認可制御するための情報を読み取り、アクセスを許可するか、拒否するかを判断し、制御を行います。または、CognitoでIAMロールのクレデンシャルを払い出して、AWSリソースごとの制御も可能です。その場合、認可制御するための情報はCognitoに持つこととなります。
Verified Permissionsの世界
Verified Permissionsなクラウドネイティブアーキテクチャ(API Gateway + Lambda)
では、次にVerified Permissionsを利用したクラウドネイティブアーキテクチャについて考えてみます。
認可制御は、Verified Permissionsが担います。リクエストがくる(/usersにgetなど)と、Lambda(Authorizer)がisAuthorizedまたはisAuthorizedWithTokenでVerified Permissionsにアクセスを許可するか、拒否するかを聞き、その結果でレスポンスを制御します。制御内容については、Verified Permissionsの設定になるため、変更があってもシステム側(アプリケーションなど)を修正する必要がありません。
Verified Permissions側では、そのアクセスが誰からなのかを識別し、アクセスして良いかをCedarを使って記述し、制御することになります。
例えば、以下のような設定です。ユーザ「User001」でアクセスすると全て許可します、というポリシーになります。
Verified Permissionsを使う時の注意点
isAuthorized、IsAuthorizedWithTokenは、1秒あたり200リクエストが上限なので超えそうな場合は、上限緩和申請をしましょう。
https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/quotas.html
まとめ
Amazon API Gatewayを使ったアーキテクチャの際にAmazon Verified Permissionsをどう使うのかを見てみました。使うポイントは理解できたかと思うのですが、そのメリットはどこに?というところではないでしょうか。今回のようなアーキテクチャのシステムが複数あり、中央集権的にアクセスの承認を制御する場合に非常にメリットが生まれると個人的には思っています。単純に1つのシステムだけなら使うという選択は難しいかと思います。(コストもかかりますし、複雑でなければ他の機能で制御できちゃいますし。)
利用する際は、注意が必要ですね。次回はAppSyncでのAmazon Verified Permissionsな世界をもう少し踏み込んでみたいと思います。