API キーは、 Google Cloudに対してアプリケーションまたはウェブサイトを識別します。API キーの制限により、お客様のアプリとウェブサイトのみがキーを使用できるようになります。セキュリティ上の理由から、次の指定を含む制限を追加することをおすすめします。
クライアントが制限付き API キーを使用して、API キーの制限を満たさないリクエストを発行すると、リクエストは失敗します。たとえば、API キーで特定のドメインから HTTP リクエストを発行する必要があるにもかかわらず、別のドメインから HTTP リクエストを受信した場合、リクエストはエラーで拒否されます。
制限は、CreateKey メソッドで API キーを作成するときに追加することも、UpdateKey メソッドを使用してキーの作成後に追加することもできます。このページでは、API キーに追加できる制限事項と、それらの制限事項を追加する方法について説明します。
始める前に
このページでは、curl と Google Cloud CLI を使用して API Keys 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 を許可する | allowedReferers リストに 2 つの URL を設定する必要があります。
|
| 特定の URL を許可する | 正確なパスの URL を追加してください。例:www.example.com/pathwww.example.com/path/path
|
| 1 つのサブドメインまたはネイキッド ドメイン内の任意の URL を許可する | ドメイン全体を許可するには、「allowedReferers」リストに 2 つの URL を設定する必要があります。
|
サーバーの制限を追加する
API キーの使用を許可する呼び出し元(ウェブサーバーや cron ジョブなど)の IP アドレスを 1 つ以上指定できます。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
次の例は、フィンガープリントとパッケージ名を使用して androidKeyRestrictions に API キーを作成する方法を示しています。
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 キーを使用した呼び出しを許可する API を指定できます。 Google Cloud すべての 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"
}
]
},
}'
Google 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"
}'