AWSは先日、Amazon API GatewayのリクエストがAmazon Verified Permissionsで認証可能になったことを発表した。この機能によって、Amazon Cognitoが発行したトークンを含むHTTPリクエストを使用し、APIリソースに対して認可の判断ができる。
Amazon Verified Permissionsはランタイムの認可エンジンである。2023年6月に開始されたこのサービスにより、ユーザーはリソースに対してきめ細かな認可モデルを構築し、それに対するアクセス要求をリアルタイムで評価できる。Amazon Verified Permissionsの認可モデルはスキーマとして表現され、特定のアプリケーションのコンテキストにおけるプリンシパル、リソース、アクションのタイプを特定する。
スキーマが定義されると、サービスのユーザはプリンシパルの役割や関連する属性に基づいてリソースへのアクセスを許可または拒否するポリシーを作成できる。スキーマとポリシーが利用できるようになると、AWS SDKまたはHTTPリクエストによって、Amazon Verified PermissionsのIsAuthorizedエンドポイントに認可リクエストを行う。これはチェックの結果、適用されたポリシー、評価中に発生したエラーを返す。Amazon Verified Permissionsのリクエスト毎の認可はAmazon API Gatewayの既存のアクセスコントロールメカニズムと類似しており、より簡単な方法でユーザーに提供する。
Amazon API GatewayでAmazon Verified Permissionsを活用するには、Lambda Authorizerが必要だ。Lambda Authorizerは、Amazon Verified Permissionsへの認可呼び出しに必要なフィールドを抽出、決定エンドポイントを呼び出し、Amazon API Gatewayのフォーマットに合わせてレスポンスを変換する。新しくリリースされた機能の一部には、このためびサンプルLambda Authorizerを含むAWS CloudFormationテンプレートが付属している。
Lambda Authorizerが正常に動作するためには、Amazon API Gatewayリクエストのプリンシパル、アクション、リソースが、Amazon Verified Permissionsのスキーマとポリシーにマッピングされている必要がある。クイックスタートガイドによると、新機能の一部では、Cognito User Poolエンティティをスキーマのプリンシパルとしてインポートし、API Gatewayリソースをアクションにマッピングできる。これが完了すると、アクセス制御を実施するためのポリシーを設定できる。APIへのリクエスト時に、呼び出し側のクライアントは、リソースへのアクセスを検証するために、サインインしたAmazon CognitoユーザーからのアクセストークンまたはIDトークンを含めるだけでよい。
Amazon Verified PermissionsとAmazon API Gatewayを統合する際の主な欠点は、関連するコストである。Amazon Verified Permissionsは100万リクエストあたりおよそ150ドルであるのに対し、Amazon API GatewayはよりシンプルなHTTPオプションで100万リクエストあたり1ドル、より高価なRESTオプションで100万リクエストあたり3.50ドルである。LinkedInでこの発表を振り返り、Lumigoのサーバーレス・アドボケイトであるYan Cui氏は次のように述べた。
非常に優れたサービスであり、ぜひ使ってみたいです。しかし、現在の価格設定では、もっとも危機的な状況で、もっとも予測可能かつ、スループットの低い環境を除いては法外な値段だと思います。
Amazon Cognitoトークンを使ってHTTPリクエストにきめ細かいアクセス制御を適用する代替アプローチには、OpenFGA やPermit.ioのPolicy Decision Pointがある。前述したソリューションは、より費用対効果の高いオプションを提供できるが、認可モデルの作成を簡素化するために Amazon CognitoやAmazon API Gatewayとワンクリックで統合できない。
最後に、Amazon Verified Permissionsは全ての商用AWSリージョンで利用可能であり、AWS API GatewayやAmazon Cognitoとの統合に関する詳細はユーザーガイドで確認できる。