diff --git a/website/docs/provider_reference.html.markdown b/website/docs/provider_reference.html.markdown
index d91b749ebb9..e4aa229adf5 100644
--- a/website/docs/provider_reference.html.markdown
+++ b/website/docs/provider_reference.html.markdown
@@ -1,22 +1,18 @@
---
layout: "google"
-page_title: "google provider reference"
+page_title: "Google Provider Configuration Reference"
sidebar_current: "docs-google-provider-reference"
description: |-
- The Google provider is used to configure your GCP project, location, and creds
+ Configuration reference for the Google provider for Terraform.
---
# Google Provider Configuration Reference
-> Want more information about upgrading from `1.X` of the provider to `2.0.0`? Check out the [2.0.0 Upgrade Guide](https://terraform.io/docs/providers/google/version_2_upgrade.html).
-The `google` and `google-beta` provider blocks are used to configure default values for
-your GCP project and location (`zone` and `region`), and add your credentials.
-
--> You can avoid using a provider block by using environment variables. Every
-field of `google` and `google-beta` is inferred from your environment when it
-has not been explicitly set. Even better - the GA and beta providers will both
-share the same values.
+The `google` and `google-beta` provider blocks are used to configure the
+credentials you use to authenticate with GCP, as well as a default project and
+location (`zone` and/or `region`) for your resources.
## Example Usage - Basic provider blocks
@@ -40,9 +36,15 @@ provider "google-beta" {
## Example Usage - Using beta features with `google-beta`
-To use Google Cloud Platform features that are in beta, explicitly set the provider for your
-resource to `google-beta`. See [Provider Versions](https://terraform.io/docs/providers/google/provider_versions.html)
-for a full reference on how to use different GCP versions with the Google provider.
+To use Google Cloud Platform features that are in beta, you need to both:
+
+* Explicitly define a `google-beta` provider block
+
+* explicitly set the provider for your resource to `google-beta`.
+
+See [Provider Versions](https://terraform.io/docs/providers/google/provider_versions.html)
+for a full reference on how to use features from different GCP API versions in
+the Google provider.
```hcl
resource "google_compute_instance" "ga-instance" {
@@ -63,86 +65,135 @@ provider "google-beta" {}
## Configuration Reference
-The following keys can be used to configure the provider. Both `google` and `google-beta`
-share the same configuration.
+The following attributes can be used to configure the provider. The quick
+reference should be sufficient for most use cases, but see the full reference
+if you're interested in more details. Both `google` and `google-beta` share the
+same configuration.
+
+### Quick Reference
+
+* `credentials` - (Optional) Either the path to or the contents of a
+[service account key file] in JSON format. You can
+[manage key files using the Cloud Console].
+
+* `project` - (Optional) The default project to manage resources in. If another
+project is specified on a resource, it will take precedence.
-* `credentials` - (Optional) The path or contents of a file that contains your
- service account private key in JSON format. You can download your existing
- [Google Cloud service account file] from the Google Cloud Console, or you can
- create a new one from the same page.
+* `region` - (Optional) The default region to manage resources in. If another
+region is specified on a regional resource, it will take precedence.
- Credentials can also be specified using any of the following environment
- variables (listed in order of precedence):
+* `zone` - (Optional) The default zone to manage resources in. Generally, this
+zone should be within the default region you specified. If another zone is
+specified on a zonal resource, it will take precedence.
- * `GOOGLE_CREDENTIALS`
- * `GOOGLE_CLOUD_KEYFILE_JSON`
- * `GCLOUD_KEYFILE_JSON`
+---
- The [`GOOGLE_APPLICATION_CREDENTIALS`][adc]
- environment variable can also contain the path of a file to obtain credentials
- from.
+* `scopes` - (Optional) The list of OAuth 2.0 [scopes] requested when generating
+an access token using the service account key specified in `credentials`.
+
+* `access_token` - (Optional) A temporary [OAuth 2.0 access token] obtained from
+the Google Authorization server, i.e. the `Authorization: Bearer` token used to
+authenticate HTTP requests to GCP APIs. This is an alternative to `credentials`,
+and ignores the `scopes` field. If both are specified, `access_token` will be
+used over the `credentials` field.
+
+### Full Reference
+
+* `credentials` - (Optional) Either the path to or the contents of a
+[service account key file] in JSON format. You can
+[manage key files using the Cloud Console]. Your service account key file is
+used to complete a two-legged OAuth 2.0 flow to obtain access tokens to
+authenticate with the GCP API as needed; Terraform will use it to reauthenticate
+automatically when tokens expire. Alternatively, this can be specified using the
+`GOOGLE_CREDENTIALS` environment variable or any of the following ordered
+by precedence.
+
+ * GOOGLE_CREDENTIALS
+ * GOOGLE_CLOUD_KEYFILE_JSON
+ * GCLOUD_KEYFILE_JSON
+
+ Using Terraform-specific [service accounts] to authenticate with GCP is the
+ recommended practice when using Terraform. If no Terraform-specific
+ credentials are specified, the provider will fall back to using
+ [Google Application Default Credentials][adc]. To use them, you can enter
+ the path of your service account key file in the
+ `GOOGLE_APPLICATION_CREDENTIALS` environment variable, or configure
+ authentication through one of the following;
+
+* If you're running Terraform from a GCE instance, default credentials
+are automatically available. See
+[Creating and Enabling Service Accounts for Instances][gce-service-account]
+for more details.
+
+* On your computer, you can make your Google identity available by
+running [`gcloud auth application-default login`][gcloud adc]. This
+approach isn't recommended- some APIs are not compatible with
+credentials obtained through `gcloud`.
- If no credentials are specified, the provider will fall back to using the
- [Google Application Default Credentials][adc].
- If you are running Terraform from a GCE instance, see [Creating and Enabling
- Service Accounts for Instances][gce-service-account] for details.
+---
- On your computer, if you have made your identity available as the
- Application Default Credentials by running [`gcloud auth application-default
- login`][gcloud adc], the provider will use your identity.
+* `project` - (Optional) The default project to manage resources in. If another
+project is specified on a resource, it will take precedence. This can also be
+specified using the `GOOGLE_PROJECT` environment variable, or any of the
+following ordered by precedence.
- -> [Service accounts][service accounts] are the recommended way
- to manage GCP credentials. [GCE metadata] is also acceptable, although it can
- only be used when running Terraform from within [certain GCP resources](https://cloud.google.com/docs/authentication/production#obtaining_credentials_on_compute_engine_kubernetes_engine_app_engine_flexible_environment_and_cloud_functions).
- Credentials obtained through `gcloud` are not guaranteed to work for all APIs.
+ * GOOGLE_PROJECT
+ * GOOGLE_CLOUD_PROJECT
+ * GCLOUD_PROJECT
+ * CLOUDSDK_CORE_PROJECT
-* `access_token` - (Optional) An temporary [OAuth 2.0 access token](https://developers.google.com/identity/protocols/OAuth2)
- obtained from the Google Authorization server, i.e. the
- `Authorization: Bearer` token used to authenticate Google API HTTP requests.
+---
- Access tokens can also be specified using any of the following environment
- variables (listed in order of precedence):
+* `region` - (Optional) The default region to manage resources in. If another
+region is specified on a regional resource, it will take precedence.
+Alternatively, this can be specified using the `GOOGLE_REGION` environment
+variable or any of the following ordered by precedence.
- * `GOOGLE_OAUTH_ACCESS_TOKEN`
+ * GOOGLE_REGION
+ * GCLOUD_REGION
+ * CLOUDSDK_COMPUTE_REGION
- -> These access tokens cannot be renewed by Terraform and thus will only work for at most 1 hour. If you anticipate Terraform needing access for more than one hour per run, please use `credentials` instead. Credentials are used to complete a two-legged OAuth 2.0 flow on your behalf to obtain access tokens and can be used renew or reauthenticate for tokens as needed.
+---
-* `project` - (Optional) The ID of the project to apply any resources to. This
- can also be specified using any of the following environment variables (listed
- in order of precedence):
+* `zone` - (Optional) The default zone to manage resources in. Generally, this
+zone should be within the default region you specified. If another zone is
+specified on a zonal resource, it will take precedence. Alternatively, this can
+be specified using the `GOOGLE_ZONE` environment variable or any of the
+following ordered by precedence.
- * `GOOGLE_PROJECT`
- * `GOOGLE_CLOUD_PROJECT`
- * `GCLOUD_PROJECT`
- * `CLOUDSDK_CORE_PROJECT`
+ * GOOGLE_ZONE
+ * GCLOUD_ZONE
+ * CLOUDSDK_COMPUTE_ZONE
- -> `GOOGLE_PROJECT` is the recommended environment variable to use if
- you choose to add your project using environment variables.
+---
+
+* `access_token` - (Optional) A temporary [OAuth 2.0 access token] obtained from
+the Google Authorization server, i.e. the `Authorization: Bearer` token used to
+authenticate HTTP requests to GCP APIs. If both are specified, `access_token` will be
+used over the `credentials` field. This is an alternative to `credentials`,
+and ignores the `scopes` field. Alternatively, this can be specified using the
+`GOOGLE_OAUTH_ACCESS_TOKEN` environment variable.
-* `region` - (Optional) The region to operate under, if not specified by a given resource.
- This can also be specified using any of the following environment variables (listed in order of
- precedence):
+ -> These access tokens cannot be renewed by Terraform and thus will only
+ work until they expire. If you anticipate Terraform needing access for
+ longer than a token's lifetime (default `1 hour`), please use a service
+ account key with `credentials` instead.
- * `GOOGLE_REGION`
- * `GCLOUD_REGION`
- * `CLOUDSDK_COMPUTE_REGION`
+---
-* `zone` - (Optional) The zone to operate under, if not specified by a given resource.
- This can also be specified using any of the following environment variables (listed in order of
- precedence):
+* `scopes` - (Optional) The list of OAuth 2.0 [scopes] requested when generating
+an access token using the service account key specified in `credentials`.
- * `GOOGLE_ZONE`
- * `GCLOUD_ZONE`
- * `CLOUDSDK_COMPUTE_ZONE`
+ By default, the following scopes are configured:
-* `scopes` - (Optional) The list of OAuth 2.0 [scopes] used to generate access token for Google APIs.
- Default list of scopes:
* https://www.googleapis.com/auth/compute
* https://www.googleapis.com/auth/cloud-platform
* https://www.googleapis.com/auth/ndev.clouddns.readwrite
* https://www.googleapis.com/auth/devstorage.full_control
-[Google Cloud service account file]: https://console.cloud.google.com/apis/credentials/serviceaccountkey
+[OAuth 2.0 access token]: https://developers.google.com/identity/protocols/OAuth2
+[service account key file]: https://cloud.google.com/iam/docs/creating-managing-service-account-keys
+[manage key files using the Cloud Console]: https://console.cloud.google.com/apis/credentials/serviceaccountkey
[adc]: https://cloud.google.com/docs/authentication/production
[gce-service-account]: https://cloud.google.com/compute/docs/authentication
[gcloud adc]: https://cloud.google.com/sdk/gcloud/reference/auth/application-default/login