Amazon Verified Permissions 入門 - Cedar言語による次世代の認可管理

「管理者(UserA)は、リソース(DocumentB)を、編集(Edit)できる」 このようなアプリケーション内の細かい権限ロジック(認可)を、アプリケーションコードの中に if (user.role == 'admin') とハードコードしていませんか?

Amazon Verified Permissionsは、こうした認可ロジックをアプリケーションから切り離し、外部で一元管理・評価するためのサービスです。

Amazon Verified Permissions とは

Amazon Verified Permissionsは、カスタムアプリケーションのための、スケーラブルできめ細かい認可(Fine-Grained Authorization)サービスです。 オープンソースのポリシー言語 Cedar を使用して、アクセス制御ポリシーを定義・管理します。

認可の外部化(Decoupled Authorization)

従来、認可ロジックはアプリケーションコードと密結合しており、変更のたびにデプロイが必要でした。 Verified Permissionsを使用すると、ポリシーをコードから分離できます。

  1. アプリ: 「UserAはDocumentBをEditできますか?」とVerified Permissionsに問合せ (API: IsAuthorized)
  2. AVP: 定義されたCedarポリシーに基づいて評価
  3. AVP: 「ALLOW(許可)」または「DENY(拒否)」を返却
  4. アプリ: 結果に基づいて処理を実行

Cedar ポリシー言語

Verified Permissionsの中核となるのが、AWSが開発した高速で安全なポリシー言語 Cedar です。 読みやすく、かつ論理的に検証可能な設計になっています。

ポリシーの例

「財務部(Finance)のメンバーは、すべての予算(Budget)ドキュメントを閲覧(View)できる」というポリシーは以下のようになります。

cedar
permit (
    principal in Group::"Finance",
    action == Action::"View",
    resource is Document
)
when {
    resource.type == "Budget"
};

「ただし、機密(Private)フラグが立っているドキュメントは、作成者(Owner)以外はアクセスできない」という例外も簡単に追加できます。

cedar
forbid (
    principal,
    action,
    resource
)
when {
    resource.isPrivate == true &&
    resource.owner != principal
};

このように、permit(許可)と forbid(拒否)を組み合わせて、柔軟なルールを記述できます。デフォルトは「拒否(Deny)」です。

主な機能とメリット

1. 一元管理と監査

複数のマイクロサービスに散らばっていた認可ロジックを1箇所に集約できます。 「誰が何にアクセスできるか」というポリシーの変更履歴もバージョン管理され、監査が容易になります。

2. 開発スピードの向上

ポリシーの変更にアプリの再デプロイが不要になります。 セキュリティチームがポリシーを更新し、開発チームはビジネスロジックに集中するという分業が可能になります。

3. 自動推論による安全性

Cedarは「自動推論(Automated Reasoning)」により、ポリシーの正しさを数学的に証明することができます。 「この変更によって、意図せず一般ユーザーに管理者権限を与えてしまわないか?」といった検証を機械的に行えます。

IAM との違い

よくある疑問として「IAMポリシーと何が違うのか?」がありますが、守る対象が異なります。

特徴AWS IAMAmazon Verified Permissions
対象AWSリソース (S3, EC2, Lambda等)アプリケーションリソース (ドキュメント, フォルダ, UI機能等)
主な利用者インフラエンジニアアプリケーション開発者
使用言語IAM Policy (JSON)Cedar
判定場所AWS API呼び出し時アプリケーション内でAPI (IsAuthorized) を呼ぶ時

まとめ

Amazon Verified Permissionsは、SaaSや複雑な業務アプリケーションにおける「誰が何を見れるか」という複雑な問題を解決するための強力なソリューションです。 アプリケーションのセキュリティと開発効率を両立するために、権限ロジックの外部化を検討してみてください。


参考: Amazon Verified Permissions