Skip to content

Commit 3aade83

Browse files
Tim Bannistertengqm
andcommitted
List available API encryption providers
Improve existing list of providers for API encryption at rest. Co-authored-by: Qiming Teng <[email protected]>
1 parent 55d5b54 commit 3aade83

File tree

1 file changed

+22
-16
lines changed

1 file changed

+22
-16
lines changed

content/en/docs/tasks/administer-cluster/encrypt-data.md

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,12 @@ the only recourse is to delete that key from the underlying etcd directly. Calls
173173
read that resource will fail until it is deleted or a valid decryption key is provided.
174174
{{< /caution >}}
175175

176-
### Providers
176+
### Available providers {#providers}
177177

178-
The following table describes each available provider:
178+
Before you configure encryption-at-rest for data in your cluster's Kubernetes API, you
179+
need to select which provider(s) you will use.
180+
181+
The following table describes each available provider.
179182

180183
<!-- localization note: if it makes sense to adapt this table to work for your localization,
181184
please do that. Each sentence in the English original should have a direct equivalent in the adapted
@@ -281,29 +284,32 @@ The following table describes each available provider:
281284
</tbody>
282285
</table>
283286

284-
Each provider supports multiple keys - the keys are tried in order for decryption, and if the provider
285-
is the first provider, the first key is used for encryption.
287+
The `identity` provider is the default if you do not specify otherwise. **The `identity` provider does not
288+
encrypt stored data and provides _no_ additional confidentiality protection.**
286289

290+
### Key storage
287291

288-
{{< caution >}}
289-
Storing the raw encryption key in the EncryptionConfig only moderately improves your security
290-
posture, compared to no encryption. Please use `kms` provider for additional security.
291-
{{< /caution >}}
292-
293-
By default, the `identity` provider is used to protect secret data in etcd, which provides no
294-
encryption. `EncryptionConfiguration` was introduced to encrypt secret data locally, with a locally
295-
managed key.
292+
#### Local key storage
296293

297294
Encrypting secret data with a locally managed key protects against an etcd compromise, but it fails to
298295
protect against a host compromise. Since the encryption keys are stored on the host in the
299296
EncryptionConfiguration YAML file, a skilled attacker can access that file and extract the encryption
300297
keys.
301298

302-
Envelope encryption creates dependence on a separate key, not stored in Kubernetes. In this case,
303-
an attacker would need to compromise etcd, the `kubeapi-server`, and the third-party KMS provider to
304-
retrieve the plaintext values, providing a higher level of security than locally stored encryption keys.
299+
#### Managed (KMS) key storage {#kms-key-storage}
300+
301+
The KMS provider uses _envelope encryption_: Kubernetes encrypts resources using a data key, and then
302+
encrypts that data key using the managed encryption service. Kubernetes generates a unique data key for
303+
each resource. The API server stores an encrypted version of the data key in etcd alongside the ciphertext;
304+
when reading the resource, the API server calls the managed encryption service and provides both the
305+
ciphertext and the (encrypted) data key.
306+
Within the managed encryption service, the provider use a _key encryption key_ to decipher the data key,
307+
deciphers the data key, and finally recovers the plain text. Communication between the control plane
308+
and the KMS requires in-transit protection, such as TLS.
305309

306-
## Encrypting your data
310+
Using envelope encryption creates dependence on the key encryption key, which is not stored in Kubernetes.
311+
In the KMS case, an attacker who intends to get unauthorised access to the plaintext
312+
values would need to compromise etcd **and** the third-party KMS provider.
307313

308314
## Write an encryption configuration file
309315

0 commit comments

Comments
 (0)