2017-11-14 11:13:11 +00:00
|
|
|
---
|
|
|
|
layout: "docs"
|
|
|
|
page_title: "GCP Cloud KMS - Seals - Configuration"
|
2018-12-05 15:45:22 +00:00
|
|
|
sidebar_title: "GCP Cloud KMS"
|
2017-11-14 11:13:11 +00:00
|
|
|
sidebar_current: "docs-configuration-seal-gcpckms"
|
|
|
|
description: |-
|
|
|
|
The GCP Cloud KMS seal configures Vault to use GCP Cloud KMS as the seal wrapping
|
|
|
|
mechanism.
|
|
|
|
---
|
|
|
|
|
|
|
|
# `gcpckms` Seal
|
|
|
|
|
|
|
|
The GCP Cloud KMS seal configures Vault to use GCP Cloud KMS as the seal
|
2018-10-25 23:44:53 +00:00
|
|
|
wrapping mechanism. The GCP Cloud KMS seal is activated by one of the following:
|
2017-11-14 11:13:11 +00:00
|
|
|
|
|
|
|
* The presence of a `seal "gcpckms"` block in Vault's configuration file.
|
|
|
|
* The presence of the environment variable `VAULT_SEAL_TYPE` set to `gcpckms`.
|
|
|
|
If enabling via environment variable, all other required values specific to
|
|
|
|
Cloud KMS (i.e. `VAULT_GCPCKMS_SEAL_KEY_RING`, etc.) must be also supplied, as
|
|
|
|
well as all other GCP-related environment variables that lends to successful
|
|
|
|
authentication (i.e. `GOOGLE_PROJECT`, etc.).
|
|
|
|
|
2017-11-14 18:12:35 +00:00
|
|
|
## `gcpckms` Example
|
2017-11-14 11:13:11 +00:00
|
|
|
|
2017-11-14 18:12:35 +00:00
|
|
|
This example shows configuring GCP Cloud KMS seal through the Vault
|
|
|
|
configuration file by providing all the required values:
|
2017-11-14 11:13:11 +00:00
|
|
|
|
2017-11-14 18:12:35 +00:00
|
|
|
```hcl
|
|
|
|
seal "gcpckms" {
|
|
|
|
credentials = "/usr/vault/vault-project-user-creds.json"
|
|
|
|
project = "vault-project"
|
|
|
|
region = "global"
|
|
|
|
key_ring = "vault-keyring"
|
|
|
|
crypto_key = "vault-key"
|
|
|
|
}
|
2017-11-14 11:13:11 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
## `gcpckms` Parameters
|
|
|
|
|
|
|
|
These parameters apply to the `seal` stanza in the Vault configuration file:
|
|
|
|
|
2017-11-14 18:12:35 +00:00
|
|
|
- `credentials` `(string: <required>)`: The path to the credentials JSON file
|
2017-11-14 11:13:11 +00:00
|
|
|
to use. May be also specified by the `GOOGLE_CREDENTIALS` or
|
|
|
|
`GOOGLE_APPLICATION_CREDENTIALS` environment variable or set automatically if
|
2018-05-18 15:19:56 +00:00
|
|
|
running under Google App Engine, Google Compute Engine or Google Kubernetes
|
2017-11-14 11:13:11 +00:00
|
|
|
Engine.
|
2017-11-14 18:12:35 +00:00
|
|
|
|
|
|
|
- `project` `(string: <required>)`: The GCP project ID to use. May also be
|
2017-11-14 11:13:11 +00:00
|
|
|
specified by the `GOOGLE_PROJECT` environment variable.
|
2017-11-14 18:12:35 +00:00
|
|
|
|
|
|
|
- `region` `(string: "us-east-1")`: The GCP region/location where the key ring
|
2017-11-14 11:13:11 +00:00
|
|
|
lives. May also be specified by the `GOOGLE_REGION` environment variable.
|
2017-11-14 18:12:35 +00:00
|
|
|
|
|
|
|
- `key_ring` `(string: <required>)`: The GCP CKMS key ring to use. May also be
|
2017-11-14 11:13:11 +00:00
|
|
|
specified by the `VAULT_GCPCKMS_SEAL_KEY_RING` environment variable.
|
2017-11-14 18:12:35 +00:00
|
|
|
|
|
|
|
- `crypto_key` `(string: <required>)`: The GCP CKMS crypto key to use for
|
2017-11-14 11:13:11 +00:00
|
|
|
encryption and decryption. May also be specified by the
|
|
|
|
`VAULT_GCPCKMS_SEAL_CRYPTO_KEY` environment variable.
|
|
|
|
|
2019-01-04 21:29:31 +00:00
|
|
|
## Authentication & Permissions
|
2017-11-14 18:12:35 +00:00
|
|
|
|
2018-06-08 21:05:17 +00:00
|
|
|
Authentication-related values must be provided, either as environment
|
2017-11-14 18:12:35 +00:00
|
|
|
variables or as configuration parameters.
|
|
|
|
|
|
|
|
GCP authentication values:
|
|
|
|
|
|
|
|
* `GOOGLE_CREDENTIALS` or `GOOGLE_APPLICATION_CREDENTIALS`
|
|
|
|
* `GOOGLE_PROJECT`
|
|
|
|
* `GOOGLE_REGION`
|
2019-10-14 17:31:03 +00:00
|
|
|
|
2017-11-14 18:12:35 +00:00
|
|
|
|
|
|
|
Note: The client uses the official Google SDK and will use the specified
|
|
|
|
credentials, environment credentials, or [application default
|
|
|
|
credentials](https://developers.google.com/identity/protocols/application-default-credentials)
|
|
|
|
in that order, if the above GCP specific values are not provided.
|
|
|
|
|
2019-01-04 21:29:31 +00:00
|
|
|
The service account needs the following minimum permissions on the crypto key:
|
|
|
|
|
|
|
|
```text
|
|
|
|
cloudkms.cryptoKeyVersions.useToEncrypt
|
|
|
|
cloudkms.cryptoKeyVersions.useToDecrypt
|
2019-04-02 17:45:23 +00:00
|
|
|
cloudkms.cryptoKeys.get
|
2019-01-04 21:29:31 +00:00
|
|
|
```
|
|
|
|
|
2019-03-04 16:46:06 +00:00
|
|
|
These permissions can be described with the following role:
|
2019-01-04 21:29:31 +00:00
|
|
|
|
|
|
|
```text
|
|
|
|
roles/cloudkms.cryptoKeyEncrypterDecrypter
|
2019-04-02 17:45:23 +00:00
|
|
|
cloudkms.cryptoKeys.get
|
2019-01-04 21:29:31 +00:00
|
|
|
```
|
|
|
|
|
2019-04-02 17:45:23 +00:00
|
|
|
`cloudkms.cryptoKeys.get` permission is used for retrieving metadata information of keys from CloudKMS within this engine initialization process.
|
2019-01-04 21:29:31 +00:00
|
|
|
|
2017-11-14 11:13:11 +00:00
|
|
|
## `gcpckms` Environment Variables
|
|
|
|
|
|
|
|
Alternatively, the GCP Cloud KMS seal can be activated by providing the following
|
|
|
|
environment variables:
|
|
|
|
|
|
|
|
* `VAULT_SEAL_TYPE`
|
|
|
|
* `VAULT_GCPCKMS_SEAL_KEY_RING`
|
|
|
|
* `VAULT_GCPCKMS_SEAL_CRYPTO_KEY`
|
2019-10-14 17:31:03 +00:00
|
|
|
|
2018-04-25 13:59:06 +00:00
|
|
|
|
|
|
|
## Key Rotation
|
|
|
|
|
2019-01-04 21:29:31 +00:00
|
|
|
This seal supports rotating keys defined in Google Cloud KMS
|
|
|
|
[doc](https://cloud.google.com/kms/docs/rotating-keys). Both scheduled rotation and manual
|
|
|
|
rotation is supported for CKMS since the key information. Old keys version must not be
|
|
|
|
disabled or deleted and are used to decrypt older data. Any new or updated data will be
|
2018-06-08 21:07:59 +00:00
|
|
|
encrypted with the primary key version.
|
2019-10-14 17:31:03 +00:00
|
|
|
|
|
|
|
## Learn
|
|
|
|
|
|
|
|
Refer to the [Auto-unseal using GCP Cloud KMS](https://learn.hashicorp.com/vault/operations/autounseal-gcp-kms)
|
|
|
|
guide for a step-by-step tutorial.
|