Vault
Setup guide - GCP Cloud KMS
To manage the lifecycle of the GCP Cloud KMS key rings, you need to setup the
key management secrets engine using gcpckms provider.
Setup
- Enable the key management secrets engine. - $ vault secrets enable keymgmt
- Configure the KMS provider resource named, - example-kms.- $ vault write keymgmt/kms/example-kms \ provider="gcpckms" \ key_collection="projects/<project-id>/locations/<location>/keyRings/<keyring>" \ credentials=service_account_file="/path/to/service_account/credentials.json"- The command specified the following: - The full path to this KMS provider instance in Vault
(keymgmt/kms/example-kms).
- The KMS provider type is set to gcpckms.
- A key collection, which refers to the resource ID of an existing GCP Cloud KMS key ring; this value cannot be changed after creation.
- Credentials file to use for authentication with GCP Cloud KMS. Supplying
values for this parameter is optional, as credentials may also be
specified as the GOOGLE_CREDENTIALSenvironment variable or default application credentials.
 
- The full path to this KMS provider instance in Vault
(
API documentation
Refer to the GCP Cloud KMS API documentation for a detailed description of individual configuration parameters.
Usage
- Write a new key of type aes256-gcm96 to the path - keymgmt/key/aes256-gcm96.- $ vault write keymgmt/key/aes256-gcm96 type="aes256-gcm96"
- Read the aes256-gcm96 key, use JSON as the output, and pipe that into - jq.- $ vault read -format=json keymgmt/key/aes256-gcm96 | jq- Example output: - { "request_id": "631f98de-b755-9863-40db-f789ff9ff10a", "lease_id": "", "lease_duration": 0, "renewable": false, "data": { "deletion_allowed": false, "latest_version": 1, "min_enabled_version": 1, "name": "aes256-gcm96", "type": "aes256-gcm96", "versions": { "1": { "creation_time": "2021-11-16T13:07:17.878864-05:00" } } }, "warnings": null }- Notice the value of - versions; it is 1 since this is the first version of the key that Vault knows about. This will figure into the example on key rotation later.
- To use the keys you wrote, you must distribute them to the Cloud KMS. Add the aes256-gcm96 key to the Cloud KMS at the path - keymgmt/kms/example-kms/key/aes256-gcm96.- $ vault write keymgmt/kms/example-kms/key/aes256-gcm96 \ purpose="encrypt,decrypt" \ protection="hsm"
- List the keys that have been distributed to the Cloud KMS instance. - $ vault list keymgmt/kms/gcpckms/key/ Keys ---- aes256-gcm96
- Rotate the key. - $ vault write -f keymgmt/key/aes256-gcm96/rotate
- Confirm successful key rotation by reading the key, and get the value of - .data.latest_version.- $ vault read -format=json keymgmt/key/aes256-gcm96 | jq '.data.latest_version' 2- The key is now at version 2; in the Cloud Console, the key will be expected to have a different version string than the original value under Primary version as shown in the Cloud Console UI screenshot.