Boundary
GCP dynamic host catalogs
Boundary uses dynamic host catalogs to automatically discover GCP Compute Engine VM instances and add them as hosts.
Create a host catalog to connect with GCP
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.
Authentication with service account
Create a service account in GCP and download the private key file. The service account should have the following roles:
roles/compute.viewer
(Required): To list Compute Engine VM instance in the project.roles/iam.serviceAccountKeyAdmin
(Optional): - To rotate the service account key ifdisable_credential_rotation
is set tofalse
.
Pass the following fields to Boundary for authentication:
$ 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
Authentication with service account impersonation
Service account impersonation allows Boundary to authenticate with GCP using a service account that impersonates another service account. Impersonation is useful when you want to restrict the permissions of the service account Boundary uses. Two service accounts are required:
Base service account
: The service account Boundary uses to authenticate with GCP. The service account should have the following roles:roles/iam.serviceAccountTokenCreator
(Required) - To create a token for the target service account.roles/iam.serviceAccountKeyAdmin
(Optional) - To rotate the service account key ifdisable_credential_rotation
is set tofalse
.
Target service account
: The service account to impersonate. The service account should have the following roles:roles/compute.viewer
(Required): To list Compute Engine VM instance in the project.
Pass the following fields to Boundary for authentication:
$ 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://BASE_SERVICE_ACCOUNT_EMAIL \
-attr target_service_account_id=env://TARGET_SERVICE_ACCOUNT_EMAIL \
-secret private_key_id=env://BASE_SERVICE_ACCOUNT_PRIVATE_KEY_ID \
-secret private_key=file://$BASE_SERVICE_ACCOUNT_PRIVATE_KEY_FILE_PATH
Authentication with Application Default Credentials (ADC)
If you run Boundary on a GCP VM instance, you can use Application Default Credentials (ADC) to authenticate with GCP. Boundary uses the service account associated with the VM instance to authenticate with GCP.
Pass the following fields to Boundary for authentication:
$ 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
and secret
flags are specific to GCP and are required by
Boundary for authentication.
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.disable_credential_rotation
(Optional): When set totrue
, Boundary does not rotate the credentials with GCP automatically.client_email
(Optional): Boundary uses this email address associated with the service account. The email address used to uniquely identify the service account.target_service_account_id
(Optional): Boundary uses this email address of the service account to impersonate.
This is used for authentication with service account impersonation.private_key_id
(Optional): The ID of the private key for the service account to use with this host catalog.private_key
(Optional): The private key for the service account to use with this host catalog.
Refer to the domain model documentation for additional fields that you can use when you create host catalogs.
Create a host set to connect with GCP
Host sets specify which GCP filters Boundary should use to identify which discovered hosts that should be added as members.
Create a host set using the following command:
$ boundary host-sets create plugin \
-host-catalog-id $BOUNDARY_HOST_CATALOG_ID \
-attr filters=labels.env=prod \
-attr filters=labels.app=web
The host-catalog-id
value is a required field that specifies in which host catalog to
create this host set.
Like with the host catalog, the fields passed in after the attr
flag are
specific to GCP.
The filters
field contains string filters in the format key=val1. The key corresponds to
a filter option. For a list of filter options, refer to the
GCP API documentation.
When you apply multiple filters, the plugin applies a logical AND
operation to combine the filters.
If there is no explicit instance status filter, the default status is set to status="RUNNING"
.
This ensures that Boundary only filters running instances, saving time when processing results.
We recommend using labels as filters because they are more flexible and can filter on multiple values as in the following examples:
For more fields that you can use when creating host sets, refer to the domain model documentation.