日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

在ASM網關上使用自定義授權服務

當您需要按照自身需求定制訪問控制策略時,例如基于HTTP域名、HTTP路徑、HTTP方法等對請求進行鑒權,可以在ASM網關上使用自定義授權服務,確保只有經過認證的用戶才能訪問關鍵服務。

前提條件

功能介紹

客戶端發起業務請求,后端需要驗證用戶請求的合法性。例如,判斷用戶請求是否有該資源訪問權限。認證通過后,返回結果中還需要增加一些原始請求中沒有的信息,例如用戶認證通過后在header中添加業務版本號、用戶ID等。ASM提供了自定義授權服務。在ASM網關上加入鑒權流程,以確保只有得到授權的情況下,才能訪問關鍵服務。

自定義授權服務是需要您自行開發的一個授權服務。本文以部署一個已實現的簡易授權服務為例,將到達網關的指定請求導向自定義授權服務,由該授權服務決定是否允許該請求通過,然后網關會根據授權結果決定放行或拒絕該請求。您需要配置以下兩部分信息:

  • 網關和自定義授權服務互相對接的信息。

  • 指定該網關的哪些請求需要由自定義授權服務進行鑒權。

自定義授權服務屬于服務網格的高級安全能力。如果您的需求較為簡單,可以參考網關黑白名單授權策略進行配置;如果您的需求較為復雜,可以參照本文進行配置。

實現流程

ASM對于Istio自定義授權進行了封裝。如果您想了解Istio原生的實現流程,可以查看ASM為您生成的原生Istio資源。ASM自定義授權服務實現流程示例如下:

  1. 在ASM定義自定義授權服務,關聯步驟一創建的自定義授權服務,使ASM可以使用該服務進行鑒權。

  2. 在ASM創建授權策略,配置需要自定義鑒權的應用,并將鑒權指向步驟二配置的自定義授權服務。

基于ASM實現應用請求認證授權

步驟一:部署自定義授權服務

在ACK集群中部署自定義授權服務,該服務需遵循Istio自定義鑒權服務接口規范,支持HTTP和gRPC協議,用于實現自定義鑒權邏輯。本文使用的示例服務要求請求必須帶有x-ext-authz: allow請求頭,才能通過鑒權訪問成功。

說明

本文提供了自定義授權服務示例,您可以參考本示例應用的代碼,創建自己的自定義授權服務。具體操作,請參見自定義授權

  1. 使用以下內容,創建ext-authz.yaml

    展開查看ext-authz.yaml

    # Copyright Istio Authors
    #
    #   Licensed under the Apache License, Version 2.0 (the "License");
    #   you may not use this file except in compliance with the License.
    #   You may obtain a copy of the License at
    #
    #       http://www.apache.org/licenses/LICENSE-2.0
    #
    #   Unless required by applicable law or agreed to in writing, software
    #   distributed under the License is distributed on an "AS IS" BASIS,
    #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    #   See the License for the specific language governing permissions and
    #   limitations under the License.
    
    # Example configurations for deploying ext-authz server separately in the mesh.
    
    apiVersion: v1
    kind: Service
    metadata:
      name: ext-authz
      labels:
        app: ext-authz
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 8000
      - name: grpc
        port: 9000
        targetPort: 9000
      selector:
        app: ext-authz
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ext-authz
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ext-authz
      template:
        metadata:
          labels:
            app: ext-authz
        spec:
          containers:
          - image: istio/ext-authz:0.6
            imagePullPolicy: IfNotPresent
            name: ext-authz
            ports:
            - containerPort: 8000
            - containerPort: 9000
    ---
  2. 執行以下命令,在集群中部署自定義授權服務。

    關于如何通過kubectl管理集群和應用,請參見通過kubectl工具連接集群

    kubectl apply -f ext-authz.yaml
  3. 執行以下命令,查看Pod狀態。

    kubectl get pod

    預期輸出:

    NAME                              READY   STATUS    RESTARTS       AGE
    ext-authz-6d458d5f8f-bh2m9        2/2     Running   0              1m
  4. 執行以下命令,驗證應用是否正常工作。

    kubectl logs "$(kubectl get pod -l app=ext-authz -n default -o jsonpath={.items..metadata.name})" -n default -c ext-authz

    預期輸出:

    2023/12/12 10:01:31 Starting HTTP server at [::]:8000
    2023/12/12 10:01:31 Starting gRPC server at [::]:9000

    返回以上結果,說明應用正常工作,自定義授權服務部署成功。

  5. 獲取ext-authz授權服務的gRPC和HTTP協議端口。

    1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

    2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇網絡 > 服務

    3. 服務頁面,單擊ext-authz

      端點區域可以看到gRPC協議的端口為9000,HTTP協議的端口為8000。因此訪問該服務的gRPC地址為ext-authz.default.svc.cluster.local:9000,HTTP地址為ext-authz.default.svc.cluster.local:8000

步驟二:在網關配置HTTP協議的自定義授權服務

ASM網關集成了自定義授權的能力,支持通過ASM控制臺進行配置。

  1. 登錄ASM控制臺,在左側導航欄,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇ASM網關 > 入口網關

  3. 入口網關頁面,單擊目標網關名稱。

  4. 在網關概覽導航欄,單擊網關安全 > 自定義授權服務

  5. 自定義授權服務配置配置向導,打開啟用網關自定義授權服務開關,任選以下方式,配置自定義授權服務,然后單擊下一步

    方式一:新建自定義授權服務

    基于envoy.ext_authz實現的自定義授權服務(HTTP或gRPC協議)頁簽,進行如下配置。關于配置項的說明,請參見接入HTTP協議的自定義授權服務基于envoy.ext_authz實現的自定義授權服務(HTTP或gRPC協議)headerheader配置

    方式二:導入已有的自定義授權服務

    導入已有自定義授權服務頁簽,選擇已有自定義授權服務

  6. 匹配規則配置向導,進行如下配置,然后單擊提交

    被該規則匹配到的請求,將會執行自定義授權。匹配規則

    配置完成后,頁面會顯示網關自定義授權服務創建成功

步驟三:驗證ASM網關使用自定義授權服務是否成功

  1. 執行以下命令,訪問網關上/api/v1/products路徑的資源。

    關于如何獲取網關地址,請參見獲取入口網關地址

    curl -I http://{您的ASM網關地址}/api/v1/products

    預期輸出:

    HTTP/1.1 200 OK
    server: istio-envoy
    date: Wed, 13 Dec 2023 02:41:20 GMT
    content-type: application/json
    content-length: 395
    x-envoy-upstream-service-time: 1

    返回以上結果,說明沒有觸發鑒權。訪問的路徑為/api/v1/products,不是上文配置的/productpage,所以不被授權策略約束。

  2. 執行以下命令,帶有x-ext-authz: deny請求頭訪問/productpage路徑的資源。

    curl -I -H "x-ext-authz: deny" http://{您的ASM網關地址}/productpage

    預期輸出:

    HTTP/1.1 403 Forbidden
    x-ext-authz-check-result: denied
    date: Wed, 13 Dec 2023 02:42:59 GMT
    server: istio-envoy
    transfer-encoding: chunked

    返回以上結果,說明觸發鑒權,但是鑒權未通過。返回的結果中包含新定義的響應頭x-ext-authz-check-result: denied。訪問的路徑是授權策略中定義的/productpage,所以會被授權策略約束。

  3. 執行以下命令,帶有x-ext-authz: allow請求頭訪問/productpage路徑的資源。

    curl -I -H "x-ext-authz: allow" http://{您的ASM網關地址}/productpage

    預期輸出:

    HTTP/1.1 200 OK
    server: istio-envoy
    date: Wed, 13 Dec 2023 02:50:38 GMT
    content-type: text/html; charset=utf-8
    content-length: 5290
    x-envoy-upstream-service-time: 47

    返回以上結果,說明觸發鑒權,并且鑒權通過。鑒權通過后,網關轉發給應用的請求中會攜帶x-ext-authz-check-result的header(值為allowed)。攜帶這個header是因為本文自定義授權服務會添加該header,且上文配置中允許授權響應攜帶該header。

相關文檔

  • ASM網關支持從源地址、HTTP域名、端口、遠程源IP四個維度配置黑白名單,以保障網格內應用的安全。具體操作,請參見在ASM網關中配置黑白名單

  • 您可以借助阿里云IDaaS或其他符合OIDC標準的身份提供者,無需修改應用本身,即可實現一次登錄、多次訪問。具體操作,請參見在ASM網關中配置OIDC單點登錄