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

在ASM中使用OPA定義細粒度訪問控制

服務網格ASM集成了開放策略代理(OPA)插件,通過OPA定義訪問控制策略,可以使您的應用實現細粒度的訪問控制。

前提條件

背景信息

作為由CNCF托管的一個孵化項目,開放策略代理(OPA)是一個策略引擎,可用于為您的應用程序實現細粒度的訪問控制。OPA作為通用策略引擎,可以與微服務一起部署為獨立服務。為了保護應用程序,必須先授權對微服務的每個請求,然后才能對其進行處理。為了檢查授權,微服務對OPA進行API調用,以確定請求是否被授權。OPA

步驟一:啟用OPA插件

  1. 登錄ASM控制臺

  2. 在左側導航欄,選擇服務網格 > 網格管理

  3. 網格管理頁面,找到待配置的實例,單擊實例的名稱或在操作列中單擊管理

  4. 基本信息頁面單擊右上角的功能設置

  5. 功能設置更新頁面中選中啟用OPA插件

  6. 單擊確定

    基本信息頁面可以看到OPA插件的狀態變為開啟

步驟二:部署OPA配置項

部署業務Pod之前,需要部署OPA配置文件和OPA策略的配置項Configmap。

  1. 通過kubectl連接到ASM實例中新添加的ACK集群,執行以下命令,部署OPA配置文件。

    kubectl apply -n {替換成實際的namespace} -f - <<EOF
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: opa-istio-config
    data:
      config.yaml: |
        plugins:
          envoy_ext_authz_grpc:
            addr: :9191
            path: istio/authz/allow
    EOF        
  2. 通過kubectl連接到ASM實例中新添加的ACK集群,執行以下命令,部署OPA策略。

    kubectl apply -n {替換成實際的namespace} -f - <<EOF
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: opa-policy
    data:
      policy.rego: |  ###以下為示例策略定義,需要替換成實際的策略定義。
        package istio.authz
        import input.attributes.request.http as http_request
        default allow = false
        allow {
            roles_for_user[r]
            required_roles[r]
        }
        roles_for_user[r] {
            r := user_roles[user_name][_]
        }
        required_roles[r] {
            perm := role_perms[r][_]
            perm.method = http_request.method
            perm.path = http_request.path
        }
        user_name = parsed {
            [_, encoded] := split(http_request.headers.authorization, " ")
            [parsed, _] := split(base64url.decode(encoded), ":")
        }
        user_roles = {
            "guest1": ["guest"],
            "admin1": ["admin"]
        }
        role_perms = {
            "guest": [
                {"method": "GET",  "path": "/productpage"},
            ],
            "admin": [
                {"method": "GET",  "path": "/productpage"},
                {"method": "GET",  "path": "/api/v1/products"},
            ],
        }
    EOF        
    • user_roles:為用戶授予角色權限。本例設置guest1擁有guest角色權限,admin1擁有admin角色權限。

    • role_perms:設置角色擁有的權限。本文設置guest角色可以通過/productpage訪問應用,admin角色可以通過/productpage/api/v1/products訪問應用。

步驟三:注入OPA代理

部署示例應用Bookinfo到ASM實例,確認每個POD都注入了OPA代理。

  1. 部署示例應用Bookinfo到ASM實例,請參見部署應用到ASM實例

  2. 定義相應的Istio虛擬服務和入口網關,請參見使用Istio資源實現版本流量路由

  3. 檢查每個應用是否都注入OPA代理。

    1. 登錄容器服務管理控制臺
    2. 在控制臺左側導航欄,單擊集群
    3. 集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情
    4. 在集群管理頁左側導航欄,選擇工作負載 > 容器組
    5. 容器組頁面,從命名空間下拉列表中選擇default,單擊目標應用容器組的名稱。

      容器頁簽下可以看到容器被注入了Sidecar代理(istio-proxy)和OPA代理(opa-istio)。依次檢查每個應用的容器,確保每個容器都被注入了Sidecar代理和OPA代理。注入OPA代理

執行結果

以上配置的OPA策略限制了對BookInfo的訪問,定義如下所示。

  • 執行以下命令,可以看到guest1被授予guest角色,并且可以使用帶有/productpage的URL訪問應用,但不能使用帶有/v1/api/products的URL訪問應用。

    curl -X GET http://<入口網關服務的IP地址>/productpage --user guest1:password -I

    預期輸出:

    HTTP/1.1 200 OK
    curl -X GET http://<入口網關服務的IP地址>/api/v1/products --user guest1:password -I

    預期輸出:

    HTTP/1.1 403 Forbidden
  • 執行以下命令,可以看到admin1被授予admin角色,并且可以使用帶有/productpage和/v1/api/products的URL訪問應用。

    curl -X GET http://<入口網關服務的IP地址>/productpage --user admin1:password -I

    預期輸出:

    HTTP/1.1 200 OK
    curl -X GET http://<入口網關服務的IP地址>/api/v1/products --user admin1:password -I

    預期輸出:

    HTTP/1.1 200 OK

    根據以上結果,可以看到OPA定義訪問控制策略是成功的。