Skip to content

Commit 7ebacef

Browse files
authored
[zh] Sync #16665 ClusterTrustBundle Documentation with some improvement into Chinese (#16672)
* Sync #16665 ClusterTrustBundle Documentation into Chinese * add improvement
1 parent e64498a commit 7ebacef

File tree

1 file changed

+86
-33
lines changed
  • content/zh/docs/concepts/security

1 file changed

+86
-33
lines changed

content/zh/docs/concepts/security/index.md

Lines changed: 86 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ Istio 安全功能提供了强大的身份、强大的策略、透明的 TLS 加
3838
- 零信任网络:在不受信任的网络上构建安全解决方案
3939

4040
请访问我们的[双向 TLS 迁移](/zh/docs/tasks/security/authentication/mtls-migration/)相关文章,
41-
开始在已部署的服务中使用 Istio 安全功能。请访问我们的[安全任务](/zh/docs/tasks/security/)
41+
开始在已部署的服务中使用 Istio 安全功能。
42+
请访问我们的[安全任务](/zh/docs/tasks/security/)
4243
以获取有关使用安全功能的详细说明。
4344

4445
## 高层架构 {#high-level-architecture}
@@ -54,9 +55,9 @@ Istio 中的安全性涉及多个组件:
5455

5556
- Sidecar 和边缘代理作为[策略执行点](https://csrc.nist.gov/glossary/term/policy_enforcement_point)(PEP)
5657
以保护客户端和服务器之间的通信安全。
57-
- 一组 Envoy 代理扩展,用于管理遥测和审计
58+
- 一组 Envoy 代理扩展,用于管理遥测和审计
5859

59-
控制面处理来自 API server 的配置,并且在数据面中配置 PEP。
60+
控制面处理来自 API 服务器的配置,并且在数据面中配置 PEP。
6061
PEP 用 Envoy 实现。下图显示了架构。
6162

6263
{{< image width="75%"
@@ -76,7 +77,7 @@ PEP 用 Envoy 实现。下图显示了架构。
7677
审计谁在什么时间访问了什么,根据他们使用的工作负载向客户收费,
7778
并拒绝任何未能支付账单的客户访问工作负载。
7879

79-
Istio 身份模型使用经典的 `service identity`(服务身份)来确定一个请求源端的身份。
80+
Istio 身份模型使用经典的 `Service Identity`(服务身份)来确定一个请求源端的身份。
8081
这种模型有极好的灵活性和粒度,可以用服务身份来标识人类用户、单个工作负载或一组工作负载。
8182
在没有服务身份的平台上,Istio 可以使用其它可以对服务实例进行分组的身份,例如服务名称。
8283

@@ -88,17 +89,17 @@ Istio 身份模型使用经典的 `service identity`(服务身份)来确定
8889
Istio 服务帐户或 GCP 服务帐户。自定义服务帐户引用现有服务帐户,
8990
就像客户的身份目录管理的身份一样。
9091

91-
## 身份和证书管理 {#PKI}
92+
## 身份和证书管理 {#pik}
9293

9394
Istio PKI 使用 X.509 证书为每个工作负载都提供强大的身份标识。
9495
`istio-agent` 与每个 Envoy 代理一起运行,与 `istiod`
9596
一起协作来自动化的进行大规模密钥和证书轮换。下图显示了这个机制的运行流程。
9697

9798
{{< tip >}}
98-
译者注:这里用 `istio-agent` 来表述,是因为下图及对图的相关解读中反复用到了 "Istio agent"
99-
这个术语,这样的描述更容易理解。另外,在实现层面,`istio-agent` 是指 Sidecar 容器中的
100-
`pilot-agent` 进程,它有很多功能,这里不表,
101-
只特别提一下:它通过 Unix socket 的方式在本地提供 SDS 服务供 Envoy 使用,
99+
译者注:这里用 `istio-agent` 来表述,是因为下图及对图的相关解读中反复用到了 "Istio Agent"
100+
这个术语,这样的描述更容易理解。另外,在实现层面,
101+
`istio-agent` 是指 Sidecar 容器中的 `pilot-agent` 进程,它有很多功能,这里不表,
102+
只特别提一下:它通过 Unix 套接字的方式在本地提供 SDS 服务供 Envoy 使用,
102103
这个信息对了解 Envoy 与 SDS 之间的交互有意义。
103104
{{< /tip >}}
104105

@@ -116,6 +117,54 @@ Istio 通过以下流程提供密钥和证书:
116117
1. `istio-agent` 通过 Envoy SDS API 将从 `istiod` 收到的证书和密钥发送给 Envoy。
117118
1. `istio-agent` 监控工作负载证书的过期时间。上述过程会定期重复进行证书和密钥轮换。
118119

120+
## 集群信任包 `ClusterTrustBundle` {#clustertrustbundle}
121+
122+
`ClusterTrustBundle` 是 Kubernetes 自定义资源定义 (CRD),
123+
旨在帮助管理集群范围内的受信任证书颁发机构 (CA) 捆绑包。
124+
它主要用于在整个集群范围内分发和信任公共 X.509 证书。
125+
此概念在组件和工作负载需要验证由非标准或私有 CA 签名的 TLS 证书的环境中尤其有用。
126+
Istio 在最近的版本中增加了对此的实验性支持,使服务信任管理更加轻松。
127+
128+
### 启用该功能 {#enabling-the-feature}
129+
130+
要在 Istio 中使用 `ClusterTrustBundle`
131+
必须在安装过程中设置一个标志来启用它。具体方法如下:
132+
133+
1. 确保您的 Kubernetes 集群为 1.27 或更高版本,
134+
[并且已启用 `ClusterTrustBundles`](https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/certificate-signing-requests/#cluster-trust-bundles)
135+
136+
1. 将其添加到您的 Istio 配置中
137+
138+
{{< text yaml >}}
139+
values:
140+
pilot:
141+
env:
142+
ENABLE_CLUSTER_TRUST_BUNDLE_API: "true"
143+
{{< /text >}}
144+
145+
### 创建和使用 ClusterTrustBundles {#creating-and-using-clustertrustbundles}
146+
147+
您可以创建 `ClusterTrustBundles` 作为 Kubernetes 资源,例如:
148+
149+
{{< text yaml >}}
150+
apiVersion: certificates.k8s.io/v1alpha1
151+
kind: ClusterTrustBundle
152+
metadata:
153+
name: my-trust-bundle
154+
spec:
155+
trustBundle |
156+
-----BEGIN CERTIFICATE-----
157+
<这里是您的根证书>
158+
-----END CERTIFICATE-----
159+
{{< /text >}}
160+
161+
一旦创建,Istio 控制平面将使用这些来验证安全通信中的证书,例如双向 TLS(mTLS)。
162+
163+
### 重要说明 {#important-notes}
164+
165+
- 这是实验性功能,因此预计未来版本会发生变化。
166+
- 确保 Istio 服务帐户具有访问 `ClusterTrustBundles` 的正确权限,否则可能会遇到错误。
167+
119168
## 认证 {#authentication}
120169

121170
Istio 提供两种类型的认证:
@@ -136,12 +185,12 @@ Istio 提供两种类型的认证:
136185
- [Firebase Auth](https://firebase.google.com/docs/auth/)
137186
- [Google Auth](https://developers.google.com/identity/protocols/OpenIDConnect)
138187

139-
在所有情况下,Istio 都通过自定义 Kubernetes API 将认证策略存储在 `Istio config store`
188+
在所有情况下,Istio 都通过自定义 Kubernetes API 将认证策略存储在 `Istio Config Store`
140189
{{< gloss >}}Istiod{{< /gloss >}} 使每个代理保持最新状态,
141-
并在适当时提供密钥。此外,Istio 的认证机制支持宽容模式(permissive mode),
190+
并在适当时提供密钥。此外,Istio 的认证机制支持宽容模式(Permissive Mode),
142191
以帮助您在强制实施前了解策略更改将如何影响您的安全状况。
143192

144-
### 双向 TLS 认证 {#mutual-TLS-authentication}
193+
### 双向 TLS 认证 {#mutual-tls-authentication}
145194

146195
Istio 通过客户端和服务器端 PEP 建立服务到服务的通信通道,
147196
PEP 被实现为 [Envoy 代理](https://www.envoyproxy.io/)
@@ -152,8 +201,10 @@ PEP 被实现为 [Envoy 代理](https://www.envoyproxy.io/)。
152201
1. 客户端 Envoy 与服务器端 Envoy 开始双向 TLS 握手。在握手期间,
153202
客户端 Envoy 还做了[安全命名](/zh/docs/concepts/security/#secure-naming)检查,
154203
以验证服务器证书中显示的服务帐户是否被授权运行目标服务。
155-
1. 客户端 Envoy 和服务器端 Envoy 建立了一个双向的 TLS 连接,Istio 将流量从客户端 Envoy 转发到服务器端 Envoy。
156-
1. 服务器端 Envoy 授权请求。如果获得授权,它将流量转发到通过本地 TCP 连接的后端服务。
204+
1. 客户端 Envoy 和服务器端 Envoy 建立了一个双向的 TLS 连接,
205+
Istio 将流量从客户端 Envoy 转发到服务器端 Envoy。
206+
1. 服务器端 Envoy 授权请求。如果获得授权,
207+
它将流量转发到通过本地 TCP 连接的后端服务。
157208

158209
Istio 将 `TLSv1_2` 作为最低支持的 TLS 版本为客户端和服务器配置了如下的加密套件:
159210

@@ -171,7 +222,7 @@ Istio 将 `TLSv1_2` 作为最低支持的 TLS 版本为客户端和服务器配
171222

172223
#### 宽容模式 {#permissive-mode}
173224

174-
Istio 双向 TLS 具有一个宽容模式(permissive mode),
225+
Istio 双向 TLS 具有一个宽容模式(Permissive Mode),
175226
允许服务同时接受纯文本流量和双向 TLS 流量。这个功能极大地提升了双向 TLS 的入门体验。
176227

177228
在运维人员希望将服务移植到启用了双向 TLS 的 Istio 上时,
@@ -189,8 +240,8 @@ Istio 双向 TLS 具有一个宽容模式(permissive mode),
189240

190241
#### 安全命名 {#secure-naming}
191242

192-
服务器身份(Server identity)被编码在证书里,
193-
但服务名称(service name)通过服务发现或 DNS 被检索。
243+
服务器身份(Server Identity)被编码在证书里,
244+
但服务名称(Service Name)通过服务发现或 DNS 被检索。
194245
安全命名信息将服务器身份映射到服务名称。身份 `A` 到服务名称 `B`
195246
的映射表示"授权 `A` 运行服务 `B`"。控制平面监视 `apiserver`
196247
生成安全命名映射,并将其安全地分发到 PEP。
@@ -250,8 +301,7 @@ Istio 将这两种认证类型以及凭证中的其他声明(如果适用)
250301
[TLS 设置参考文档](/zh/docs/reference/config/networking/destination-rule/#TLSSettings)中有更多这方面的信息。
251302

252303
和其他的 Istio 配置一样,可以用 `.yaml` 文件的形式来编写认证策略,使用 `kubectl`
253-
应用策略。下面例子中的认证策略要求:与带有 `app: reviews` 标签的工作负载的传输层认证,
254-
必须使用双向 TLS:
304+
应用策略。下面例子中的认证策略要求:与带有 `app: reviews` 标签的工作负载的传输层认证,必须使用双向 TLS:
255305

256306
{{< text yaml >}}
257307
apiVersion: security.istio.io/v1
@@ -269,18 +319,18 @@ spec:
269319

270320
#### 策略存储 {#policy-storage}
271321

272-
Istio 将网格范围的策略存储在根命名空间。这些策略使用一个空的 selector
322+
Istio 将网格范围的策略存储在根命名空间。这些策略使用一个空的 `selector`
273323
应用到网格中的所有工作负载。具有命名空间范围的策略存储在相应的命名空间中。
274324
它们仅适用于其命名空间内的工作负载。如果您配置了 `selector` 字段,
275325
则认证策略仅适用于与您配置的条件匹配的工作负载。
276326

277-
对等认证策略和请求认证策略用 kind 字段区分,
327+
对等认证策略和请求认证策略用 'kind' 字段区分,
278328
分别是 `PeerAuthentication``RequestAuthentication`
279329

280330
#### Selector 字段 {#selector-field}
281331

282332
对等认证策略和请求认证策略使用 `selector` 字段来指定该策略适用的工作负载的标签。
283-
以下示例显示适用于带有 `app: product-page` 标签的工作负载的策略的 selector 字段:
333+
以下示例显示适用于带有 `app: product-page` 标签的工作负载的策略的 `selector` 字段:
284334

285335
{{< text yaml >}}
286336
selector:
@@ -293,7 +343,7 @@ selector:
293343
因此,`selector` 字段可帮助您指定策略的范围:
294344

295345
- 网格范围策略:为根命名空间指定的策略,不带或带有空的 `selector` 字段。
296-
- 命名空间范围的策略:为非root命名空间指定的策略,不带有或带有空的 `selector` 字段。
346+
- 命名空间范围的策略:为非 root 命名空间指定的策略,不带有或带有空的 `selector` 字段。
297347
- 特定于工作负载的策略:在常规命名空间中定义的策略,带有非空 `selector` 字段。
298348

299349
对等认证策略和请求认证策略对 `selector` 字段遵循相同的层次结构原则,
@@ -461,7 +511,10 @@ Istio 按以下顺序检查层中的匹配策略:`CUSTOM`、`DENY`,
461511

462512
下图详细显示了策略优先级:
463513

464-
{{< image width="50%" link="./authz-eval.svg" caption="授权策略优先级">}}
514+
{{< image width="50%"
515+
link="./authz-eval.svg"
516+
caption="授权策略优先级"
517+
>}}
465518

466519
当您将多个授权策略应用于同一工作负载时,Istio 会累加地应用它们。
467520

@@ -628,7 +681,7 @@ spec:
628681
requestPrincipals: ["*"]
629682
{{< /text >}}
630683

631-
下面的示例拒绝到 `/admin` 路径且不带请求主体的请求
684+
下面的示例拒绝发送到 `/admin` 路径且不带请求体的请求
632685

633686
{{< text yaml >}}
634687
apiVersion: security.istio.io/v1
@@ -653,9 +706,9 @@ spec:
653706
#### `allow-nothing``deny-all``allow-all` 策略 {#allow-nothing-deny-all-and-allow-all-policy}
654707

655708
以下示例显示了不匹配任何内容的 `ALLOW` 策略。如果没有其他 `ALLOW` 策略,
656-
请求将因"默认拒绝"行为被始终拒绝。
709+
请求将因默认拒绝行为被始终拒绝。
657710

658-
请注意,"默认拒绝"行为仅适用于工作负载随着 `ALLOW`
711+
请注意,默认拒绝行为仅适用于工作负载随着 `ALLOW`
659712
操作至少有一个授权策略的情况。
660713

661714
{{< tip >}}
@@ -674,7 +727,8 @@ spec:
674727
{{< /text >}}
675728

676729
以下示例显示了显式拒绝所有访问的 `DENY` 策略。
677-
即使有另一个 `ALLOW` 策略允许请求,但由于 `DENY` 策略优先于 `ALLOW` 策略,所以将始终拒绝请求。
730+
即使有另一个 `ALLOW` 策略允许请求,但由于 `DENY`
731+
策略优先于 `ALLOW` 策略,所以将始终拒绝请求。
678732
如果您要临时禁用对工作负载的所有访问,可以使用此策略。
679733

680734
{{< text yaml >}}
@@ -711,7 +765,7 @@ spec:
711765
您还可以使用 `when` 部分指定其他条件。
712766
例如,下面的 `AuthorizationPolicy` 定义包括以下条件:
713767
`request.headers [version]``v1``v2`
714-
在这种情况下,key 是 `request.headers [version]`
768+
在这种情况下,`key``request.headers [version]`
715769
它是 Istio 属性 `request.headers`(这是个字典)中的一项。
716770

717771
{{< text yaml >}}
@@ -786,12 +840,11 @@ spec:
786840
methods: ["GET", "POST"]
787841
{{< /text >}}
788842

789-
### 在普通 TCP 协议上使用 Istio 授权 {#using-Istio-authorization-on-plain-TCP-protocols}
843+
### 在普通 TCP 协议上使用 Istio 授权 {#using-istio-authorization-on-plain-tcp-protocols}
790844

791845
Istio 授权支持工作负载使用任意普通 TCP 协议,如 MongoDB。
792846
在这种情况下,您可以按照与 HTTP 工作负载相同的方式配置授权策略。
793-
不同之处在于某些字段和条件仅适用于 HTTP 工作负载。
794-
这些字段包括:
847+
不同之处在于某些字段和条件仅适用于 HTTP 工作负载。这些字段包括:
795848

796849
- 授权策略对象 `source` 部分中的 `request_principals` 字段
797850
- 授权策略对象 `operation` 部分中的 `hosts``methods``paths` 字段
@@ -822,7 +875,7 @@ spec:
822875
ports: ["27017"]
823876
{{< /text >}}
824877

825-
### 对双向 TLS 的依赖 {#dependency-on-mutual-TLS}
878+
### 对双向 TLS 的依赖 {#dependency-on-mutual-tls}
826879

827880
Istio 使用双向 TLS 将某些信息从客户端安全地传递到服务器。
828881
在使用授权策略中的以下任何字段之前,必须先启用双向 TLS:

0 commit comments

Comments
 (0)