すべてのプロダクト
Search
ドキュメントセンター

API Gateway:パラメータベースのアクセス制御

最終更新日:Jul 31, 2024

1. 概要

パラメーターベースのアクセス制御プラグインを使用すると、リクエストパラメーターまたはAPIのコンテキストに基づいて、バックエンドサービスに送信されたリクエストをフィルタリングする条件を定義できます。 パラメーターの定義方法と条件式の使用方法については、「パラメーターと条件式の使用」をご参照ください。

2. 設定

APIリクエストパスが /{userId}/... で、APIに対してJSON Webトークン (JWT) 認証が有効になっているとします。 JWTでは、userIdとuserTypeの2つのクレームを使用できます。 次のフィルター条件が適用されます。

  • userTypeがadminに設定されている場合、すべてのパスのリクエストが許可されます。

  • userTypeがuserに設定されている場合、同じ /{userId} パスのリクエストのみが許可されます。

---
#
# In this example, the request path of the API is `/{userId}/...
# JWT authentication is enabled for the API. Two claims, userId and userType, are available in the JWT.
# The following filter conditions apply:
# - If userType is set to admin, requests in all paths are allowed. 
# - If userType is set to user, only requests with the `/{userId}/...` path are allowed.
parameters:
  userId: "Token:userId"
  userType: "Token:userType"
  pathUserId: "path:userId"
#
# Rules are defined based on the preceding parameters. For each API request, the plug-in checks the rules in sequence. If a condition in a rule is met, the result is true and the action that is specified by ifTrue is performed. If a condition in a rule is not met, the result is false and the action that is specified by ifFalse is performed.
# The action ALLOW indicates that the request is allowed. The action DENY indicates that the request is denied and an error code is returned to the client. After the ALLOW or DENY action is performed, the plug-in does not check the remaining conditions. 
# If neither the ALLOW nor DENY action is performed, the plug-in proceeds to check the next condition.
rules:
  - name: admin
    condition: "$userType = 'admin'"
    ifTrue: "ALLOW"
  - name: user
    condition: "$userId = $pathUserId"
    ifFalse: "DENY"
    statusCode: 403
    errorMessage: "Path not match ${userId} vs /${pathUserId}"
    responseHeaders:
      Content-Type: application/xml
    responseBody: 
      <Reason>Path not match ${userId} vs /${pathUserId}</Reason>

3. プラグインでのプラグインデータセットの使用

パラメーターベースのアクセス制御プラグインを設定する方法の詳細については、「パラメーターベースのアクセス制御」をご参照ください。

3.1. プラグインデータセットの作成

API Gatewayコンソールにログインします。 Open API> プラグインを選択します。 [カスタムデータセット] 、[データセットの作成] をクリックします。 タイプのPARAMETER_ACCESSを選択します。

image.png

データセットを作成したら、データセットIDをクリックしてデータエントリを表示および追加できます。 このデータセットを参照するパラメーターベースのアクセス制御プラグインは、データエントリを使用して要求をフィルタリングします。 データエントリの有効期間を設定することもできます。 データエントリは、有効期間が経過すると無効になる。

image..png

重要

プラグインデータセットは、専用インスタンスに対してのみ有効です。 プラグインがバインドされているAPIが専用インスタンスにデプロイされていない場合、プラグイン用に設定されたデータセットは有効になりません。

3.2. パラメータベースのアクセス制御プラグインのデータセットの構成

パラメーターベースのアクセス制御プラグインのデータセットを構成するには、assertParameterNameおよびassertInDatasetフィールドをパラメーターベースのアクセス制御プラグインの構成のrulesセクションに追加する必要があります。

  • assertParameterName: プラグインがリクエストをフィルタリングするために使用するパラメーターの名前。 名前はparametersセクションで定義する必要があります。

  • assertInDataset: データセットID。 assertParameterNameに指定されたパラメーターの値がデータセットに含まれているかどうかを確認します。

assertParameterNameフィールドとassertInDatasetフィールドは一緒に使用する必要があります。 それ以外の場合、プラグインの作成に失敗します。

2つのフィールドは、conditionパラメーターと互換性があります。 ルールセクションで指定したルールごとに、assertParameterName + assertInDatasetペアまたは条件、またはその両方を指定できます。 両方が設定されている場合、条件のいずれかを満たす場合、要求は拒否されます。

---
#
# In this example, the request path of the API is `/{userId}/...
# JWT authentication is enabled for the API. Two claims, userId and userType, are available in the JWT.
# The following filter conditions apply:
# - If userType is set to admin, requests in all paths are allowed. 
# - If userType is set to user, only requests with the `/{userId}/...` path are allowed.
parameters:
  userId: "Token:userId"
  userType: "Token:userType"
  pathUserId: "path:userId"
#
# Rules are defined based on the preceding parameters. For each API request, the plug-in checks the rules in sequence. If a condition in a rule is met, the result is true and the action that is specified by ifTrue is performed. If a condition in a rule is not met, the result is false and the action that is specified by ifFalse is performed.
# The action ALLOW indicates that the request is allowed. The action DENY indicates that the request is denied and an error code is returned to the client. After the ALLOW or DENY action is performed, the plug-in does not check the remaining conditions. 
# If neither the ALLOW nor DENY action is performed, the plug-in proceeds to check the next condition.
rules:
  - name: byDataset
    assertParameterName: userId
    assertInDataset: 87b65008e92541938537b1a4a236eda5
    ifTrue: "ALLOW"
  - name: admin
    condition: "$userType = 'admin'"
    ifTrue: "ALLOW"
  - name: user
    condition: "$userId = $pathUserId"
    ifFalse: "DENY"
    statusCode: 403
    errorMessage: "Path not match ${userId} vs /${pathUserId}"
    responseHeaders:
      Content-Type: application/xml
    responseBody: 
      <Reason>Path not match ${userId} vs /${pathUserId}</Reason>

4. エラーコード

エラーコード

HTTP ステータスコード

Message

説明

A403AC

403

${RuleName} によるアクセス制御の禁止

APIにバインドされているパラメーターベースのアクセス制御プラグインによってリクエストが拒否された場合に返されるエラーメッセージ。

5. 制限事項

  • 最大160個のパラメータを定義できます。

  • 各条件式には、最大1,024文字を使用できます。

  • 各プラグインには、最大50 KBのメタデータを含めることができます。

  • 各パラメーターベースのアクセス制御プラグインで最大160個のルールを設定できます。

説明

16を超えるルールを持つプラグインが共有インスタンスのAPIにバインドされている場合、最初の16個のパラメーター定義またはルールのみが有効になります。 このプラグインを専用インスタンスのAPIにバインドすると、量が160を超えない限り、すべてのルールが有効になります。