授權策略
更新時間 2024-09-09 19:41:48
最近更新時間: 2024-09-09 19:41:48
分享文章
本章節介紹授權策略
概述
授權策略(AuthorizationPolicy)提供全局、命名空間級工作負載級別的訪問控制,支持工作負載之間及終端用戶對網格內的工作負載的訪問控制策略。
授權策略配置粒度
授權策略支持三種配置粒度,全局、命名空間和工作負載級;
- 當策略的命名空間為系統命名空間時(默認為istio-system),策略為全局生效;
- 當策略命名空間不是系統命名空間,且沒有選擇工作負載,策略將只在當前命名空間生效并覆蓋全局策略;
- 當策略在非系統命名空間,且選擇了工作負載,則只對指定工作負載生效。
下面的配置定義了對foo命名空間下的服務的授權策略:
- 請求方的service account是cluster.local/ns/default/sa/sleep或者命名空間是test。
- 只能對foo命名空間下的GET /info接口或者POST /data接口。
- 請求必須經過jwt認證,且iss必須是//accounts.google.com。
- 其他情況全部拒絕訪問。
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: httpbin
namespace: foo
spec:
action: ALLOW
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/sleep"]
- source:
namespaces: ["test"]
to:
- operation:
methods: ["GET"]
paths: ["/info*"]
- operation:
methods: ["POST"]
paths: ["/data"]
when:
- key: request.auth.claims[iss]
values: ["//accounts.google.com"]
創建授權策略
- 進入服務網格控制臺,選擇 網格安全中心 -> 授權策略,選擇命名空間,列表頁默認展示當前命名空間下的授權策略。
- 選擇左上角 使用YAML創建,選擇配置模板,編輯保存策略即可。
修改授權策略
- 進入服務網格控制臺,選擇 網格安全中心 -> 授權策略,選擇命名空間,列表頁默認展示當前命名空間下的授權策略。
- 選擇右側操作欄的修改,編輯保存策略即可。
刪除授權策略
- 進入服務網格控制臺,選擇 網格安全中心 -> 授權策略,選擇命名空間,列表頁默認展示當前命名空間下的授權策略。
- 選擇右側操作欄的刪除,即可刪除選中的策略。
AuthorizationPolicy配置說明:
| 字段 | 類型 | 必選 | 說明 |
|---|---|---|---|
| selector | WorkloadSelector | No | 工作負載選擇器,選擇策略生效的工作負載。 |
| rules | Rule | No | 一組匹配規則,至少匹配其中一個才認為是匹配; 1,規則列表為空時,默認不匹配。 2,當Action為ALLOW時,實際行為是所有的請求都被拒絕。 |
| action | Action | No | 授權策略的行為,支持以下可選值: 1,ALLOW:如果匹配則允許訪問,action默認值。 2,DENY:如果匹配則拒絕訪問。 3,AUDIT:匹配的請求將被審計。 4,CUSTOM:使用外部授權服務對請求進行授權。 |
| provider | ExtensionProvider (oneof) | No | 指定外部授權服務,需要跟action=CUSTOM時一起使用;引用MeshConfig中的extension provider。 |
Rule:定義具體的授權規則
| 字段 | 類型 | 必選 | 說明 |
|---|---|---|---|
| from | From | No | 請求源匹配。 |
| to | To | No | 對目標的操作規則。 |
| when | Condition | No | 其他匹配條件。 |
Source:對應From.source字段,定義請求源的匹配規則,所有條件是and關系(需要同時滿足)
| 字段 | 類型 | 必選 | 說明 |
|---|---|---|---|
| principals | string | No | 匹配請求源端的SPIFFE信息,需要開啟mTLS。 |
| notPrincipals | string | No | 反向匹配請求源端的SPIFFE信息。 |
| requestPrincipals | string | No | 匹配請求源jwt信息,格式為ISS/SUB,需要開啟RequestAuthentication策略。 |
| notRequestPrincipals | string | No | 反向匹配請求源jwt信息。 |
| namespaces | string | No | 匹配請求源的命名空間,需要開啟mTLS。 |
| notNamespaces | string | No | 反向匹配請求源的命名空間。 |
| ipBlocks | string | No | 匹配請求源的ip。 |
| notIpBlocks | string | No | 反向匹配請求源的ip。 |
| remoteIpBlocks | string | No | 匹配請求的X-Forwarded-For頭部。 |
| notRemoteIpBlocks | string | No | 反向匹配請求的X-Forwarded-For頭部。 |
Operation:對應To.operation字段,定義了請求對目標端的操作信息
| 字段 | 類型 | 必選 | 說明 |
|---|---|---|---|
| hosts | string | No | 匹配請求的HTTP host,僅用于HTTP服務。 |
| notHosts | string | No | 反向匹配請求的HTTP host。 |
| ports | string | No | 匹配目標端口。 |
| notPorts | string | No | 反向匹配目標端口。 |
| methods | string | No | 匹配請求方法,僅用于HTTP服務。 |
| notMethods | string | No | 反向匹配請求方法。 |
| paths | string | No | 匹配請求路徑,僅用于HTTP服務; 對于gRPC服務,路徑為“/package.service/method”這種形式。 |
| notPaths | string | No | 反向匹配請求路徑。 |
Condition:定義了其他匹配條件
| 字段 | 類型 | 必選 | 說明 |
|---|---|---|---|
| key | string | Yes | 匹配的key。 |
| values | string | No | Value匹配列表,values和notValues至少配置一個。 |
| notValues | string | No | Value反向匹配列表,values和notValues至少配置一個。 |
說明存在多個授權策略的情況下優先匹配action=CUSTOM的策略,其次匹配action=DENY的策略,最后匹配action=ALLOW的策略,如果中間匹配到拒絕的場景,則拒絕請求,否則繼續執行后續策略。