[アップデート] Amazon Verified Permissions でポリシーストアエイリアスと名前付きポリシー・ポリシーテンプレートがサポートされ、マルチテナント運用やポリシー管理が簡単になりました
いわさです。
Amazon Verified Permissions は Cedar ポリシー言語を使ってアプリケーションのきめ細かな認可を管理・実行できるサービスです[1]。
ポリシーストアにポリシーを集約し、IsAuthorized API でプリンシパルがリソースに対してアクションを実行できるかどうかを判定します。
これまでポリシーストアを API で指定する際には PSEXAMPLEabcdefg111111 のようなシステム生成の ID を使う必要がありました。
マルチテナントアプリケーションではテナントごとにポリシーストアを分離するケースがありますが、テナント識別子とポリシーストア ID を紐づけるマッピングテーブルを自前で管理しなければなりませんでした。
同様に、個々のポリシーやポリシーテンプレートもシステム生成の ID でしか参照できず、ポリシーが増えるにつれて管理が煩雑になっていました。
今回のアップデートで、ポリシーストアエイリアス、名前付きポリシー、名前付きポリシーテンプレートの 3 つの機能が追加されました。
ポリシーストアエイリアスはポリシーストアに人間が読みやすい別名を付けられる機能で、policyStoreId を受け付ける API 操作でエイリアスをそのまま使えるようです。名前付きポリシー・ポリシーテンプレートも同様に、システム生成の ID の代わりに name/ プレフィックス付きの名前で参照できるようになるみたいです。
なお、ドキュメントの更新履歴を確認すると、ポリシーストアエイリアスは 2025 年 2 月 26 日、名前付きポリシー・ポリシーテンプレートは 2025 年 3 月 4 日にドキュメントへ追加されていたようです[2]。機能自体は先行して実装されており、今回の What's New で正式にアナウンスされた形みたいですね。
今回こちらを確認してみたので紹介します。
ポリシーストアエイリアスを使ってみる
では早速、ポリシーストアエイリアスを実際に試してみましょう。ポリシーストアエイリアスにフォーカスして、従来のやり方と、今回の機能を使ったやり方をそれぞれ確認してみます。
事前準備
検証用のポリシーストアを作成済みです。サンプルの DigitalPetStore スキーマとポリシーが設定してあります。

左ナビに「エイリアス」メニューが追加されていることがわかりますね。
ポリシーストア ID は SWuv1Cfp6U2sZSNwsbKS2U のようなシステム生成の文字列です。
従来のポリシーストア ID を使った認可判定を確認してみる
まず、従来の方法でポリシーストア ID を直接指定して is-authorized を実行してみます。
Store-Owner ロールの alice ユーザーが PetStore アプリケーションの GetStoreInventory アクションを実行できるかを確認します。
$ aws verifiedpermissions is-authorized \
--policy-store-id SWuv1Cfp6U2sZSNwsbKS2U \
--principal entityType=DigitalPetStore::User,entityId=alice \
--action actionType=DigitalPetStore::Action,actionId=GetStoreInventory \
--resource entityType=DigitalPetStore::Application,entityId=PetStore \
--entities 'entityList=[{identifier={entityType=DigitalPetStore::User,entityId=alice},parents=[{entityType=DigitalPetStore::Role,entityId=Store-Owner}]}]' \
--profile hoge
{
"decision": "ALLOW",
"determiningPolicies": [
{
"policyId": "3Yo2Z5XHdRdjTu8FY57fTq"
}
],
"errors": []
}
認可判定は ALLOW で問題なく動作しますが、このポリシーストア ID をアプリケーションから指定するには、コードに直接埋め込むか、テナントごとにポリシーストアを使い分ける場合はテナント識別子とポリシーストア ID のマッピングテーブルを独自に管理する必要がありました。
ポリシーストアエイリアスをコンソールから作成する
では、このポリシーストアにエイリアスを作成してみます。左ナビの「エイリアス」をクリックすると、エイリアスの一覧画面が表示されます。

「エイリアスを作成」ボタンをクリックすると、作成ダイアログが表示されます。

エイリアス名には policy-store-alias/ というプレフィックスが自動的に付与されます。(コンソールだと日本語になっちゃってますが...)
使用できる文字は英数字、ハイフン、スラッシュ、アンダースコアのみで、最大 150 文字です。
マルチテナントを想定して hoge-tenant-1 というエイリアス名で作成してみました。

エイリアスが Active 状態で作成されました。ARN にも policy-store-alias/hoge-tenant-1 が含まれており、独立した AWS リソースとして作成されていることがわかります。
さらにもう 1 つ hoge-tenant-2 というエイリアスも作成してみました。

1 つのポリシーストアに複数のエイリアスを関連付けられることが確認できますね。
普通の運用であればそれぞれのポリシーストアに別のテナントエイリアスが設定されそうですが、同じポリシーストアに複数のエイリアスを設定することも出来るのか。
デフォルトでは 1 つのポリシーストアに最大 10 個のエイリアスを関連付けられるみたいです。
By default, only 10 policy store aliases can be associated with the same policy store.
エイリアスを使って認可判定してみる
では、先ほどと同じ認可判定を、今度はエイリアスを使って実行してみます。--policy-store-id にエイリアス名を指定するだけです。
$ aws verifiedpermissions is-authorized \
--policy-store-id policy-store-alias/hoge-tenant-1 \
--principal entityType=DigitalPetStore::User,entityId=alice \
--action actionType=DigitalPetStore::Action,actionId=GetStoreInventory \
--resource entityType=DigitalPetStore::Application,entityId=PetStore \
--entities 'entityList=[{identifier={entityType=DigitalPetStore::User,entityId=alice},parents=[{entityType=DigitalPetStore::Role,entityId=Store-Owner}]}]' \
--profile hoge
{
"decision": "ALLOW",
"determiningPolicies": [
{
"policyId": "3Yo2Z5XHdRdjTu8FY57fTq"
}
],
"errors": []
}
ポリシーストア ID を使った場合とまったく同じ認可結果が返ってきました。良いですね!
--policy-store-id SWuv1Cfp6U2sZSNwsbKS2U が --policy-store-id policy-store-alias/hoge-tenant-1 に変わっただけで、同じ認可結果が得られました。マッピングテーブルを独自に管理せずに、アプリケーションで使っているテナントコンテキストをそのままエイリアス名として使えばいいだけですね。
さいごに
本日は Amazon Verified Permissions にポリシーストアエイリアス、名前付きポリシー、名前付きポリシーテンプレートが追加されたので確認してみました。
特にポリシーストアエイリアスは、マルチテナント構成でテナント識別子とポリシーストア ID のマッピングテーブルを自前管理していた方にとっては嬉しいアップデートかもしれないですね。
名前付きポリシーも、ポリシーが増えてきた環境では SPEXAMPLEabcdefg111111 のような ID ではなく意味のある名前で管理できるので、運用がちょっと楽になりそうです。







