[アップデート] Amazon Verified Permissions で ID ソースに外部 OIDC プロバイダを指定出来るようになっていました

[アップデート] Amazon Verified Permissions で ID ソースに外部 OIDC プロバイダを指定出来るようになっていました

Clock Icon2024.08.14

いわさです。

少し前ですが、Amazon Verified Permissions で OIDC プロバイダーのサポートが強化されたというアナウンスがありました。

https://aws.amazon.com/about-aws/whats-new/2024/08/amazon-verified-permissions-oidc-identity-providers/

変更点を確認しても具体的に何がどう変わったのか最初どうもわからずでしたが、公式ドキュメントやマネジメントコンソールを調べているうちに何が出来るようになったのかわかりました。

変更点

Amazon Verified Permissions を雑に表現すると、要は「リクエストコンテキスト情報を検証することで、許可されているか拒否されているか判定できる」という認可サービスです。
is-authorized あるいは is-authorized-with-token の2つの検証 API が提供されています。

前者は評価するコンテキスト情報(プリンシパル)をトークンから抽出して API に渡す必要があります。
後者は以前は Cognito ユーザープールのみが対応していたのですが、抽出せずに ID トークンやアクセストークンをそのまま API に渡してスキーマに自動マッピングし Cedar ポリシーで評価することが出来ます。

Cognito ユーザープールでトークン検証を次の記事で試したことがあります。

https://dev.classmethod.jp/articles/amazon-verified-permissions-cognito-id-source/

今回のアップデートでは Cognito ユーザープール以外の外部 OIDC プロバイダーが発行するトークンも is-authorized-with-token API に引き渡して評価に使用出来るようになったようです。

設定方法

Verified Permissiosn のコア機能はポリシーなのですが、オプションで ID ソースを統合することで前述のトークン検証機能を使うことが出来るようになります。

271C2E91-2F14-4AD9-B35F-FDF7AACC82ED_1_105_c.jpeg

以前まではこの機能は Cognito ユーザープール専用だったのですが、いつぞやのアップデートからか外部 OIDC プロバイダーも構成出来るようになりました。
アップデートアナウンスだと 2024/8/5 なのですが、公式ドキュメントだと 2024/6/8 ごろから出来ていたような雰囲気です。
次のようにプロバイダー設定を行うステップが追加されていますね。

4C9AA73A-D555-4E15-AE76-3C0667732B34_1_105_c.jpeg

ここでは設定例として Microsoft Entra ID を連携させる想定で設定を行ってみます。
Issuer URL とマッピングさせるユーザーエンティティの選択が必要です。

C750D2F9-0586-446B-AC68-87F6A00310E5_1_105_c.jpeg

そのため、 ID プロバイダーの作成前にまずスキーマの構成を済ませておきましょう。

79990DEC-526C-4876-925D-1AFB94AD4515.png

ちなみにグループエンティティをマッピングしようとしたところバリデーションエラーとなってしまいました。
選択するだけなので間違ってない気がしますが、今回はユーザーエンティティのみを設定しました。コンソールが対応しきれておらず API だけ設定出来るケースもあるので、グループエンティティの設定については別でまた検証してみます。

A55C8258-6A81-4D5D-9BF8-50A260CB28E1.png

Microsoft Entra のトークン検証してみたが...

で、後は外部 IDP より取得したトークンを使って API を呼び出すのですが、残念ながら失敗しました。

% cat hoge.json
{
    "policyStoreId": "ScnUnieCrvZdpw4ufPvaJQ",
    "identityToken": "hogehogehogehoge",
    "action": {
        "actionType": "Action",
        "actionId": "1111"
    },
    "resource": {
        "entityType": "hoge",
        "entityId": "aaaa"
    }
}
% aws-v1 verifiedpermissions is-authorized-with-token --cli-input-json file://hoge.json

An error occurred (ValidationException) when calling the IsAuthorizedWithToken operation: Failed to verify IdentityToken: invalid key

トークン検証に失敗しているんですよね。キーが正しくないと。
Deny されてる感じではないですねこれは。うまく動いていない気がします。

ただ、トークンのバリデーション自体は出来ているのでキーは問題ないような気もしています。
OIDC では Issuer URL を元に署名キーを検索するのですが、そのあたりがうまく動いていないのか...?

B8D5CE48-909D-4668-8FB6-8C5442C66B50.png

あるいは is-authorized-with-token リファレンスに記載の以下の注意書きが気になっています。

Must be an ID token. Verified Permissions returns an error if the token_use claim in the submitted token isn't id .

token_useは Cognito ユーザープールのトークンの場合は持っているのですがそれが前提になっているのだろうか。

https://docs.aws.amazon.com/cli/latest/reference/verifiedpermissions/is-authorized-with-token.html

今回は Microsoft Entra ID を使ったのですが、アップデートアナウンスによると Cyber​​Ark、Okta、Transmit Security と提携しているとの記載があるので、別の IdP でも試してみたいと思います。

さいごに

本日は Amazon Verified Permissions で ID ソースに外部 OIDC プロバイダを指定出来るようになっていたので設定方法などを確認してみました。

残念ながら検証には失敗しましたが、もう少しこのあたりは試してみたいと思います。
うまく動くようであれば基本的にはトークンの受け渡しだけで Cedar ポリシーで後はうまいことやれるので認可ロジックがよりシンプルになりそうですね。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.