Use dynamic host catalogs to automatically discover GCP Compute Engine VM instances and add them as hosts. Create a host catalog and host set for GCP resources.
Boundary uses plugins to integrate with a variety of providers.
To use a dynamic host catalog to integrate with GCP, you create a host catalog of the `plugin` type and set the `plugin-name` value to `gcp`.
You must also provide the specific fields needed for Boundary to authenticate with GCP.
The required fields depend on whether you authenticate using the service account, service impersonation, or the GCP Application Default Credentials (ADC).
Complete the following steps to create a dynamic host catalog for GCP:
<Tabs>
<Tab heading="UI" group="ui">
1. Log in to Boundary.
1. Select the org, and then select the project you want to create a host catalog for.
1. Select **Host Catalogs**.
1. Select **New Host Catalog**.
1. Complete the following fields:
- **Name**: (Optional) An optional description of the host catalog for identification purposes.
If you enter a name, it must be unique.
- **Description**: (Optional) An optional description of the host catalog for identification purposes.
- **Type**: (Required) Select **Dynamic** to create a dynamic host catalog.
- **Provider**: (Required) Select **GCP** to create a dynamic host catalog for your GCP resources.
The required fields for creating a dynamic host catalog depend on the type of authentication you configure.
<Tabs>
<Tab heading="Service account" group="account">
- **Project ID**: (Required) The project ID of any instances that you want to add to the host catalog.
- **Zone**: (Required) The GCP zone of the instances that you want to add to the host catalog.
- **Client Email**: The unique email address that is used to identify the service account.
It is required when you authenticate using the service account.
- **Target Service Account ID**: Skip this field when you configure authentication using the service account.
It is only used when you authenticate using service account impersonation.
- **Private Key ID**: The unique identifier of the private key.
It is required when you authenticate using the service account.
- **Private Key**: The private key used to obtain an OAuth 2.0 access token.
The key must be PEM encoded.
It is required when you authenticate using the service account.
If you downloaded the private key from GCP, it may contain extra `/n` characters that cause an error.
You can use `jq` to remove the extra `/n` characters.
- **Project ID**: (Required) The project ID of any instances that you want to add to the host catalog.
- **Zone**: (Required) The GCP zone of the instances that you want to add to the host catalog.
- **Client Email**: (Optional) The unique email address that is used to identify the base service account.
- **Target Service Account ID**: Skip this field when you configure authentication using the ADC.
It is only used when you authenticate using service account impersonation.
- **Private Key ID**: (Optional) The unique identifier of the private key for the base service account.
- **Private Key**: (Optional) The private key used to obtain an OAuth 2.0 access token.
The key must be PEM encoded.
If you downloaded the private key from GCP, it may contain extra `/n` characters that cause an error.
You can use `jq` to remove the extra `/n` characters.
</Tab>
</Tabs>
- **Worker Filter**: (Optional) An optional filter to route requests to a designated worker.
- **Disable credential rotation**: (Optional) When enabled, Boundary does not rotate the credentials with GCP automatically.
1. Select **Save**.
</Tab>
<Tab heading="CLI" group="cli">
The required fields for creating a dynamic host catalog depend on the type of authentication you configure.
<Tabs>
<Tab heading="Service account" group="account">
1. Log in to Boundary.
1. Use the following command to create a dynamic host catalog for GCP:
```shell-session
$ boundary host-catalogs create plugin \
-scope-id $BOUNDARY_PROJECT_ID \
-plugin-name gcp \
-attr disable_credential_rotation=true \
-attr zone=us-central1-a \
-attr project_id=env://GCP_PROJECT_ID \
-attr client_email=env://CLIENT_EMAIL \
-secret private_key_id=env://PRIVATE_KEY_ID \
-secret private_key=file://$PRIVATE_KEY_FILE_PATH
```
The `scope-id` and `plugin-name` fields are required when you create a dynamic host catalog.
The fields following the `attr` and `secret` flags are specific to GCP and are used by Boundary for authentication:
- `disable_credential_rotation`: (Optional) When set to `true`, Boundary does not rotate the credentials automatically.
- `zone`: (Required) The GCP zone of the instances that you want to add to the host catalog.
- `project_id`: (Required) The project ID of any instances that you want to add to the host catalog.
- `client_email`: The unique email address that is used to identify the service account.
It is required when you authenticate using the service account.
- `private_key_id`: The unique identifier of the private key.
It is required when you authenticate using the service account.
- `private_key`: The private key used to obtain an OAuth 2.0 access token.
The key must be PEM encoded.
It is required when you authenticate using the service account.
If you downloaded the private key from GCP, it may contain extra `/n` characters that cause an error.
You can use `jq` to remove the extra `/n` characters.
Refer to [the domain model documentation](/boundary/docs/concepts/domain-model/host-catalogs) for additional fields that you can use when you create host catalogs.
The `scope-id` and `plugin-name` fields are required when you create a dynamic host catalog.
The fields following the `attr` and `secret` flags are specific to GCP and are required by Boundary for authentication:
- `disable_credential_rotation`: (Optional) When set to `true`, Boundary does not rotate the credentials with GCP automatically.
- `zone`: (Required) The deployment area within a region.
All host sets in this catalog are configured for this zone.
- `project_id`: (Required) The project ID associated with the service account.
- `client_email`: The email address used to uniquely identify the base service account.
It is required when you authenticate using service account impersonation.
- `target_service_account_id`: The email address of the service account to impersonate.
It is required when you authenticate using service account impersonation.
- `private_key_id`: The ID of the private key for the base service account to use with this host catalog.
It is required when you authenticate using service account impersonation.
- `private_key`: The private key for the base service account to use with this host catalog.
It is required when you authenticate using service account impersonation.
If you downloaded the private key from GCP, it may contain extra `/n` characters that cause an error.
You can use `jq` to remove the extra `/n` characters.
Refer to [the domain model documentation](/boundary/docs/concepts/domain-model/host-catalogs) for additional fields that you can use when you create host catalogs.
1. Use the following command to create a dynamic host catalog for GCP:
```shell-session
$ boundary host-catalogs create plugin \
-scope-id $BOUNDARY_PROJECT_ID \
-plugin-name gcp \
-attr disable_credential_rotation=true \
-attr zone=us-central1-a \
-attr project_id=env://GCP_PROJECT_ID
```
The `scope-id` and `plugin-name` fields are required when you create a dynamic host catalog.
The fields following the `attr` flag are specific to GCP and are required by Boundary for authentication:
- `disable_credential_rotation`: (Optional) When set to `true`, Boundary does not rotate the credentials with GCP automatically.
- `zone`: (Required) The deployment area within a region.
All host sets in this catalog are configured for this zone.
- `project_id`: (Required) The project ID associated with the service account.
Refer to [the domain model documentation](/boundary/docs/concepts/domain-model/host-catalogs) for additional fields that you can use when you create host catalogs.
The required fields for creating a dynamic host catalog depend on the type of authentication you configure.
<Tabs>
<Tab heading="Service account" group="account">
Refer to the [Boundary Terraform provider documentation](https://registry.terraform.io/providers/hashicorp/boundary/latest/docs) to learn about the requirements for the following example attributes.
Refer to [the domain model documentation](/boundary/docs/concepts/domain-model/host-catalogs) for additional fields that you can use when you create host catalogs.
Refer to the [Boundary Terraform provider documentation](https://registry.terraform.io/providers/hashicorp/boundary/latest/docs) to learn about the requirements for the following example attributes.
Refer to [the domain model documentation](/boundary/docs/concepts/domain-model/host-catalogs) for additional fields that you can use when you create host catalogs.
Refer to the [Boundary Terraform provider documentation](https://registry.terraform.io/providers/hashicorp/boundary/latest/docs) to learn about the requirements for the following example attributes.
Refer to [the domain model documentation](/boundary/docs/concepts/domain-model/host-catalogs) for additional fields that you can use when you create host catalogs.
[Host sets](/boundary/docs/concepts/domain-model/host-sets) specify which GCP filters Boundary should use to identify which discovered hosts that should be added as members.
Complete the following steps to create a host set:
Refer to the [Boundary Terraform provider documentation](https://registry.terraform.io/providers/hashicorp/boundary/latest/docs) to learn about the requirements for the following example attributes.