コンテキストの追加 - Amazon Verified Permissions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

コンテキストの追加

コンテキストは、ポリシーの決定に関連する情報ですが、プリンシパル、アクション、またはリソースのアイデンティティの一部ではありません。一連の送信元 IP アドレスからのみ、またはユーザーが MFA でサインインした場合にのみ、アクションを許可できます。アプリケーションはこのコンテキストセッションデータにアクセスできるため、承認リクエストに入力する必要があります。Verified Permissions 認証リクエストのコンテキストデータは、 contextMap要素で JSON 形式である必要があります。

このコンテンツを説明する例は、サンプルポリシーストア から取得されています。これを行うには、テスト環境にDigitalPetStoreサンプルポリシーストアを作成します。

次のコンテキストオブジェクトは、サンプルDigitalPetStoreポリシーストアに基づいて、アプリケーションの各 Cedar データ型の 1 つを宣言します。

"context": { "contextMap": { "MfaAuthorized": { "boolean": true }, "AccountCodes": { "set": [ { "long": 111122223333 }, { "long": 444455556666 }, { "long": 123456789012 } ] }, "UserAgent": { "string": "My UserAgent 1.12" }, "RequestedOrderCount": { "long": 4 }, "NetworkInfo": { "record": { "IPAddress": { "string": "192.0.2.178" }, "Country": { "string": "United States of America" }, "SSL": { "boolean": true } } }, "approvedBy": { "entityIdentifier": { "entityId": "Bob", "entityType": "DigitalPetStore::User" } } } }
認証コンテキストのデータ型
ブール値

バイナリtrueまたはfalse値。この例では、 trueの のブール値は、顧客が注文の表示をリクエストする前に多要素認証を実行したMfaAuthenticatedことを示します。

設定

コンテキスト要素のコレクション。セットメンバーは、この例のようにすべて同じタイプにすることも、ネストされたセットを含む異なるタイプにすることもできます。この例では、顧客は 3 つの異なるアカウントに関連付けられています。

文字列

文字で囲まれた"文字、数字、または記号のシーケンス。この例では、UserAgent文字列 は、顧客が注文の表示をリクエストするために使用したブラウザを表します。

Long

整数。この例では、 は、このリクエストが顧客が過去の 4 つの注文を表示しようとした結果であるバッチの一部であるRequestedOrderCountことを示します。

レコード

属性のコレクション。これらの属性は、リクエストコンテキストで宣言する必要があります。スキーマを持つポリシーストアには、このエンティティとエンティティの属性をスキーマに含める必要があります。この例では、NetworkInfoレコードには、ユーザーの発信元 IP、クライアントによって決定されるその IP の位置情報、および転送中の暗号化に関する情報が含まれています。

EntityIdentifier

リクエストの entities要素で宣言されたエンティティと属性への参照。この例では、ユーザーの注文は従業員 によって承認されましたBob

サンプルDigitalPetStoreアプリケーションでこのサンプルコンテキストをテストするには、リクエスト entities、ポリシーストアスキーマ、静的ポリシーを Customer Role - Get Order という説明で更新する必要があります。

認可コンテキストを受け入れる DigitalPetStore ように を変更する

最初は、 DigitalPetStore は非常に複雑なポリシーストアではありません。提示したコンテキストをサポートするために、事前設定されたポリシーやコンテキスト属性は含まれていません。このコンテキスト情報を含む承認リクエストの例を評価するには、ポリシーストアと承認リクエストに次の変更を加えます。

Schema

新しいコンテキスト属性をサポートするために、ポリシーストアスキーマに次の更新を適用します。actions 次のように GetOrderの を更新します。

"GetOrder": { "memberOf": [], "appliesTo": { "resourceTypes": [ "Order" ], "context": { "type": "Record", "attributes": { "UserAgent": { "required": true, "type": "String" }, "approvedBy": { "name": "User", "required": true, "type": "Entity" }, "AccountCodes": { "type": "Set", "required": true, "element": { "type": "Long" } }, "RequestedOrderCount": { "type": "Long", "required": true }, "MfaAuthorized": { "type": "Boolean", "required": true } } }, "principalTypes": [ "User" ] } }

リクエストコンテキストNetworkInfoで という名前recordのデータ型を参照するには、次のようにスキーマに commonType コンストラクトを作成します。commonType コンストラクトは、異なるエンティティに適用できる属性の共有セットです。

注記

Verified Permissions ビジュアルスキーマエディタは現在、commonTypeコンストラクトをサポートしていません。スキーマに追加すると、ビジュアルモードでスキーマを表示できなくなります。

"commonTypes": { "NetworkInfo": { "attributes": { "IPAddress": { "type": "String", "required": true }, "SSL": { "required": true, "type": "Boolean" }, "Country": { "required": true, "type": "String" } }, "type": "Record" } }
Policy

次のポリシーは、指定された各コンテキスト要素によって満たされる必要がある条件を設定します。既存の静的ポリシーに基づいて構築され、「カスタマーロール - 注文の取得」という説明が付きます。このポリシーでは、最初は、リクエストを行うプリンシパルがリソースの所有者である必要があるだけです。

permit ( principal in DigitalPetStore::Role::"Customer", action in [DigitalPetStore::Action::"GetOrder"], resource ) when { principal == resource.owner && context.MfaAuthorized == true && context.UserAgent like "*My UserAgent*" && context.RequestedOrderCount <= 4 && context.AccountCodes.contains(111122223333) && context.NetworkInfo.Country like "*United States*" && context.NetworkInfo.SSL == true && context.NetworkInfo.IPAddress like "192.0.2.*" && context.approvedBy in DigitalPetStore::Role::"Employee" };

これで、注文を取得するリクエストが、リクエストに追加した追加のコンテキスト条件を満たすことを要求しました。

  1. ユーザーは MFA でサインインしている必要があります。

  2. ユーザーのウェブブラウザには文字列 が含まれているUser-Agent必要がありますMy UserAgent

  3. ユーザーは 4 件以下の注文を表示するようにリクエストしている必要があります。

  4. ユーザーのアカウントコードの 1 つは である必要があります111122223333

  5. ユーザーの IP アドレスは米国から発信され、暗号化されたセッションにあり、ユーザーの IP アドレスは で始まる必要があります192.0.2.

  6. 従業員は注文を承認する必要があります。承認リクエストの entities要素では、 のロールBobを持つユーザーを宣言しますEmployee

Request body

適切なスキーマとポリシーを使用してポリシーストアを設定したら、この認証リクエストを Verified Permissions API オペレーション に提示できますIsAuthorizedentities セグメントにはBob、ロールが のユーザーである の定義が含まれていることに注意してくださいEmployee

{ "principal": { "entityType": "DigitalPetStore::User", "entityId": "Alice" }, "action": { "actionType": "DigitalPetStore::Action", "actionId": "GetOrder" }, "resource": { "entityType": "DigitalPetStore::Order", "entityId": "1234" }, "context": { "contextMap": { "MfaAuthorized": { "boolean": true }, "UserAgent": { "string": "My UserAgent 1.12" }, "RequestedOrderCount":{ "long": 4 }, "AccountCodes": { "set": [ {"long": 111122223333}, {"long": 444455556666}, {"long": 123456789012} ] }, "NetworkInfo": { "record": { "IPAddress": {"string": "192.0.2.178"}, "Country": {"string": "United States of America"}, "SSL": {"boolean": true} } }, "approvedBy": { "entityIdentifier": { "entityId": "Bob", "entityType": "DigitalPetStore::User" } } } }, "entities": { "entityList": [ { "identifier": { "entityType": "DigitalPetStore::User", "entityId": "Alice" }, "attributes": { "memberId": { "string": "801b87f2-1a5c-40b3-b580-eacad506d4e6" } }, "parents": [ { "entityType": "DigitalPetStore::Role", "entityId": "Customer" } ] }, { "identifier": { "entityType": "DigitalPetStore::User", "entityId": "Bob" }, "attributes": { "memberId": { "string": "49d9b81e-735d-429c-989d-93bec0bcfd8b" } }, "parents": [ { "entityType": "DigitalPetStore::Role", "entityId": "Employee" } ] }, { "identifier": { "entityType": "DigitalPetStore::Order", "entityId": "1234" }, "attributes": { "owner": { "entityIdentifier": { "entityType": "DigitalPetStore::User", "entityId": "Alice" } } }, "parents": [] } ] }, "policyStoreId": "PSEXAMPLEabcdefg111111" }