このページは Apigee と Apigee ハイブリッドに適用されます。
Apigee Edge ドキュメントを表示する
構成可能な API プロキシプレビューのスキーマには、プロキシに機能を追加するためのさまざまなオプションがあります。以降のセクションでは、一般的なユースケースをサポートするために使用されるプロキシ構成の例を示します。構成オプションの詳細については、ApiConfig スキーマのリファレンス ページをご覧ください。ApiConfig
スキーマは、構成可能なプロキシを定義する YAML ファイルを構造化するために使用されます。
構成可能な API プロキシプレビューの開発は、Apigee 有料サブスクリプションの組織を使用しているお客様のみが行えます。従量課金制の組織を使用している Apigee のお客様は、プログラム可能な API プロキシを作成できます。
パススルー プロキシ
構成可能な API プロキシプレビューの最も単純な構成モデルは、パススルー プロキシ構成です。この構成では、プロキシは basePath
でトラフィックを受信し、情報をバックエンド ターゲットにルーティングします。
次に例を示します。
#config.yaml basepath: "/helloworld" target: uri: https://mocktarget.apigee.net
この例では、構成の最初の行にベースパスが含まれています。これは必須のパラメータです。
構成のルールのセクションには、すべての受信リクエストをルーティングするターゲット エンドポイントが含まれています。このプロキシ バンドルの例では、セキュリティ情報や追加のエンドポイントへのルーティングに関する情報を適用しません。
オペレーションが含まれるプロキシ
この構成例ではオペレーション(メソッドとパスの組み合わせ)が宣言されています。API プロキシのデベロッパーは、リクエストされたオペレーションに基づいてさまざまなアクションを実装したり、異なるポリシーを適用したりできます。
次に例を示します。
#config.yaml basepath: "/helloworld" target: uri: https://mocktarget.apigee.net operations: # First match wins - id: help http_match: - path_template: "/help" method: GET - id: status http_match: - path_template: "/status/*" # A single "*" matches a single path segment method: GET
この構成例の operations セクションは、プログラム可能なプロキシ バンドルのフロー条件のように機能します。フロー条件の使用方法については、条件付きフローによるコードの条件付き実行をご覧ください。
セキュリティが適用されるプロキシ
API セキュリティの重要な部分は、API へのアクセスの制御、暗号化された機密データへのアクセスと実行時のマスキング、バックエンド サービスへの直接アクセスからの保護です。構成可能な API プロキシプレビューでは、次の例のように、いくつかのセキュリティ適用オプションを実装できます。
API キー検証を有効にする
この構成例では、公開されているすべてのオペレーションに対して API キー検証が有効になります。API キー検証を適用するルールは consumer_authorization
です。この構成ルールは、所定の場所に API キーが存在するかを確認します。キーが存在する場合は、その API キーの有効性と、その API キーが API にアクセスできるかどうか(つまり、API プロキシにアクセスできる API プロダクトに登録しているかどうか)を確認します。
次に例を示します。
#config.yaml basepath: "/helloworld" operations: - id: help http_match: - path_template: "/help" method: GET - id: status http_match: - path_template: "/status/*" method: GET target: uri: https://mocktarget.apigee.net consumer_authorization: # API Key enforcement locations: - header: x-api-key
consumer_authorization
ルールはプロキシのグローバル セクションにあるため、プロキシ バンドル内のすべてのオペレーションに適用されます。
OAuth を有効にする
構成可能な API プロキシプレビューでの OAuth の有効化には、次の 2 つの側面があります。
- OAuth アクセス トークンの取得
- API へのアクセスの検証 / 付与
以降のセクションで、それぞれの側面について説明します。
OAuth アクセス トークンを取得する
構成可能なプロキシの OAuth アクセス トークンを取得するプロセスは、プログラム可能なプロキシの場合と同じです。プログラム可能な API プロキシ バンドルを使用して、OAuth アクセス トークンを取得します。OAuth2 ポリシーの構成に必要な手順の例については、アクセス トークンと認可コードのリクエストをご覧ください。
API へのアクセスの検証と承認
Apigee で OAuth アクセス トークンを検証して承認するには、次の手順を実行します。
- JWT 認証の要件を定義します。このセクションでは、プロキシが JWT トークンを検証する方法を定義します。
次に例を示します。
#config.yaml authentication: jwt: id: apigee_oauth audiences: ["developer-app1"] issuer: "SERVICE_ACCOUNT_EMAIL" remote_jwks: uri: "https://www.googleapis.com/service_accounts/v1/jwk/serviceaccount" cache_duration: 600s locations: - header: Authorization transformation: template: "Bearer {token}" substitution: "{token}" target: uri: https://mocktarget.apigee.net consumer_authorization: locations: - jwt_claim: requirement: apigee_oauth name: client_id
- API へのアクセスに使用する Apigee クライアント ID の場所を定義します。これは通常、Apigee がデベロッパー アプリケーションによる API プロダクトへのアクセスを承認するために使用する認証情報を含む JWT クレームです。
次に例を示します。
#config.yaml authentication: jwt: id: apigee_oauth audiences: ["developer-app1"] issuer: "SERVICE_ACCOUNT_EMAIL" remote_jwks: uri: "https://www.googleapis.com/service_accounts/v1/jwk/serviceaccount" cache_duration: 600s locations: - header: Authorization transformation: template: "Bearer {token}" substitution: "{token}" target: uri: https://mocktarget.apigee.net consumer_authorization: locations: - jwt_claim: requirement: apigee_oauth name: client_id
API アクセスの検証と承認をまとめた構成は次のようになります。
#config.yaml authentication: jwt: id: apigee_oauth audiences: ["developer-app1"] issuer: "SERVICE_ACCOUNT_EMAIL" remote_jwks: uri: "https://www.googleapis.com/service_accounts/v1/jwk/serviceaccount" cache_duration: 600s locations: - header: Authorization transformation: template: "Bearer {token}" substitution: "{token}" target: uri: https://mocktarget.apigee.net consumer_authorization: locations: - jwt_claim: requirement: apigee_oauth name: client_id
このプロキシ構成により、ターゲット エンドポイントに対するすべてのリクエストに次の内容が含まれることが確認されます。
- 次の条件を満たす JWT。
- 一致する
issuer
とaudiences
がある - JWKS URI のコンテンツによって検証される
Authorization
ヘッダーにある
- 一致する
- クライアント認証情報は、
apigee_oauth
と一致する JWT クレームclient_id
内にあります。
CORS を有効にする
このプロキシ構成の例では、CORS を有効にするルールを定義します。CORS(クロスオリジン リソース シェアリング)は、ウェブページで実行される JavaScript XMLHttpRequest(XHR)呼び出しがオリジン以外のドメインのリソースとやり取りできるようにする標準的なメカニズムです。CORS は、すべてのブラウザに組み込まれている同一オリジン ポリシーに対する一般的な解決策です。
次に例を示します。
#config.yaml basepath: "/helloworld" cors: allow_origins: - "*" allow_methods: - "GET" allow_headers: - "Accept" max_age: 600 allow_credentials: false operations: - id: help http_match: - path_template: "/help" method: GET - id: status http_match: - path_template: "/status/*" method: GET target: uri: https://mocktarget.apigee.net
ターゲット サーバーの使用
構成可能なプロキシモデルは、Apigee のターゲット サーバーのコンセプトをサポートしています。ターゲット サーバーを使用すると、実際のエンドポイントをターゲット エンドポイントから分離して、複数のバックエンド サーバー インスタンスにわたるロード バランシングとフェイルオーバーをサポートできます。アーカイブ デプロイでターゲット サーバーを使用するには、次の例のような config.yaml
ファイルと targetservers.json
ファイルを使用します。
#config.yaml
basepath: "/mock"
operations:
- id: user
http_match:
- path_template: "/user"
method: "GET"
target:
target_server_id: mocktarget
targetservers.json
ファイルは次のように設定します。
[
{
"name": "mocktarget",
"host": "mocktarget.apigee.net",
"port": 443,
"isEnabled" : true,
"sSLInfo": {
"enabled": true
}
}
]
オペレーションをターゲットにルーティングする
この構成プロキシモデルの例では、ユーザーは各オペレーションを異なるターゲット エンドポイントにルーティングできます。
次に例を示します。
#config.yaml basepath: "/mockhttpbin" operations: - id: user http_match: - path_template: "/user" method: "GET" target: target_server_id: mocktarget - id: ip http_match: - path_template: "/ip" method: "GET" target: uri: https://httpbin.org