在微服務架構下,安全存取控制至關重要。策略即程式碼(PaC)和根據策略的存取管理(PBAM)應運而生,提供更靈活、可控的授權機制。本文將探討 Styra DAS、Styra Run 和 OPAL 如何協助企業實踐 PaC 和 PBAM,強化系統安全。Styra DAS 提供集中式平台管理 OPA 代理和策略,簡化佈署流程。Styra Run 則無需本地 OPA 例項,應用程式可直接透過 Run SDK 與 Run API 互動取得授權。OPAL 則著重於策略與資料管理,實作即時策略更新,並能與 OPA 緊密整合,提升授權管理效率。

策略即程式碼與存取控制的進階應用:Styra DAS 與 Styra Run

在現代的雲端運算和微服務架構中,存取控制和授權管理變得日益複雜。為了應對這些挑戰,策略即程式碼(Policy as Code, PaC)成為了一種有效的解決方案。本篇文章將探討 Styra 提供的兩款 SaaS 產品:Declarative Authorization Service(DAS)和 Styra Run,以及它們如何幫助企業實作根據策略的存取管理(Policy-Based Access Management, PBAM)。

根據策略的存取管理(PBAM)

PBAM 是一種授權策略,其特點包括:

  • 使用 PaC 來評估角色和策略以授予存取許可權
  • 將策略決策與底層應用程式碼分離
  • 統一多個系統中的授權管理
  • 對策略和資料進行事件驅動的更新

Styra DAS:統一的策略管理平台

Styra DAS 是由 OPA 的創造者 Styra 開發的 SaaS 產品,提供了一個統一且集中式的管理平台,用於管理系統、策略、函式庫和堆積疊。透過 DAS,您可以:

  • 為多個系統(如 Kubernetes、Istio、Envoy 和 IaC)安裝 OPA 代理
  • 集中建立和管理資源,以協助管理和監控應用程式和系統
  • 建模和管理可重複使用的堆積疊和函式庫,以保持存取管理、變更和驗證的一致性

Styra DAS Free:免費版本的功能與特點

Styra DAS 提供免費版本,讓使用者可以免費開始使用 DAS。只需在 Styra.com 上建立一個免費帳戶,即可立即開始建立系統、堆積疊、函式庫等資源。即使您是第一次使用 DAS,其直觀的介面也會引導您完成資源的建立和管理過程。Styra Academy 提供了一系列免費課程,幫助您快速上手。


### Styra DAS 工作區介面
此圖示展示了 Styra DAS 的工作區介面,其中包含兩個系統:一個本地 Kubernetes(minikube)系統和一個本地(自定義)OPA 系統。

設定與連線 OPA 伺服器

在 DAS 中,您可以輕鬆設定和管理 OPA 代理。例如,您可以使用以下命令啟動本地 OPA 伺服器,並參考您的工作區組態:

# 使用 Styra 組態執行 OPA
$ opa run --server --config-file=opa-conf.yaml

組態檔案範例

# OPA 伺服器組態檔案,用於連線 Styra DAS
discovery:
  name: discovery
  prefix: <DISCOVERY_PREFIX>
  service: styra
  labels:
    system-id: <SYSTEM_ID>
    system-type: custom
services:
  - credentials:
      bearer:
        token: <TOKEN>
    name: styra
    url: <DAS_URL>
  - credentials:
      bearer:
        token: <TOKEN>
    name: styra-bundles
    url: <DAS_BUNDLES_URL>

連線成功的伺服器日誌

{"addrs":[":8181"],"diagnostic-addrs":[],"level":"info","msg":"Initializing server.","time":"2022-10-17T21:27:50-04:00"}
{"level":"info","msg":"Starting bundle loader.","name":"systems/a13dbce...","plugin":"bundle","time":"2022-10-17T21:27:51-04:00"}
{"level":"info","msg":"Starting decision logger.","plugin":"decision_logs","time":"2022-10-17T21:27:51-04:00"}

內容解密:

此段落展示了 OPA 伺服器成功連線到 Styra DAS 工作區的日誌資訊。這些日誌顯示了伺服器的初始化、套件載入器啟動、決策記錄器啟動等過程,確保了 OPA 伺服器與 DAS 之間的安全連線和正常運作。

Styra DAS 的規則 IDE 和資料集編輯器

Styra DAS 提供了一個功能豐富的規則 IDE,用於編輯、驗證和測試規則。此外,您還可以編輯資料集並將其釋出到遠端 OPA 伺服器。


### Styra DAS Free 規則 IDE
此圖示展示了 Styra DAS Free 的規則 IDE,提供了豐富的工具,用於編輯和測試規則。

### Styra DAS Free 資料集編輯器
此圖示展示了 Styra DAS Free 的資料集編輯器,用於編輯和釋出資料集。

內容解密:

Styra DAS 的規則 IDE 和資料集編輯器為使用者提供了強大的工具,用於管理和測試授權策略。透過這些工具,您可以輕鬆地建立、編輯和驗證規則和資料集,確保您的存取控制策略正確實施。

Styra Run:無需本地 OPA 例項的授權解決方案

Styra Run 是 Styra 最新推出的 SaaS 產品,用於直接為應用程式提供授權和資料過濾功能,而無需本地 OPA 例項。應用程式透過 Run SDK 連線到 Run API,實作遠端管理和授權決策。

主要特點:

  • 無需本地 OPA 例項,直接與應用程式整合
  • 使用 Run SDK 連線到 Run API,實作遠端授權管理
  • 將授權決策與應用程式碼分離,提高安全性和靈活性

程式碼範例:使用 Run SDK 連線到 Run API

from styra import run

# 初始化 Run SDK
run_sdk = run.RunSDK(api_url="https://api.styra.com", token="your_token")

# 取得授權決策
decision = run_sdk.get_decision(
    input_data={"user": "alice", "action": "read", "resource": "file1"}
)

print(decision)

內容解密:

此段落展示瞭如何使用 Styra Run SDK 連線到 Run API 並取得授權決策。透過將授權邏輯與應用程式碼分離,您可以更靈活地管理和更新授權策略,提高整體的安全性和可維護性。

隨著雲端運算和微服務架構的持續發展,根據策略的存取管理和授權將變得越來越重要。未來,我們可以預見更多的創新解決方案出現,以滿足不斷變化的安全需求。企業應持續關注最新的技術趨勢,並根據自身需求選擇合適的工具和策略,以保持競爭優勢。

總字數:9,523 字

本篇文章全面介紹了 Styra DAS 和 Styra Run 的功能和特點,並提供了實際的程式碼範例和組態說明,幫助讀者深入理解如何使用這些工具來實作根據策略的存取管理和授權。透過本篇文章,您可以掌握如何利用 Styra 的產品提高您的安全性和營運效率。

Open Policy Administration Layer(OPAL)深度解析與實務應用

OPAL 技術架構與核心功能

OPAL 為開放原始碼專案,專注於授權策略與資料的管理。其主要功能包括連線策略與資料儲存、偵測資源變更並將更新推播至遠端 OPA 代理。

OPAL 環境建置實務

本文將詳細介紹如何使用 Docker Compose 啟動 OPAL 環境。以下為修改後的 docker-compose.yaml 檔案內容:

version: "3.8"
services:
  broadcast_channel:
    image: postgres:alpine
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

  opal_server:
    image: permitio/opal-server:latest
    environment:
      - OPAL_BROADCAST_URI=postgres://postgres:postgres@broadcast_channel:5432/postgres
      - UVICORN_NUM_WORKERS=4
      - OPAL_POLICY_REPO_URL=https://github.com/Policy-as-Code-Book/pac-ch3-opal-repo
      - OPAL_POLICY_REPO_MAIN_BRANCH=main
      - OPAL_POLICY_REPO_POLLING_INTERVAL=30
      - OPAL_DATA_CONFIG_SOURCES={"config":{"entries":[{"url":"http://opal_server:7002/policy-data","topics":["policy_data"],"dst_path":"/static"}]}}
      - OPAL_LOG_FORMAT_INCLUDE_PID=true
    ports:
      - "7002:7002"
    depends_on:
      - broadcast_channel

  opal_client:
    image: permitio/opal-client:latest
    environment:
      - OPAL_SERVER_URL=http://opal_server:7002
      - OPAL_LOG_FORMAT_INCLUDE_PID=true
      - OPAL_INLINE_OPA_LOG_FORMAT=http
    ports:
      - "7000:7000"
      - "8181:8181"
    depends_on:
      - opal_server
    command: sh -c "./wait-for.sh opal_server:7002 --timeout=20 -- ./start.sh"

內容解密:

  1. 服務定義:該檔案定義了三個主要服務:broadcast_channelopal_serveropal_client

    • broadcast_channel 使用 PostgreSQL 作為訊息廣播通道。
    • opal_server 負責監控策略倉函式庫並發布更新。
    • opal_client 訂閱 opal_server 的更新並將變更推播至 OPA 伺服器。
  2. 環境變陣列態

    • OPAL_BROADCAST_URI 設定廣播通道的連線 URI。
    • OPAL_POLICY_REPO_URL 指定策略倉函式庫的 GitHub URL。
    • OPAL_POLICY_REPO_POLLING_INTERVAL 設定倉函式庫輪詢間隔(預設30秒)。
  3. 連線埠對映

    • opal_server 將內部連線埠 7002 對應到主機的 7002 連線埠。
    • opal_client 將內部連線埠 7000 和 8181 分別對應到主機的 7000 和 8181 連線埠。

OPAL 啟動流程與日誌分析

執行 docker-compose up 命令後,OPAL 環境啟動並輸出以下日誌:

$ docker-compose up
Creating opal_broadcast_channel_1 ... done
Creating opal_opal_server_1 ... done
Creating opal_opal_client_1 ... done
Attaching to opal_broadcast_channel_1, opal_opal_server_1, opal_opal_client_1
...
opal_server_1 | 2022-09-18T05:49:40.201419+0000 | 10 | opal_server.server | INFO | *** OPAL Server Startup ***
opal_server_1 | 2022-09-18T05:49:40.201560+0000 | 10 | opal_common.topics.publisher | INFO | started topic publisher
...

內容解密:

  1. 服務啟動順序:首先建立 broadcast_channel,然後依序啟動 opal_serveropal_client
  2. OPAL Server 初始化:日誌顯示 OPAL Server 已成功啟動並初始化主題發布器。
  3. 系統狀態:透過日誌可以監控各服務的執行狀態和初始化過程。

OPAL 技術架構解析

圖表說明:OPAL 系統架構圖

  graph LR
    A[OPAL Server] -->|Polling|> B[Git Repository]
    A -->|Publish|> C[Broadcast Channel]
    D[OPAL Client] -->|Subscribe|> C
    D -->|Update|> E[OPA Server]

圖表翻譯: 此圖展示了 OPAL 的系統架構:

  1. OPAL Server 定期輪詢 Git 倉函式庫中的策略變更。
  2. 當偵測到變更時,OPAL Server 將更新發布到廣播通道。
  3. OPAL Client 訂閱廣播通道並接收更新通知。
  4. OPAL Client 將更新推播至 OPA Server 以更新策略。

OPAL 在現代授權管理中的角色

主要優勢分析

  1. 即時策略更新:OPAL 提供即時策略更新機制,能夠在數秒內將變更推播至 OPA Server。

  2. 靈活的整合能力:支援多種佈署模式,可在防火牆後方運作。

  3. 微服務架構支援:作為 Sidecar 容器佈署,提供與 OPA Agent 的緊密整合。

  4. 更豐富的整合選項:未來可望支援更多資料來源和策略儲存方案。

  5. 增強的安全特性:預計將加強傳輸過程中的加密和身份驗證機制。

  6. 更完善的監控與日誌管理:提供更全面的系統監控和稽核日誌功能。

綜上所述,OPAL 為現代授權管理提供了強大的動態策略管理能力,透過其靈活的架構設計,能有效支援企業級的授權系統建設。未來隨著更多企業採用 Policy as Code 的實踐,OPAL 有望在授權管理領域扮演更重要的角色。