簡體   English   中英

了解 kubernetes Pod 的 Istio AuthN 和 authz

[英]Understanding Istio AuthN and authz for kubernetes Pods

我對將 Istio 與 EKS 結合使用感到有些困惑。 我們有 2 個 spring boot 微服務,一個是 REST 服務提供者,另一個是消費者。 我們想使用 Istio 實現 Authn 和 authz。

為此: 1. 在提供者服務方面:我有一個 VirtualService,一個目標規則(聲明 TLS 模式應該是 ISTIO_MUTUAL 傳入流量),一個 AuthorizationPolicy 基本上將客戶端服務帳戶列入白名單。 我還有一個 AuthenticationPolicy 如下:

apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
  name: $APP_NAME-$FEATURE_NAME-authenticationpolicy
  namespace: $NAME_SPACE
spec:
  targets:
  - name: "$APP_NAME-$FEATURE_NAME"
  peers:
  - mtls:
      mode: STRICT

我的理解是,此策略不允許任何非 mtls 的傳入流量。

現在我懷疑如何配置我的客戶端 pod 以發送所有 mtls 傳出流量。我知道我必須創建一個 ServiceAccount,它使用 Authz 策略在提供商端列入白名單。我更關心我的客戶端 pod,因為我在這里我不確定如何在 pod 級別啟用 mtls。 僅供參考,我不想在命名空間級別啟用 mtls。我想使用 yaml 文件在 pod 級別執行此操作。

我對 Destination 規則、Authn 和 Authz 策略用法的理解是否正確? Destination 規則、Authn 和 Authz 策略必須在服務提供商級別是否正確? 客戶端只需要啟用 MTLS 即可成功進行通信? 我一直在瀏覽 Istio 文檔,但這是我有疑問的地方

我的理解是,此策略不允許任何非 mtls 的傳入流量。

確實如此,如果您將 tls 模式設置為嚴格,則必須提供客戶端證書,連接在 TLS 中。


我更關心我的客戶端 pod,因為我不確定如何在 pod 級別啟用 mtls。

一篇關於如何使其工作的好文章,特別是部分

為兩個服務之間的單個連接設置 mTLS

由於 Bookinfo 是 Istio 的 Hello World,我將使用它來解釋如何設置從產品頁面到詳細信息服務的 mTLS,如上圖所示。

這有兩個部分:

安裝一個 Policy 來告訴 Details 它想要接收 TLS 流量(僅限):

apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: details-receive-tls
spec:
  targets:
  - name: details
  peers:
  - mtls: {}
  1. 安裝 DestinationRule 以告訴客戶端(productpage)與詳細信息交談 TLS:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: details-istio-mtls
spec:
  host: details.bookinfo.svc.cluster.local
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL

以下是所涉及服務的圖形表示以及前兩個配置文檔的適用位置。

在此處輸入圖片說明

現在,當您仔細查看上面的策略時,您將看到對等身份驗證的條目

peers:
- mtls: {}

這意味着 TLS 驗證是嚴格的,並且 Istio(或者更確切地說是 Pod 中的 Envoy 代理)需要 TLS 流量和有效的證書。 我們可以通過一個標志來獲得許可模式:

peers:
- mtls: 
    mode: PERMISSIVE

Destination 規則、Authn 和 Authz 策略必須在服務提供商級別是否正確?

據我所知是的。

客戶端只需要啟用 MTLS 即可成功進行通信?

我不確定,因為 MTLS 在網格內工作,這取決於您的應用程序要求。


我想使用 yaml 文件在 pod 級別執行此操作。

有一個指向有關身份驗證的istio 文檔的鏈接,其中包括

另一個來自 github

或者您可以擴展網關的定義以支持雙向 TLS。 通過刪除其機密並創建新的機密來更改入口網關的憑據。 服務器使用 CA 證書來驗證其客戶端,我們必須使用名稱 cacert 來保存 CA 證書。 您可以使用 cert-manager 生成客戶端證書。


我找到了一些可能有用的教程,請查看。


如果您還有其他問題,請告訴我。

謝謝 JT97。這是我實現的

1) 對於身份驗證,我為必須啟用 MTLS 的傳入請求實施了 Istio STRICT 身份驗證策略。 Citadel 應該根據他們的證書來確定客戶和服務提供商是否是他們聲稱的人。

2)對於授權,我在客戶端創建了一個服務帳戶,並在服務器端添加了一個授權策略,只將那些我想使用我的 REST 資源(PUT POST 等)的服務帳戶列入白名單

3)我配置不同的一件事是目標規則。 理想情況下,它應該在客戶端說我聲明我的目的地規則提供者目的地是這個的客戶端。與 ISTIO_MUTUAL。 在我看來,在提供者端聲明目的地規則沒有任何區別。

4.) 我已經在命名空間級別聲明了目標規則。現在必須測試來自命名空間之外但在網格內的客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM