授權原則
Istio 授權原則啟用網格中工作負載的存取控制。
授權原則支援 CUSTOM、DENY 和 ALLOW 動作以進行存取控制。當 CUSTOM、DENY 和 ALLOW 動作同時用於一個工作負載時,會先評估 CUSTOM 動作,然後評估 DENY 動作,最後評估 ALLOW 動作。評估由以下規則決定
- 如果存在任何符合請求的 CUSTOM 原則,則評估並在評估結果為拒絕時拒絕該請求。
- 如果存在任何符合請求的 DENY 原則,則拒絕該請求。
- 如果工作負載沒有 ALLOW 原則,則允許該請求。
- 如果有任何符合請求的 ALLOW 原則,則允許該請求。
- 拒絕該請求。
Istio 授權原則也支援 AUDIT 動作,以決定是否記錄請求。AUDIT 原則不影響是否允許或拒絕工作負載的請求。請求將完全根據 CUSTOM、DENY 和 ALLOW 動作來允許或拒絕。
如果工作負載上有符合請求的 AUDIT 原則,則會在內部將請求標記為應進行稽核。必須設定並啟用單獨的外掛程式,才能實際履行稽核決策並完成稽核行為。如果沒有啟用此類支援外掛程式,則不會稽核請求。
以下是 Istio 授權原則的範例
它將 action
設定為 ALLOW
,以建立允許原則。預設的 action 是 ALLOW
,但在原則中明確指定會很有幫助。
它允許來自以下來源的請求:
- 服務帳戶
cluster.local/ns/default/sa/sleep
或 - 命名空間
test
來存取具有以下條件的工作負載:
- 在路徑前綴為
/info
的情況下,使用GET
方法,或 - 在路徑為
/data
的情況下,使用POST
方法。
當請求具有由 https://#
發行的有效 JWT 權杖時。
任何其他請求都將被拒絕。
apiVersion: security.istio.io/v1
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: ["https://#"]
以下是另一個範例,將 action
設定為 DENY
,以建立拒絕原則。它拒絕來自 dev
命名空間對 foo
命名空間中所有工作負載的 POST
方法的請求。
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: httpbin
namespace: foo
spec:
action: DENY
rules:
- from:
- source:
namespaces: ["dev"]
to:
- operation:
methods: ["POST"]
以下是另一個範例,將 action
設定為 DENY
,以建立拒絕原則。它拒絕所有對 foo
命名空間中所有工作負載的 8080
連接埠使用 POST
方法的請求。
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: httpbin
namespace: foo
spec:
action: DENY
rules:
- to:
- operation:
methods: ["POST"]
ports: ["8080"]
當此規則應用於 TCP 流量時,method
欄位(以及所有基於 HTTP 的屬性)無法處理。對於 DENY
規則,遺失的屬性會被視為符合。這表示在上述範例中,所有在 8080
連接埠上的 TCP 流量都會被拒絕。如果我們移除 ports
匹配,則所有 TCP 流量都會被拒絕。因此,建議始終將 DENY
原則的範圍設定為特定連接埠,尤其是在使用 HTTP 屬性時 TCP 連接埠的授權原則。
以下授權原則將 action
設定為 AUDIT
。它將稽核任何對路徑前綴為 /user/profile
的 GET
請求。
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
namespace: ns1
name: anyname
spec:
selector:
matchLabels:
app: myapi
action: AUDIT
rules:
- to:
- operation:
methods: ["GET"]
paths: ["/user/profile/*"]
授權原則的範圍(目標)由「metadata/namespace」和可選的 selector
決定。
- 「metadata/namespace」指示原則適用於哪個命名空間。如果設定為根命名空間,則該原則適用於網格中的所有命名空間。
- 工作負載
selector
可以用來進一步限制原則的適用範圍。
例如,以下授權原則適用於命名空間 foo
中的所有工作負載。它不允許任何請求,實際上拒絕所有對命名空間 foo
中工作負載的請求。
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: allow-nothing
namespace: foo
spec:
{}
以下授權原則允許所有對命名空間 foo
中工作負載的請求。
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: allow-all
namespace: foo
spec:
rules:
- {}
以下授權原則適用於命名空間 bar
中包含標籤 app: httpbin
的工作負載。它不允許任何請求,實際上拒絕所有對選定工作負載的請求。
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: allow-nothing
namespace: bar
spec:
selector:
matchLabels:
app: httpbin
以下授權原則適用於網格中所有命名空間中包含標籤 version: v1
的工作負載。(假設根命名空間配置為 istio-system
)。
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: allow-nothing
namespace: istio-system
spec:
selector:
matchLabels:
version: v1
以下範例說明如何使用 實驗性註解 istio.io/dry-run
設定授權原則,以在不實際強制執行的情況下試執行該原則。
試執行註解可讓您在將授權原則應用於生產流量之前,更好地了解其影響。這有助於降低因不正確的授權原則而導致生產流量中斷的風險。如需更多資訊,請參閱試執行任務。
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: dry-run-example
annotations:
"istio.io/dry-run": "true"
spec:
selector:
matchLabels:
app: httpbin
action: DENY
rules:
- to:
- operation:
paths: ["/headers"]
AuthorizationPolicy
AuthorizationPolicy 可啟用對工作負載的存取控制。
規則
規則會比對來自來源清單的請求,這些來源會根據條件清單執行操作。當至少一個來源、一個操作和所有條件與請求匹配時,就會發生匹配。空規則始終會匹配。
規則中的任何字串欄位都支援完全比對、前綴比對、後綴比對和存在比對
- 完全比對:
abc
將比對值abc
。 - 前綴比對:
abc*
將比對值abc
和abcd
。 - 後綴比對:
*abc
將比對值abc
和xabc
。 - 存在比對:當值不為空時,
*
將會比對。
來源
來源指定請求的來源身分。來源中的欄位會以 AND 運算結合。
例如,如果主體是 admin
或 dev
,且命名空間是 prod
或 test
,且 IP 不是 203.0.113.4
,則以下來源會匹配。
principals: ["admin", "dev"]
namespaces: ["prod", "test"]
notIpBlocks: ["203.0.113.4"]
操作
操作指定請求的操作。操作中的欄位會以 AND 運算結合。
例如,如果主機具有後綴 .example.com
,且方法為 GET
或 HEAD
,且路徑沒有前綴 /admin
,則以下操作會匹配。
hosts: ["*.example.com"]
methods: ["GET", "HEAD"]
notPaths: ["/admin*"]
條件
條件指定其他必要的屬性。
AuthorizationPolicy.ExtensionProvider
Rule.From
From 包含來源列表。
Rule.To
To 包含操作列表。
AuthorizationPolicy.Action
Action 指定要執行的操作。
Name | 描述 |
---|---|
ALLOW | 僅在符合規則時允許請求。這是預設類型。 |
DENY | 如果請求符合任何規則,則拒絕該請求。 |
AUDIT | 如果請求符合任何規則,則稽核該請求。 |
CUSTOM | 如果符合的規則評估為 true,則 CUSTOM 動作允許擴展處理使用者請求。擴展會獨立且在原生 ALLOW 和 DENY 動作之前評估。當一起使用時,只有在所有動作都回傳允許時,才允許請求,換句話說,擴展不能繞過 ALLOW 和 DENY 動作做出的授權決定。擴展的行為由 MeshConfig 中宣告的具名提供者定義。授權策略透過指定提供者的名稱來引用擴展。擴展的一個範例用途是與自訂的外部授權系統整合,將授權決定委派給它。 以下授權策略適用於入口閘道,如果請求路徑具有前綴
|