このページの内容は Apigee と Apigee ハイブリッドに該当します。
Apigee Edge のドキュメントを表示する。
API キーを取得する方法
以下の例では、API 呼び出しの検証に使用できる、API キーを取得する方法を示します。ここでは、Apigee Adapter for Envoy でプロキシされたターゲット サービスに対する API 呼び出しを対象としています。
1. Apigee にログインする
- ブラウザで Apigee UI を開きます。
- UI が表示されたら、Apigee Adapter for Envoy の構成に使用した組織と同じ組織を選択します。
2. デベロッパーを作成する
デベロッパーは、既存のものをテスト用に使用するか、次のように操作して新しく作成できます。
- サイド ナビゲーション メニューで、[Publish] > [Developers] を選択します。
- [+ Developer] をクリックします。
- ダイアログに入力して、新しいデベロッパーを作成します。任意のデベロッパー名 / メールを使用できます。
3. API プロダクトを作成する
以下のプロダクト作成例に沿って操作します。API プロダクトとはもご覧ください。
- サイド ナビゲーション メニューで、[Publish] > [API Products] を選択します。
- [+API Product] をクリックします。
- [Product details] ページに、次のように入力します。指示があるまで [Save] はクリックしないでください。
- [Apigee remote service targets] セクションで、[Add an Apigee remote service target] をクリックします。
- [Apigee remote service target] ダイアログで、次の値を追加します。
属性 値 説明 Target name ターゲット サービスの名前を入力します。例: httpbin.org
Envoy プロキシによって前面に配置されているターゲット エンドポイント。 API proxy remote-service
Envoy Adapter のインストール中に Apigee にプロビジョニングされた remote-service
プロキシ。Path 特定のパスに一致する /resource_path
を入力します。例:/httpbin
ターゲット エンドポイントで一致するリクエストパス。このパスへの API プロキシ呼び出しは、この API プロダクトと一致します。 - [Save] をクリックします。
フィールド | 値 |
---|---|
Name | httpbin-product
|
Display Name | httpbin product
|
Environment | your_environment
|
Access | Private
|
Quota | 5 requests every 1 minute API のプロダクト構成についてもご覧ください。 |
4. デベロッパー アプリを作成する
- サイド ナビゲーション メニューで、[Publish] > [Apps] を選択します。
- [+ App] をクリックします。
- [Developer App] ページに、次のように入力します。指示があるまで、保存しないでください。
- 次に、アプリに 2 つのプロダクトを追加します。
- まず、[Credentials] セクションで [+ Add product] をクリックし、構成したばかりのプロダクト(httpbin-product)を選択します。
- 次に、remote-service プロダクトを追加します。このプロダクトは、Apigee をプロビジョニングしたときに自動的に作成されたものです。
- [Create] をクリックします。
- [Credentials] で、[Key] の横にある [Show] をクリックします。
- コンシューマ キーの値をコピーします。この値は、
httpbin
サービスに対して API 呼び出しを行うために使用する API キーです。
Name | httpbin-app
|
Display Name | httpbin app
|
Developer | 以前に作成したデベロッパーを選択するか、使用したいデベロッパーをリストから選択します。 |
API プロダクトについて
API プロダクトは、Apigee Remote Service の主要なコントロール ポイントです。API プロダクトを作成してターゲット サービスにバインドするときに、Apigee Adapter for Envoy を構成して処理するすべてのリクエストに適用されるポリシーを作成します。
API プロダクトの定義
Apigee で API プロダクトを定義する際には、リクエストの評価に使用されるパラメータの数を設定できます。
- ターゲット
- リクエストパス
- 割り当て
- OAuth スコープ
リモート サービス ターゲット
API プロダクト定義は、リクエストがターゲット バインディング(httpbin.org
など)とリクエストパス(/httpbin
など)の両方に一致する場合に、そのリクエストに適用されます。可能性のあるターゲットのリストは、API プロダクト上の属性として保存されます。
デフォルトでは、Apigee Remote Service により、Envoy の特別な :authority (host)
ヘッダーがターゲットのリストと照合されます。ただし、他のヘッダーを使用するように構成することもできます。
API リソースパス
入力されたパスの一致は次のルールに基づいて判断されます。
- シングル スラッシュ(
/
)は、それだけですべてのパスに一致します。 *
はセグメント(スラッシュとスラッシュの間)内のどの位置にも使うことができ、任意の文字列に一致します。**
は末尾に使うことができ、行末までのすべての文字列に一致します。
割り当て
割り当ては、アプリで 1 時間、1 日、1 週間、または 1 か月に API に送信できるリクエスト メッセージの数を指定します。アプリで割り当ての上限に達すると、後続の API 呼び出しは拒否されます。
割り当ての使用例割り当てを使用すると、クライアントがサービスに対して一定の期間内に行えるリクエストの数を強制できます。割り当ては、運用上のトラフィック管理ではなく、デベロッパーやパートナーとの業務契約または SLA を適用するためによく使用されます。たとえば、無料サービスに対してはトラフィックを制限する一方で、有料ユーザーに対しては完全アクセス権を付与する場合などです。
割り当ては API プロダクトで定義される割り当てパラメータは、API プロダクトで構成されます。たとえば、API プロダクトを作成するときに、必要に応じて、割り当て上限、時間単位、間隔を設定できます。
API キーは API プロダクトにマッピングされるため、API キーが検証されるたびに、該当する割り当てカウンタが減少します(割り当てが関連プロダクトで定義されている場合)。
Apigee ランタイム内とは異なり、プロダクト定義に入力された割り当ては、Apigee Remote Service によって自動的に適用されます。リクエストが承認された場合、そのリクエストは許可された割り当てに対してカウントされます。
割り当てが保持される場所割り当ては、Remote Service プロセスによってローカルで維持されて確認され、Apigee ランタイムで非同期的に維持されます。つまり、割り当てを維持する Remote Service が複数ある場合、割り当てが正確にならず、超過する場合があります。Apigee ランタイムへの接続が中断された場合、ローカルの割り当ては、Apigee ランタイムに再接続できるまでの間など、スタンドアロンの割り当てとして継続されます。
OAuth スコープ
JWT トークンを使用している場合は、許可された OAuth スコープのサブセットにトークンを制限できます。発行済み JWT トークンに割り当てられたスコープは、API プロダクトのスコープに対して確認されます。
デベロッパー アプリについて
API プロダクトの構成が完了したら、デベロッパーに関連付けられるアプリを作成します。このアプリを使用すると、クライアントは API キーまたは JWT トークンを使用して、関連付けられた API プロダクトにアクセスできます。
JWT ベースの認証の使用
API キーではなく、JWT トークンを使用して、認証済みの API プロキシ呼び出しを行えます。このセクションでは、apigee-remote-service-cli token
コマンドを使用して JWT トークンの作成、検査、ローテーションを行う方法について説明します。Apigee ハイブリッド環境では、このコマンドを使用して、JWT を保持する Kubernetes Secret を作成できます。
概要
JWT の検証と認証は、JWT 認証フィルタを使用して Envoy によって処理されます。
認証されると、Envoy の ext-authz
フィルタでリクエスト ヘッダーと JWT が apigee-remote-service-envoy
に送信されます。これは、JWT の api_product_list
クレームと scope
クレームを Apigee API プロダクトと照合し、リクエストのターゲットに対して JWT を認可します。
Apigee JWT トークンの作成
Apigee JWT トークンは CLI を使用して作成されます。
apigee-remote-service-cli token create -c config.yaml --id $KEY --secret $SECRET
または、標準の OAuth トークン エンドポイントを使用して作成されます。curl の例を次に示します。
curl https://org-env.apigee.net/remote-service/token -d '{"client_id":"myclientid","client_secret":"myclientsecret","grant_type":"client_credentials"}' -H "Content-type: application/json"
JWT トークンの使用
トークンを作成したら、そのトークンを単純に Authorization ヘッダーで Envoy へ渡します。例:
curl localhost:8080/httpbin/headers -i -H "Authorization:Bearer $TOKEN"
JWT トークンの障害
Envoy の拒否
Envoy によってトークンが拒否されると、次のようなメッセージが表示されます。
Jwks remote fetch is failed
その場合、Envoy の構成で remote_jwks
セクションに有効な URI が含まれていること、Envoy から到達可能であること、Apigee プロキシのインストール時に証明書を適切に設定していることを確認してください。GET 呼び出しで URI を直接呼び出し、有効な JSON レスポンスを受信できるはずです。
例:
curl https://myorg-eval-test.apigee.net/remote-service/certs
Envoy からのその他のメッセージには、次のようなものがあります。
- 「Jwt のオーディエンスは許可されていません」
- 「Jwt 発行元が構成されていません」
これらは Envoy 構成の要件によるものです。このような構成は変更する必要があるかもしれません。
トークンを検査する
トークンは、CLI を使用して検査できます。例
apigee-remote-service-cli -c config.yaml token inspect -f path/to/file
あるいは
apigee-remote-service-cli -c config.yaml token inspect <<< $TOKEN
デバッグ
有効な API キーが失敗するをご覧ください。ロギング
ロギングレベルは、$REMOTE_SERVICE_HOME/apigee-remote-service-envoy サービスで調整できます。すべてのロギングは stderr に送信されます。
要素 | 必須 | 説明 |
---|---|---|
-l、--log-level | 有効なレベル: debug、info、warning、error | ロギングレベルを調整します。デフォルトは、info です。 |
-j、--json-log | ロギング出力を JSON レコードとして送信します。 |
Envoy はロギングを提供します。詳細については、次の Envoy のドキュメントのリンクをご覧ください。
ポリシーのシークレット名の変更
クラスタにデプロイされた Kubernetes Secret には、アダプタがリモート サービス プロキシとの通信を認証するために必要な認証情報が含まれています。この Secret には、構成可能なボリュームのマウント ポイントが必要です。デフォルトのマウント ポイントは /policy-secret
です。マウント ポイントを変更するには、次の手順を行います。
- 次のコマンドを実行します。
$REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/new-mount_point_name
次に例を示します。
$REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/my-mount-point
- エディタで
$CLI_HOME/samples/apigee-envoy-adapter.yaml
を開きます。 - マウント ポイント名を新しい名前に変更します。
volumeMounts: - mountPath: /config name: apigee-remote-service-envoy readOnly: true - mountPath: /opt/apigee/tls name: tls-volume readOnly: true - mountPath: /my-mount-point name: policy-secret readOnly: true
- ファイルを保存し、サービス メッシュに適用します。
kubectl apply -f $REMOTE_SERVICE_HOME/samples/apigee-envoy-adapter.yaml
ネットワーク プロキシの使用
apigee-remote-service-envoy バイナリの環境では、HTTP_PROXY 環境変数と HTTPS_PROXY 環境変数を使用することで、HTTP プロキシの挿入が可能です。これらを使用する場合は、NO_PROXY 環境変数を使用して、プロキシ経由での送信から特定のホストを除外することもできます。
HTTP_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port] HTTPS_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port] NO_PROXY=127.0.0.1,localhost
このプロキシは apigee-remote-service-envoy から到達可能である必要があります。
指標と分析について
Prometheus 指標エンドポイントは、:5001/metrics
で入手できます。このポート番号は構成可能です。構成ファイルをご覧ください。
Envoy 分析
次のリンクでは、Envoy プロキシ分析データの取得に関する情報を提供しています。
Istio 分析
次のリンクでは、Envoy プロキシ分析データの取得に関する情報を提供しています。
Apigee Analytics
Apigee Remote Service for Envoy は、分析の処理のためにリクエスト統計を Apigee に送信します。これらのリクエストは、Apigee によって関連する API プロダクト名で報告されます。
Apigee Analytics の詳細については、Analytics サービスの概要をご覧ください。