From 226128ff8bef2283b8fcb2116af82609c96470d4 Mon Sep 17 00:00:00 2001 From: windsonsea Date: Tue, 19 Sep 2023 10:08:15 +0800 Subject: [PATCH] [zh] Sync encrypt-data.md --- .../tasks/administer-cluster/encrypt-data.md | 140 +++++++++++------- 1 file changed, 89 insertions(+), 51 deletions(-) diff --git a/content/zh-cn/docs/tasks/administer-cluster/encrypt-data.md b/content/zh-cn/docs/tasks/administer-cluster/encrypt-data.md index a85b9af428..a331ecafc9 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/encrypt-data.md +++ b/content/zh-cn/docs/tasks/administer-cluster/encrypt-data.md @@ -179,15 +179,17 @@ resources: 每个 `resources` 数组项目是一个单独的完整的配置。 `resources.resources` 字段是应加密的 Kubernetes 资源(例如 Secret、ConfigMap 或其他资源)名称 @@ -198,7 +200,9 @@ The `providers` array is an ordered list of the possible encryption providers to 在该版本之前存在于 etcd 中的任何自定义资源和配置不会被加密,直到它们被下一次写入到存储为止。 这与内置资源的行为相同。请参阅[确保所有 Secret 都已加密](#ensure-all-secrets-are-encrypted)一节。 -`providers` 数组是可能的加密 provider 的有序列表,用于你所列出的 API。 +`providers` 数组是可能的加密提供程序的有序列表,用于你所列出的 API。 +每个提供程序支持多个密钥 - 解密时会按顺序尝试这些密钥, +如果这是第一个提供程序,其第一个密钥将被用于加密。 -每个条目只能指定一个 provider 类型(可以是 `identity` 或 `aescbc`,但不能在同一个项目中同时指定二者)。 -列表中的第一个 provider 用于加密写入存储的资源。 -当从存储器读取资源时,与存储的数据匹配的所有 provider 将按顺序尝试解密数据。 -如果由于格式或密钥不匹配而导致没有 provider 能够读取存储的数据,则会返回一个错误,以防止客户端访问该资源。 +每个条目只能指定一个提供程序类型(可以是 `identity` 或 `aescbc`,但不能在同一个项目中同时指定二者)。 +列表中的第一个提供程序用于加密写入存储的资源。 +当从存储器读取资源时,与存储的数据匹配的所有提供程序将按顺序尝试解密数据。 +如果由于格式或密钥不匹配而导致没有提供程序能够读取存储的数据,则会返回一个错误,以防止客户端访问该资源。 -下表描述了每个可用的 Provider: +### 可用的提供程序 {#providers} + +在为集群的 Kubernetes API 数据配置静态加密之前,你需要选择要使用的提供程序。 + +下表描述了每个可用的提供程序: @@ -313,7 +324,7 @@ Kubernetes 静态数据加密的 Provider Resources written as-is without encryption. When set as the first provider, the resource will be decrypted as new values are written. Existing encrypted resources are not automatically overwritten with the plaintext data. The identity provider is the default if you do not specify otherwise. --> - 不加密写入的资源。当设置为第一个 provider 时,已加密的资源将在新值写入时被解密。 + 不加密写入的资源。当设置为第一个提供程序时,已加密的资源将在新值写入时被解密。 @@ -391,7 +402,7 @@ Kubernetes 静态数据加密的 Provider - 阅读如何配置 KMS V1 Provider + 阅读如何配置 KMS V1 提供程序 @@ -434,7 +445,7 @@ Kubernetes 静态数据加密的 Provider - 阅读如何配置 KMS V2 Provider。 + 阅读如何配置 KMS V2 提供程序。 @@ -456,53 +467,78 @@ Kubernetes 静态数据加密的 Provider
-Kubernetes 静态数据加密的 Provider +Kubernetes 静态数据加密的提供程序
-每个 Provider 都支持多个密钥 - 在解密时会按顺序使用密钥,如果是第一个 Provider,则第一个密钥用于加密。 - -{{< caution >}} - -在 EncryptionConfig 中保存原始的加密密钥与不加密相比只会略微地提升安全级别。 -请使用 `kms` 驱动以获得更强的安全性。 -{{< /caution >}} +如果你没有另外指定,`identity` 提供程序将作为默认选项。 +**`identity` 提供程序不会加密存储的数据,并且提供无附加的机密保护。** -默认情况下,`identity` 驱动被用来对 etcd 中的 Secret 数据提供保护,而这个驱动不提供加密能力。 -`EncryptionConfiguration` 的引入是为了能够使用本地管理的密钥来在本地加密 Secret 数据。 +### 密钥存储 {#key-storage} -使用本地管理的密钥来加密 Secret 数据能够保护数据免受 etcd 破坏的影响,不过无法针对主机被侵入提供防护。 -这是因为加密的密钥保存在主机上的 EncryptionConfig YAML 文件中, -有经验的入侵者仍能访问该文件并从中提取出加密密钥。 +#### 本地密钥存储 {#local-key-storage} -封套加密(Envelope Encryption)引入了对独立密钥的依赖,而这个密钥并不保存在 Kubernetes 中。 -在这种情况下,入侵者需要攻破 etcd、kube-apiserver 和第三方的 KMS -驱动才能获得明文数据,因而这种方案提供了比本地保存加密密钥更高的安全级别。 +使用本地管理的密钥对 Secret 数据进行加密可以防止 etcd 受到威胁,但无法防范主机受到威胁的情况。 +由于加密密钥被存储在主机上的 EncryptionConfiguration YAML 文件中,有经验的攻击者可以访问该文件并提取加密密钥。 -## 加密你的数据 {#encrypting-you-data} +#### 托管的(KMS)密钥存储 {#kms-key-storage} -创建一个新的加密配置文件: +KMS 提供程序使用**封套加密**:Kubernetes 使用一个数据密钥来加密资源,然后使用托管的加密服务来加密该数据密钥。 +Kubernetes 为每个资源生成唯一的数据密钥。API 服务器将数据密钥的加密版本与密文一起存储在 etcd 中; +API 服务器在读取资源时,调用托管的加密服务并提供密文和(加密的)数据密钥。 +在托管的加密服务中,提供程序使用**密钥加密密钥**来解密数据密钥,解密数据密钥后恢复为明文。 +在控制平面和 KMS 之间的通信需要在传输过程中提供 TLS 这类保护。 + + +使用封套加密会依赖于密钥加密密钥,此密钥不存储在 Kubernetes 中。 +就 KMS 而言,如果攻击者意图未经授权地访问明文值,则需要同时入侵 etcd **和** 第三方 KMS 提供程序。 + + +## 编辑加密配置文件 {#write-an-encryption-configuration-file} + +{{< caution >}} + +加密配置文件可能包含可以解密 etcd 中内容的密钥。 +如果此配置文件包含任何密钥信息,你必须在所有控制平面主机上合理限制权限, +以便只有运行 kube-apiserver 的用户可以读取此配置。 +{{< /caution >}} + + +创建一个新的加密配置文件。其内容应类似于: ## 解密所有数据 {#decrypting-all-data} -要禁用静态加密,请将 `identity` provider +要禁用静态加密,请将 `identity` 提供程序 作为配置中的第一个条目并重新启动所有 `kube-apiserver` 进程。 ```yaml @@ -883,6 +919,8 @@ To allow automatic reloading, configure the API server to run with: ## {{% heading "whatsnext" %}} -进一步学习 [EncryptionConfiguration 配置 API (v1)](/zh-cn/docs/reference/config-api/apiserver-encryption.v1/)。 +* 进一步学习[解密已静态加密的数据](/zh-cn/docs/tasks/administer-cluster/decrypt-data/)。 +* 进一步学习 [EncryptionConfiguration 配置 API (v1)](/zh-cn/docs/reference/config-api/apiserver-encryption.v1/)。