API キーは Google Cloud に対してアプリケーションやウェブサイトを識別します。API キーの制限により、アプリとウェブサイトのみが鍵を使用できるようになります。セキュリティ上の理由から、以下を指定する制限を追加することをおすすめします。
クライアントが制限された API キーを使用して、API キーの制限を満たしていないリクエストを発行した場合、そのリクエストは失敗します。たとえば、API キーが特定のドメインから HTTP リクエストを発行する必要があるのに HTTP リクエストが別のドメインから受信された場合、そのリクエストはエラーで拒否されます。
CreateKey
メソッドを使用して API キーを作成するときに制限を追加できます。また、UpdateKey
メソッドを使用してキーの作成後に制限を追加することもできます。このページでは、API キーに追加できる制限と、それらの制限の追加方法について説明します。
始める前に
このページでは、oauth2l コマンドライン ツールで curl
を使用して、API キーの API にリクエストを送信します。API を試すための詳細については、API キーを使ってみるをご覧ください。
クライアントの制限の追加
クライアントの制限では、API キーを使用できるウェブサイト、IP アドレス、またはアプリを指定します。クライアントの制限は、API を呼び出すクライアントのタイプに基づいて追加します。次のタイプのクライアント制限のいずれかを指定できます。
browserKeyRestrictions
: キーの使用が許可されている HTTP リファラー(ウェブサイト)。serverKeyRestrictions
: 鍵の使用が許可されている発信者の IP アドレス。androidKeyRestrictions
: キーの使用が許可されている Android アプリ。iosKeyRestrictions
: 鍵の使用が許可されている iOS アプリ。
ブラウザの制限を追加する
次の例は、UpdateKey
メソッドを呼び出して、HTTP リファラーを www.example.com
に制限する方法を示します。
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys/KEY_ID?updateMask=restrictions \ --request PATCH \ --data '{ "restrictions" : { "browserKeyRestrictions": { "allowedReferrers": "www.example.com" } } "etag": "ETAG" }'
operations.get
からのレスポンスに "done": true
が含まれている場合、response
には制限のある最新の Key
が含まれます。
次の例は、特定の URL のリストから HTTP リクエストのみを許可する新しい API キーを作成する方法を示しています。
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "displayName" : "API key with browser restrictions", "restrictions" : { "browserKeyRestrictions": { "allowedReferrers": ["www.example.com", "www.example-2.com"] } } }'
次の表に、シナリオとブラウザの制限の例を示します。
事例 | 制限事項 |
---|---|
サイトのすべての URL を許可する | 「allowedReferrers」リストに 2 つの URL を設定する必要があります。
|
特定の URL を許可する | 正確なパスの URL を追加します。例:www.example.com/path www.example.com/path/path
|
1 つのサブドメインまたはネイキッド ドメイン内の任意の URL を許可する | ドメイン全体を許可するには、`allowedReferrers` リストに 2 つの URL を設定する必要があります。
|
サーバーの制限を追加する
呼び出し元の 1 つ以上の IP アドレス(ウェブサーバーや cron ジョブなど)を、API キーの使用を許可することができます。IP アドレスは、次のいずれかの形式で指定できます。
- IPv4(
198.51.100.1
) - IPv6(
2001:db8::1
) - CIDR 表記を使用するサブネット(
198.51.100.0/24
、2001:db8::/64
)
次の例は、allowedIps
のリストで API キーを作成する方法を示しています。
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "displayName" : "API key with server restrictions with IPv4, IPv6 and CIDR", "restrictions" : { "serverKeyRestrictions": { "allowedIps": ["198.51.100.1","198.51.100.0/24","2001:db8::1","2001:db8::/64"] } } }'
Android の制限の追加
API キーの使用を Android アプリのみに制限できます。API キーの作成時または更新時に、アプリごとにパッケージ名と 20 バイトの SHA-1 フィンガープリントを指定します。
たとえば、keytool
ユーティリティを実行し、次のフィンガープリントを作成したとします。
Certificate fingerprint: SHA1: DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09
次の例は、API キーを指紋とパッケージ名とともに androidKeyRestrictions
に追加する方法を示しています。
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "displayName" : "API key with Android restrictions", "restrictions" : { "androidKeyRestrictions": { "allowedApplications": [ { "sha1Fingerprint": "DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09", "packageName": "com.example.my.app" } ] } } }'
iOS での制限を追加する
キーの作成時または更新時に各アプリのバンドル ID を指定することで、API キーの使用を iOS アプリのみに制限できます。次の例は、API キーを作成するときに iosKeyRestrictions
を設定する方法を示しています。
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "displayName" : "API key with iOs restrictions", "restrictions" : { "iosKeyRestrictions": { "allowedBundleIds": ["com.example.my.app1", "com.example.my.app2"] } } }'
API 制限を追加する
API の制限を使用すると、API キーで呼び出す Google Cloud API を指定できます。すべての API キーにクライアントと API の制限を追加することをおすすめします。
API の制限では、1 つ以上のサービスを指定できます。次の例は、新しい API キーの使用を、translate.googleapis.com
と datastore.googleapis.com
のサービスのみに制限する方法を示しています。
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys \ --request POST \ --data '{ "restrictions": { "api_targets": [ { "service": "translate.googleapis.com" }, { "service" : "datastore.googleapis.com" } ] }, }'
Cloud プロジェクトで有効になっているサービスのリストを取得するには、gcloud services list
コマンドを使用します。
特定のサービスで使用する API キーを制限するだけでなく、各サービスのメソッドを指定して API キーをさらに制限することもできます。次の例は、以前の鍵を translate.googleapis.com
の許可されたメソッドのみに制限する方法を示しています。
gcurl https://apikeys.googleapis.com/v2/projects/PROJECT_NUMBER/locations/global/keys/KEY_ID?updateMask=restrictions \ --request PATCH \ --data '{ "restrictions": { "api_targets": [ { "service": "translate.googleapis.com" "methods": [ "Get*", "DetectLanguage" ] }, { "service" : "datastore.googleapis.com" } ] }, "etag": "ETAG" }'