Description
API Keys should only be used for services in cases where other authentication methods are unavailable. API keys are always at risk because they can be viewed publicly, such as from within a browser, or they can be accessed on a device where the key resides. It is recommended to restrict API keys to use (call) only APIs required by an application.
Rationaleβ
Security risks involved in using API-Keys are below:
β’ API keys are simple encrypted strings
β’ API keys do not identify the user or the application making the API request
β’ API keys are typically accessible to clients, making it easy to discover and steal an API key
In light of these potential risks, Google recommends using the standard authentication flow instead of API-Keys. However, there are limited cases where API keys are more appropriate. For example, if there is a mobile application that needs to use the Google Cloud Translation API, but doesn't otherwise need a backend server, API keys are the simplest way to authenticate to that API.
In order to reduce attack surfaces by providing least privileges
, API-Keys can be restricted to use (call) only APIs required by an application.
Impactβ
Setting API restrictions
may break existing application functioning, if not done carefully.
Auditβ
From Consoleβ
- Go to
APIs & Services\Credentials
using https://console.cloud.google.com/apis/credentials - In the section
API Keys
, Click theAPI Key Name
. The API Key properties display on a new page. - For every API Key, ensure the section
Key restrictions
parameterAPI restrictions
is not set toNone
.
Or,
Ensure API restrictions
is not set to Google Cloud APIs
Note: Google Cloud APIs
represents the API collection of all cloud services/APIs offered by Google cloud.
From Google Cloud CLIβ
-
List all API Keys.
gcloud services api-keys list
Each key should have a line that says restrictions:
followed by varying parameters and NOT have a line saying - service: cloudapis.googleapis.com
as shown here
restrictions:
apiTargets:
- service: cloudapis.googleapis.com
Default Valueβ
By default, API restrictions
are set to None
.
Referencesβ
Additional Informationβ
Some of the gcloud commands listed are currently in alpha and might change without notice.