Istio 安全認證

Istio 安全認證架構

關聯的組件

  • Citadel 用於密鑰和證書管理
  • Sidecar周邊代理實現客戶端和服務器之間的安全通信
  • Pilot將授權策略和安全命名信息分發給代理
  • Mixer管理授權和審計

認證

Istio身份標識

不同平臺身份標識

  • Kubernetes: Kubernetes 服務帳戶
  • GKE/GCE: 可以使用 GCP 服務帳戶
  • GCP: GCP 服務帳戶
  • AWS: AWS IAM 用戶/角色帳戶
  • 本地(非 Kubernetes): 用戶帳戶、自定義服務帳戶、服務名稱、Istio 服務帳戶或 GCP 服務帳戶

可能需要關注的是 k8s serviceaccount,本地賬戶

Public Key Infrastructure (PKI)

Istio 使用 X.509 證書來攜帶 SPIFFE 格式的身份。PKI用於大規模自動化密鑰和證書輪換。

流程如下:

  1. Citadel 創建一個 gRPC 服務來接受 CSR 請求。

  2. Envoy 通過 Envoy secret 發現服務(SDS)API 發送證書和密鑰請求。

  3. 收到 SDS 請求後,節點代理會創建私鑰和 CSR,並將 CSR 及其憑據發送給 Citadel 進行簽名。

  4. Citadel 驗證 CSR 中攜帶的憑證,並簽署 CSR 以生成證書。

  5. 節點代理通過 Envoy SDS API 將從 Citadel 接收的證書和私鑰發送給 Envoy。

  6. 上述 CSR 過程會定期重複進行證書和密鑰輪換。

認證

Istio 提供兩種類型的身份驗證:

  • 傳輸身份驗證,也稱爲服務間身份驗證:驗證建立連接的直接客戶端。 Istio 提供雙向 TLS 作爲傳輸身份驗證的完整堆棧解決方案。 您可以輕鬆打開此功能,而無需更改服務代碼。這個解決方案:

    • 爲每個服務提供強大的身份,表示其角色,以實現跨羣集和雲的互操作性。
    • 保護服務到服務通信和最終用戶到服務的通信。
    • 提供密鑰管理系統,以自動執行密鑰和證書生成,分發和輪換。
  • 來源身份認證,也稱爲最終用戶身份驗證:驗證作爲最終用戶或設備發出請求的原始客戶端。Istio 通過 JSON Web Token(JWT)驗證和 ORY Hydra、Keycloak、Auth0、Firebase Auth、Google Auth 和自定義身份驗證來簡化開發人員體驗,並且輕鬆實現請求級別的身份驗證。

雙向TLS認證

Istio 隧道通過客戶端和服務器端進行服務間(service-to-service)通信 Envoy 代理。爲了使客戶端通過雙向 TLS 調用服務端,請遵循以下步驟:

1.Istio 將出站流量從客戶端重新路由到客戶端的本地 sidecar Envoy。
2.客戶端 Envoy 與服務器端 Envoy 開始雙向 TLS 握手。在握手期間,客戶端 Envoy 還做了安全命名檢查,以驗證服務器證書中顯示的服務帳戶是否被授權運行到目標服務。
3.客戶端 Envoy 和服務器端 Envoy 建立了一個雙向的 TLS 連接,Istio 將流量從客戶端 Envoy 轉發到服務器端 Envoy。

4.授權後,服務器端 Envoy 通過本地 TCP 連接將流量轉發到服務器服務。

寬容模式

允許 service 同時接受純文本流量和雙向 TLS 流量

安全命名

安全命名能夠防止 HTTPS 流量受到一般性網絡劫持,除了 DNS 欺騙外,它還可以保護 TCP 流量免受一般網絡劫持。

認證策略

  • 策略存儲範圍
  • 目標選擇器
  • 傳輸認證
  • 來源身份認證
  • 主認證綁定
  • 更新認證策略

授權

Istio 的授權功能爲 Istio 網格中的工作負載提供網格級別、命名空間級別和工作負載級別的訪問控制。它提供了:

  • 工作負載間和最終用戶到工作負載的授權。
  • 一個簡單的 API,它包括一個單獨的並且很容易使用和維護的 AuthorizationPolicy CRD。
  • 靈活的語義,運維人員可以在 Istio 屬性上自定義條件。
  • 高性能,因爲 Istio 授權是在 Envoy 本地強制執行的。
  • 高兼容性,原生支持 HTTP、HTTPS 和 HTTP2,以及任意普通 TCP 協議。

隱式啓用

無需顯式啓用 Istio 的授權功能,只需在工作負載上應用 AuthorizationPolicy 即可實現訪問控制。如果沒有對工作負載應用 AuthorizationPolicy,則不會執行訪問控制,也就是說,將允許所有請求。

授權策略

  • 策略目標 策略範圍(目標)由 metadata/namespace 和可選的 selector 確定
  • 值匹配 部分字段都支持完全匹配、前綴匹配、後綴匹配和存在匹配,但有一些例外情況(例如,when 部分下的key 字段,source 部分下的 ipBlocks 和 to 部分下的 ports 字段僅支持完全匹配)
  • 全部允許和全部拒絕
  • 自定義條件
  • 認證與未認證身份

TCP 協議上使用 Istio 授權

與 http 配置類似

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章