リソースレベルのポリシー

Mule 3.8.1 以降を使用して、次の条件を満たす API のリソースレベルとメソッドレベルに 1 つ以上の提供されたポリシーを適用できます。

  • API に RAML エンドポイントがある。

  • APIkit または RAML プロキシを使用して API を作成している。

APIkit を使用して、RAML ベースの API を作成し、基本エンドポイントを設定できます。または、既存の API の場合は RAML ベースの API を作成し、プロキシを使用してエンドポイントを設定できます。

リソースレベルで適用されたポリシーはすべてのメソッドまたはリソース内で選択したメソッドに影響します。

methods resources

既存のカスタムポリシーでこの機能をサポートするには、コードを追加する必要があります。

複数の条件を適用してリソースとメソッドを絞り込むことができます。URI テンプレート正規表現は、API の 1 つ、複数、またはすべてのメソッドに適用できます。

サポートされていないポリシー

次のポリシーはリソースに適用できません。

  • クロスオリジンリソース共有

  • LDAP セキュリティマネージャー

  • 単純なセキュリティマネージャー

使用シナリオ

リソースレベルポリシーは想像できる限りのあらゆる用途に使用できます。例をいくつか示します。

  • 特定のリソースへのポリシーの適用

  • API のサブセットの保護

  • 複数のリソースへの異なる制限の設定

リソースレベルポリシーの適用

サンプル API のシミュレーションは次のようになります。

API Console にリソースとメソッドが表示されています。

リソースレベルポリシーは、Java 正規表現をサポートしています。たとえば、ワイルドカードを使用してポリシーを複数のリソースに適用できます。ポリシーを API に適用する場合は、適用対象のリソースを指定します。

Mule 3 でリソースレベルポリシーを使用する場合、リソーステンプレート定義に API ベースパスを含めないでください。

rlp conditions

複数の条件を適用してリソースとメソッドを絞り込むことができます。URI テンプレート正規表現は、API の 1 つ、複数、またはすべてのメソッドに適用できます。

正規表現内で {userid} などのプレースホルダーを使用​しない​でください。式でプレースホルダーを使用すると、プレースホルダーが実際のノードに一致しないため、失敗します。プレースホルダー例の {userid} の場合、ノードは実際には次のようになります。

/api/users/671962fc-f076-4b19-bc38-45ba3a4e4095/permissions/1234

  • 671962fc-f076-4b19-bc38-45ba3a4e4095 がユーザー ID です。

  • 1234 は権限の ID です。

1 人のユーザーとそのリソースより下位のすべてのノードを表すリソース ​/api/users/{userid}​ にポリシーを適用するには、次の式を使用します。

/api/users/.*

権限リソース ​/api/users/{userId/permissions}​ と ​/api/users/{userid}/permissions/{permissionId}​ のみにポリシーを適用するには、次の式を使用します。

/api/users/.*/permissions.*

API のサブセットの保護

作成、更新、削除操作にセキュリティを追加し、参照のみの操作は保護しないままにすることができます。たとえば、特定のメソッドとリソースに HTTP 基本認証ポリシーを適用するとします。POST、PUT、PATCH、DELETE の各メソッドを選択し、次の式を使用して API のすべてのリソース URI を対象とします。

.*

この式は、書き込み操作にセキュリティを適用し、GET (参照のみ) は保護しないままにします。リソースのサブセットのみを対象とするには、より詳細な式を使用します。

複数のリソースへの異なる制限の設定

ユーザー固有の操作に、ユーザーのアクションに応じて異なる制限を使用してレート制限を適用できます。たとえば、レート制限を複数回適用して、一部のリソースへの要求を他のリソースよりも厳しく制限することができます。たとえば、次のノードでユーザーごとに参照、作成、削除操作に異なる制限を設定できます。

 /api/users/.*/.* →
   /api/users/{userId}/assignments;
   /api/users/{userId}/assignments/{param}/values;
   /api/users/{userId}/permissions;
   /api/users/{userId}/permissions/{permissionId}

まず、レート制限ポリシーを特定のメソッドとリソースに適用し、GET (参照) メソッドを選択して、次の正規表現を使用します。

/api/users/.*/.*

次に、ポリシーを設定して、たとえば 1 時間あたり 100 件の要求に制限します。

次に、もう一度レート制限ポリシーを特定のメソッドとリソースに適用し、今度は POST (作成) メソッドを選択して、前回と同じ正規表現を使用します。1 時間あたり 50 件の要求に設定します。

最後に、もう一度レート制限ポリシーを特定のメソッドとリソースに適用し、DELETE (削除) メソッドを選択します。今回も前回と同じ正規表現を使用します。そして、たとえば 2 時間あたり 25 件の要求に設定します。