このページの内容は Apigee と Apigee ハイブリッドに該当します。
Apigee Edge のドキュメントを表示する。
動画: API の保護の概要をご紹介しているこちらの短い動画をご覧ください。
学習内容
このチュートリアルでは、以下の手順を説明します。
- API キーを必要とする API プロキシを作成する。
- API プロダクト、デベロッパー、デベロッパー アプリを作成する。
- API キーを使用して API を呼び出す。
API を不正なアクセスから保護することが重要です。これを行う方法の一つに、API キーを使用する方法があります。
API キーを確認するように構成された API プロキシに対してアプリからリクエストを行うと、そのアプリは有効なキーの提供を求められます。ランタイム時に、Verify API Key ポリシーにより、提供された API キーについて、以下のことが確認されます。
- API キーが有効であること
- API キーが失効していないこと
- API キーが、リクエストされたリソースを公開する API プロダクトの API キーと一致していること
そのキーが有効な場合は、リクエストが許可されます。キーが無効な場合は、リクエストが承認エラーになります。
API プロキシを作成する
- Apigee UI にアクセスしてログインします。
- UI の左上にあるプルダウン メニューから組織を選択します。
-
[Develop] > [API Proxies] をクリックして、API プロキシのリストを表示します。
- [CREATE NEW] をクリックします。
- [Build a Proxy] ウィザードで、[Reverse proxy (most common)] を選択します。
- プロキシを次のように構成します。
フィールド 操作 Proxy Name helloworld_apikey
を入力します。Project Base Path /helloapikey
に変更します。[Project Base Path] は、API プロキシに対してリクエストを行うために使用される URL の一部です。
Description hello world protected by API key
を入力します。Target (Existing API) http://mocktarget.apigee.net
を入力します。これにより、API プロキシへのリクエストに応じて Apigee が呼び出すターゲット URL が定義されます。このターゲットは、
Hello, Guest!
という簡単なレスポンスを返すだけです。 - [Next] をクリックします。
- [Common policies] ページで、[API Key] を選択します。このオプションでは、API プロキシに 2 つのポリシーが自動的に追加され、API キーの生成に必要な API プロダクトが作成されます。
- [Next] をクリックします。
- [Summary] ページで、デプロイ環境が選択されていることを確認し、[Create and deploy] をクリックします。
- [Edit proxy] をクリックして、API プロキシの [Overview] ページを表示します。
ポリシーを表示する
- API プロキシ エディタで [Develop] タブをクリックします。API プロキシのリクエスト フローに次の 2 つのポリシーが追加されていることを確認します。
- Verify API Key - API 呼び出しを調べて、(クエリ パラメータとして送信される)有効な API キーが存在することを確認します。
- Remove Query Param apikey – 不必要に回覧されて外部にさらされないように、検査後の API キーを削除する Assign Message ポリシー。
-
フロービューの [Verify API Key] ポリシー アイコンをクリックし、下部のコードビューでポリシーの XML 構成を確認します。
<APIKey>
要素により、呼び出しの際に API キーを検索する場所がポリシーに指示されます。デフォルトでは、次のように HTTP リクエストでapikey
というクエリ パラメータとしてキーが検索されます。<APIKey ref="request.queryparam.apikey" />
apikey
という名前にする必要はありません。API キーを含む任意のプロパティを指定できます。
API 呼び出しの試行
このステップでは、ターゲット サービスに対して直接 API 呼び出しを行い、それが成功すること、次に API プロキシに対する呼び出しを行い、失敗することを確認し、ポリシーによりどのように保護されるかを確認できます。
-
成功
ウェブブラウザで、以下のアドレスにアクセスします。これは API プロキシでリクエスト転送先として構成されているターゲット サービスですが、ここでは直接呼び出しを行います。
http://mocktarget.apigee.net
次の正常なレスポンスが返されます。
Hello, Guest!
-
失敗
今度は API プロキシを呼び出してみます。
curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey
ここで、
YOUR ENV_GROUP_HOSTNAME
は環境グループのホスト名です。環境グループのホスト名を探すをご覧ください。Verify API Key ポリシーを使用しない場合、この呼び出しでは前の呼び出しと同じレスポンスが返されます。しかしこの場合は、次のエラー レスポンスが返されます。
{"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}
これは、有効な API キーが(クエリ パラメータとして)正しく渡されなかったことを意味します。
次のステップでは、必要な API キーを取得します。
API プロダクトの追加
Apigee UI を使用して API プロダクトを追加するには、次の手順を実施します。
- [Publish] > [API Products] を選択します。
- [+Create] をクリックします。
- [Product details] に、API プロダクトの詳細を入力します。
フィールド 説明 Name API プロダクトの内部名。名前には特殊文字を使用しないでください。
注: API プロダクトの作成後は、この名前を編集できません。表示名 API プロダクトの表示名。表示名は UI で使用され、いつでも編集できます。指定しない場合、[Name] の値が使用されます。このフィールドには [Name] の値が自動的に入力されます。入力された値を編集または削除できます。表示名には特殊文字を含めることができます。 Description API プロダクトの説明。 Environment API プロダクトでのアクセス許可の対象となる環境。たとえば、 test
やprod
です。Access [Public] を選択します。 Automatically approve access requests この API プロダクトに対する任意のアプリからのキーリクエストの自動承認を有効にします。 Quota このチュートリアルでは無視します。 Allowed OAuth Scopes このチュートリアルでは無視します。 - [Operations] セクションで、[+Add an Operation] をクリックします。
- [API Proxy] フィールドで、作成した API プロキシを選択します。
- [Path] フィールドに「/」と入力します。他のフィールドは無視します。
- [Save] をクリックして、オペレーションを保存します。
- [Save] をクリックして、API プロダクトを保存します。
デベロッパーとアプリを組織に追加する
次に、デベロッパーが API の使用登録を行うためのワークフローをシミュレートします。デベロッパーは API を呼び出す 1 つ以上のアプリを所有し、各アプリにはそれぞれ一意の API キーが割り当てられます。これにより、API プロバイダは API へのアクセスをより細かく制御したり、アプリによる API トラフィックに関するより詳細なレポートを作成したりできます。
デベロッパーを作成する
デベロッパーを作成するには、次の手順を実施します。
- メニューで [Publish] > [Developers] を選択します。
注: [Develop] 画面がまだ表示されている場合は、[DEVELOP] で "<" をクリックしてメニューを表示し、[Publish] > [Developers] を選択します。 - [+ Developer] をクリックします。
- [New Developer] ウィンドウに次の情報を入力します。
フィールド 入力 First Name Keyser
Last Name Soze
Username keyser
Email keyser@example.com
- [Create] をクリックします。
アプリを登録する
アプリを登録するには、次の手順を実施します。
- [Publish] > [Apps] を選択します。
- [+ App] をクリックします。
- [New Developer App] ウィンドウに次の情報を入力します。
フィールド 操作 Name と Display Name keyser_app
を入力します。Developer Keyser Soze (keyser@example.com)
を選択しますCallback URL と Notes 空白のまま - [Credentials] セクションで、[Never] を選択します。このアプリの認証情報に有効期限はありません。
- [Add Product] をクリックします。
- 作成したプロダクトを選択します。
- [Create] をクリックします。
API キーを取得する
API キーを取得するには、次の手順にを実施します。
- [Apps] ページ([Publish] > [Apps])で [keyser_app] をクリックします。
- [keyser_app] ページで、[Credentials] セクションの [Key] の横にある [Show] をクリックします。キーが、作成したプロダクトに関連付けられていることを確認します。
- キーを選択してコピーします。これを次のステップで使用します。
キーを使用して API を呼び出す
API キーを取得したら、それを使って API プロキシを呼び出すことができます。次のように、クエリ パラメータとして API キーを貼り付けます。クエリ パラメータに余分なスペースが含まれていないことを確認してください。
curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey?apikey=your_api_key
これで、API プロキシを呼び出すと、Hello,
Guest!
というレスポンスが返されます。
これで完了です。有効な API キーを呼び出しに含めるように要求することで、API プロキシが作成され、保護されました。
クエリ パラメータとして API キーを渡すことは通常はおすすめしません。代わりに HTTP ヘッダーで渡してください。
ベスト プラクティス: HTTP ヘッダーでキーを渡す
このステップでは、x-apikey
というヘッダーで API キーを検索するようにプロキシを修正します。
- API プロキシを編集します。[Develop] > [API Proxies] > [helloworld_apikey] の順に選択して、[Develop] ビューに移動します。
-
[Verify API Key] ポリシーを選択し、ポリシー XML を修正して、
queryparam
ではなくheader
内を検索するようにポリシーに指示します。<APIKey ref="request.header.x-apikey"/>
- API プロキシを保存し、[Deploy] を使用してデプロイします。
-
cURL を使用して以下の API 呼び出しを行い、API キーを
x-apikey
というヘッダーとして渡します。組織名を置き換えることを忘れないでください。curl -v -H "x-apikey: {api_key_goes_here}" http://YOUR_ENV_GROUP_HOSTNAME/helloapikey
完全に変更するには、クエリ パラメータではなくヘッダーを削除するよう Assign Message ポリシーを構成する必要があります。次に例を示します。
<Remove> <Headers> <Header name="x-apikey"/> </Headers> </Remove>