istio的授權功能,也稱為基於角色的訪問控制(RBAC),它為istio服務網格中的服務提供名稱空間級別、服務級別和方法級別的訪問控制。基於角色的訪問控制具有簡單易用、靈活和高效能等特性。本文介紹如何在服務網格中為服務進行授權控制。
·前置條件·
•安裝istio的k8s叢集,啟用認證功能、雙向TLS認證
•部署bookinfo示例應用
下面基於bookinfo應用例項具體介紹如何啟用授權並配置訪問控制策略:
1. 建立service accout,啟用訪問控制
我們在service account的基礎上啟用訪問控制,為了給不同的微服務授予不同的訪問許可權,需要建立不同的service account,在本例中:
建立Service account: bookinfo-productpage,並用它部署 productpage;
建立 Service account:bookinfo-reviews,並用它部署 reviews(其中包含 reviews-v2 和 reviews-v3 兩個版本)。
清理所有現存RBAC規則:
此時,用瀏覽器開啟bookinfo的productpage頁面,會看到:
2. 啟用Istio授權
使用 RbacConfig 物件啟用 Istio Authorization:
此時,bookinfo的productpage頁面,會看到:
3. 設定名稱空間級的訪問控制
這一策略建立service-viewer 的 ServiceRole,通過constraints指定了允許訪問的服務範圍:
建立 ServiceRoleBinding 物件,用來把 service-viewer 角色指派給所有 istio-system 和 default 名稱空間的服務:
用瀏覽器開啟bookinfo的productpage頁面,會看到完整的頁面:
4. 配置服務級的訪問控制
清除名稱空間級的訪問控制
下面在bookinfo中逐步為服務加入訪問:
1) 允許到productpage服務的訪問
這條策略中建立了名稱為 productpage-viewer的ServiceRole,它允許到 productpage 服務的讀取訪問,並建立命名為 productpage-viewer的 ServiceRole,將 productpage-viewer 角色賦予給所有使用者和服務
此時,用瀏覽器開啟bookinfo的productpage頁面,會顯示 Error fetching product details 和 Error fetching product reviews 的錯誤資訊:
出現上述現象是因為我們還沒有給productpage授權訪問details 和 reviews 服務,下面兩步修復這個問題。
2) 允許對details和reviews服務的訪問
details-reviews-viewer:允許對 details 和 reviews 服務進行只讀訪問
bind-details-review: 把 details-reviews-viewer 角色授予給productpage 服務的 Service account
3) 允許對ratings服務的訪問
ratings-viewer: 允許對ratings服務的訪問
rind-ratings: 將ratings-viewer角色指派給bookinfo-reviews這個Service account
此時,用瀏覽器開啟bookinfo的productpage頁面,會看到完整的頁面。
總結:通過上述步驟,我們可以快捷的啟用授權功能,並靈活定製訪問控制策略來滿足不同的安全訪問需求。