查看 Apigee Edge 說明文件。
前往
Apigee X說明文件。 資訊
結果
存取權控管政策可讓您依據特定 IP 允許或拒絕對 API 的存取權 讓我們看看 DNS 解析 進一步探索內部和外部位址
影片:觀看這部短片,進一步瞭解如何允許或拒絕 就能依特定 IP 位址存取您的 API
雖然您可以在 API Proxy 流程的任何位置附加這項政策,不過建議您還是建議您 在流程一開始時檢查 IP 位址 ( 要求 / ProxyEndpoint / PreFlow), 以及驗證或配額檢查
範例
下列 IPv4 範例中的遮罩值可識別八種 (8、16、24、32) 中的
位元) 允許或拒絕存取時,才會考慮比對規則。預設值為 32。詳情請參閱
元素參考資料中的 mask
屬性瞭解詳情
可能不準確或不適當
拒絕 198.51.100.1
<AccessControl name="ACL"> <IPRules noRuleMatchAction = "ALLOW"> <MatchRule action = "DENY"> <SourceAddress mask="32">198.51.100.1</SourceAddress> </MatchRule> </IPRules> </AccessControl>
拒絕所有來自用戶端位址的要求:198.51.100.1
允許來自其他用戶端位址的要求。
使用變數拒絕
<AccessControl name="ACL"> <IPRules noRuleMatchAction = "ALLOW"> <MatchRule action = "DENY"> <SourceAddress mask="{kvm.mask.value}">{kvm.ip.value}</SourceAddress> </MatchRule> </IPRules> </AccessControl>
假設您使用鍵/值對應 (KVM) 儲存遮蓋和 IP 的值,
這是在執行階段期間變更 IP 和遮蓋的便利方法,無需更新
並重新部署 API Proxy您可以使用 KeyValueMapOperations 政策進行擷取
包含 kvm.mask.value
和
kvm.ip.value
(假設這就是您在 KVM 政策中將變數命名為變數)
,其中包含 KVM 的遮罩值和 IP 值)。
如果您擷取的值是 24
的遮罩,且 198.51.100.1
值
對於 IP 位址,AccessControl 政策會拒絕來自 198.51.100 的所有要求。*
允許所有其他用戶端位址。
拒絕 198.51.100。*
<AccessControl name="ACL"> <IPRules noRuleMatchAction = "ALLOW"> <MatchRule action = "DENY"> <SourceAddress mask="24">198.51.100.1</SourceAddress> </MatchRule> </IPRules> </AccessControl>
拒絕所有來自用戶端位址的要求:198.51.100。*
允許來自其他用戶端位址的要求。
198.51.*。
<AccessControl name="ACL"> <IPRules noRuleMatchAction = "ALLOW"> <MatchRule action = "DENY"> <SourceAddress mask="16">198.51.100.1</SourceAddress> </MatchRule> </IPRules> </AccessControl>
拒絕來自用戶端位址的所有要求:198.51.*。*
允許來自其他用戶端位址的要求。
拒絕 198.51.100.*,允許 192.0.2.1
<AccessControl name="ACL"> <IPRules noRuleMatchAction = "ALLOW"> <MatchRule action = "ALLOW"> <SourceAddress mask="32">192.0.2.1</SourceAddress> </MatchRule> <MatchRule action = "DENY"> <SourceAddress mask="24">198.51.100.1</SourceAddress> </MatchRule> </IPRules> </AccessControl>
拒絕所有來自用戶端位址的要求:198.51.100.*,但允許 192.0.2.1。
允許來自其他用戶端位址的要求。
允許 198.51.*。*
<AccessControl name="ACL"> <IPRules noRuleMatchAction = "DENY"> <MatchRule action = "ALLOW"> <SourceAddress mask="16">198.51.100.1</SourceAddress> </MatchRule> </IPRules> </AccessControl>
允許所有來自以下地址的要求:198.51.*。*
拒絕來自其他用戶端位址的要求。
允許多個 IP
<AccessControl name="ACL"> <IPRules noRuleMatchAction = "DENY"> <MatchRule action = "ALLOW"> <SourceAddress mask="24">198.51.100.1</SourceAddress> <SourceAddress mask="24">192.0.2.1</SourceAddress> <SourceAddress mask="24">203.0.113.1</SourceAddress> </MatchRule> </IPRules> </AccessControl>
允許來自用戶端位址的要求:198.51.100。*192.0.2.*203.0.113。*
拒絕所有其他地址。
拒絕多個 IP
<AccessControl name="ACL"> <IPRules noRuleMatchAction = "ALLOW"> <MatchRule action = "DENY"> <SourceAddress mask="24">198.51.100.1</SourceAddress> <SourceAddress mask="24">192.0.2.1</SourceAddress> <SourceAddress mask="24">203.0.113.1</SourceAddress> </MatchRule> </IPRules> </AccessControl>
拒絕來自用戶端位址的要求:198.51.100。*192.0.2.*203.0.113。*
允許使用其他所有地址。
允許多個 IP,拒絕多個 IP
<AccessControl name="ACL"> <IPRules noRuleMatchAction = "DENY"> <MatchRule action = "DENY"> <SourceAddress mask="24">198.51.100.1</SourceAddress> <SourceAddress mask="24">192.0.2.1</SourceAddress> <SourceAddress mask="24">203.0.113.1</SourceAddress> </MatchRule> <MatchRule action = "ALLOW"> <SourceAddress mask="16">198.51.100.1</SourceAddress> <SourceAddress mask="16">192.0.2.1</SourceAddress> <SourceAddress mask="16">203.0.113.1</SourceAddress> </MatchRule> </IPRules> </AccessControl>
允許:198.51.*。*192.0.*。*203.0.*。*
拒絕許可清單中的子集:198.51.100。*192.0.2.*203.0.113。*
使用須知
除了保護 API 不受惡意 IP 侵擾,存取權控管政策也 可讓您掌控合法的 IP 存取權舉例來說,如果您只想在 讓企業能存取測試環境中公開的 API。您可以 您內部網路的 IP 位址範圍在家工作的開發人員 存取這些 API
存取權控管政策的設定與執行涉及下列事項:
- 定義一組比對規則,其中包含一組相關聯的兩項動作 (ALLOW 或 DENY) 各自的經驗值
- 為每項比對規則指定 IP 位址 (SourceAddress 元素)。
- 請參閱政策如何選擇要評估的 IP 位址。 ,決定要處理訊息中的哪個 IP 位址。
- 設定每個 IP 位址的遮罩。您可以根據遮罩值,允許或拒絕存取 IP 位址請參閱關於使用 CIDR 標記法的 IP 遮蓋。
- 指定規則的測試順序。
- 所有比對規則都會按照指定順序執行。規則相符時,
便會執行對應的動作,並略過下列比對規則。
- 如果同一項規則同時設定了「ALLOW」和「DENY」動作,則 就會觸發後續規則 (與其他動作一起) 略過。
政策如何選擇要評估的 IP 位址
要求中的 IP 位址可能來自多個來源。舉例來說,
True-Client-IP
郵件標頭可能含有 IP 位址,而
X-Forwarded-For
標頭可能包含一或多個 IP 位址。這個區段
說明如何設定 AccessControl 政策以評估您指定的 IP 位址
AccessControl 政策會依據以下邏輯決定要使用哪個 IP 位址 請評估:
1. True-Client-IP 標頭
這項政策會先檢查 True-Client-IP
標頭中的 IP 位址。如果
標頭包含有效的 IP 位址,政策會評估該位址。
2. X-Forwarded-For 標頭
如果沒有 True-Client-IP
標頭,或已設定
<IgnoreTrueClientIPHeader> 元素
是,這項政策會評估 X-Forwarded-For
標頭中的 IP 位址。
邊緣會自動填入 X-Forwarded-For
標頭
以及從上次外部 TCP 握手接收的 IP 位址 (例如用戶端 IP 或
或 Cloud Router 路由器如果標頭中有多個 IP 位址,
可能是處理要求的伺服器鏈。不過,位址清單
也可能包含假冒的 IP 位址那麼,政策如何判斷要把
要評估?
貴機構的設定和政策設定會決定
政策評估的 X-Forwarded-For
個位址。
首先,請檢查 feature.enableMultipleXForwardCheckForACL
屬性是否含有
是在貴機構中設定。您可以使用
取得機構 API 進行確認。然後執行下列步驟:
- 如果
feature.enableMultipleXForwardCheckForACL
組織的屬性清單,代表該屬性已設為 false (預設值)。將這個屬性設為 false 之後,政策會評估 最後一個地址 (顯示於 追蹤工具),也就是 IP 位址 從上次外部 TCP 交握所接收的邊緣。 - 如果貴機構的
feature.enableMultipleXForwardCheckForACL
設為 true,請設定 <ValidateBasedOn> 元素,判斷政策要評估的 IP 位址。
變更 feature.enableMultipleXForwardCheckForACL
屬性
Edge 機構管理員可以使用
更新機構屬性 API 即可設定
feature.enableMultipleXForwardCheckForACL
屬性。
以下 API 範例會在 Private Cloud 設定 Edge 中的屬性。 如果貴機構已設定其他屬性,請務必一併加入這些資源。 否則就會遭到移除。
curl -u email:password -X POST -H "Content-type:application/xml" http://host:8080/v1/o/myorg -d \ "<Organization type="trial" name="MyOrganization"> <DisplayName>MyOrganization</DisplayName> <Properties> <Property name="feature.enableMultipleXForwardCheckForACL">true</Property> <!-- Include other existing properties as well. --> </Properties> </Organization>"
在 Edge for Private Cloud 中
feature.enableMultipleXForwardCheckForACL
資源,
您必須重新啟動訊息處理工具,如
啟動/停止/重新啟動個別元件。
X-Forwarded-For Apigee 數據分析中的維度
邊緣 Analytics 會將 X-Forwarded-For
標頭的值寫入
x_forwarded_for_ip
維度。目的是找出產生的用戶端 IP
傳送要求給 Edge,請使用 ax_true_client_ip
中的值,或
ax_resolved_client_ip
個維度。詳情請見
Analytics 指標、維度
和篩選器參考資料。
關於以 CIDR 標記法遮蓋的 IP
CIDR 標記法 (無類別跨網域路由) 是一種指出 IP 位址範圍的方式 例如遮蓋功能、安全雜湊、權杖化IPv4 和 IPv6 皆適用。以下說明運作方式我們將使用 IPv4 來簡化範例
IP 位址是一組以半形句號分隔的數字群組,以二進位表示,每個群組都是 特定位元數 (IPv4 為 8,IPv6 為 16)。IPv4 位址 198.51.100.1 看起來像這樣 以二進位表示:
11000110.00110011.01100100.00000001
亦即 4 個 8 位元群組 (總共 32 位元)。在 CIDR 中,您可以新增 /number (1-32) 附加至 IP 位址,如下所示:
198.51.100.1/24
在此範例中,24 是 mask
屬性要使用的數字
政策值。
此標記意指「完全保持前 24 位元,剩餘位元可以 0 到 255 之間的任何值。」例如:
保持原樣 | 最後一個群組可能的值 |
---|---|
198.51.100。 | 0 至 255 人 |
請注意,遮蓋會在群組 3 的結尾發生。這樣一來,整體設計也變得美觀 就是建立遮罩的本質:198.51.100.*在大多數情況下,使用 8 的倍數 (IPv4) 和 16 (IPv6) 可讓您的遮罩層級:
IPv4:8、16、24、32
IPv6:16、32、48、64、80、96、112、128
不過,您可以提供其他號碼,以便進行更精細的控管,而這牽涉到一些二進位檔 計算。以下是使用 30 的遮罩範例,如 198.51.100.1/30,最後 1 是 00000001,以二進位表示:
保持原樣 | 可能的值 |
---|---|
11000110.00110011.01100100.000000 (前 30 位元) | 00000000、00000001、00000010 或 00000011 |
198.51.100。 | 0、1、2 或 3 |
在此範例中,設定為 <SourceAddress
mask="30">198.51.100.1</SourceAddress>
時,將允許下列 IP (或
視您的規則而定):
- 198.51.100.0
- 198.51.100.1
- 198.51.100.2
- 198.51.100.3
元素參照
元素參照會說明存取權控管政策的元素和屬性。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AccessControl async="false" continueOnError="false" enabled="true" name="Access-Control-1"> <DisplayName>Access Control 1</DisplayName> <IPRules noRuleMatchAction = "ALLOW"> <MatchRule action = "ALLOW"> <SourceAddress mask="32">198.51.100.1</SourceAddress> </MatchRule> <MatchRule action = "DENY"> <SourceAddress mask="24">198.51.100.1</SourceAddress> </MatchRule> </IPRules> <ValidateBasedOn>X_FORWARDED_FOR_ALL_IP</ValidateBasedOn> </AccessControl>
<AccessControl>屬性
<AccessControl async="false" continueOnError="false" enabled="true" name="Access-Control-1">
下表說明所有政策父項元素的共同屬性:
屬性 | 說明 | 預設 | 存在必要性 |
---|---|---|---|
name |
政策的內部名稱。 視需要使用 |
不適用 | 必填 |
continueOnError |
如果設為「 如果設為 |
false | 選用 |
enabled |
如要強制執行政策,請設為 設為 |
true | 選用 |
async |
此屬性已淘汰。 |
false | 已淘汰 |
<DisplayName>元素
除 name
屬性外,一併使用
管理 UI Proxy 編輯器,使用不同的自然語言名稱。
<DisplayName>Policy Display Name</DisplayName>
預設 |
不適用 如果省略這個元素,政策的 |
---|---|
存在必要性 | 選用 |
類型 | 字串 |
<IgnoreTrueClientIPHeader>元素
如果設為 True,這項政策會忽略 True-Client-IP
標頭。
並評估 X-Forwarded-For
標頭中的 IP 位址,按照以下指示
您設定的 X-Forwarded-For 評估行為。
<AccessControl async="false" continueOnError="false" enabled="true" name="Access-Control-1"> <DisplayName>Access Control-1</DisplayName> <IgnoreTrueClientIPHeader>true</IgnoreTrueClientIPHeader> ... </AccessControl>
預設 | false |
---|---|
存在必要性 | 選用 |
類型 | 布林值 |
<IPRules>元素
父項元素,其中包含允許或拒絕 IP 位址的規則。
noRuleMatchAction
屬性可讓您定義如何處理
或是不在比對規則的涵蓋範圍內
<IPRules noRuleMatchAction = "ALLOW">
預設 | 不適用 |
---|---|
存在必要性 | 選用 |
類型 | 不適用 |
屬性
屬性 | 說明 | 類型 | 預設 | 存在必要性 |
---|---|---|---|---|
noRuleMatchAction |
指定的比對規則未解決時,要採取的動作 (允許或拒絕存取)
(不相符)。
有效值:ALLOW 或 DENY
|
字串 | 允許 | 必填 |
<IPRules>/<MatchRule>元素
如果 IP 位址與您的 SourceAddress 相符,要採取的動作 (允許或拒絕存取) 定義。
<IPRules noRuleMatchAction = "ALLOW"> <MatchRule action = "ALLOW"> <SourceAddress mask="32">198.51.100.1</SourceAddress> </MatchRule> <MatchRule action = "DENY"> <SourceAddress mask="24">198.51.100.1</SourceAddress> </MatchRule> </IPRules>
預設 | 不適用 |
---|---|
存在必要性 | 選用 |
類型 | 不適用 |
屬性
屬性 | 說明 | 類型 | 預設 | 存在必要性 |
---|---|---|---|---|
動作 |
指定的比對規則未解決時,要採取的動作 (允許或拒絕存取) (不相符)。 有效值:ALLOW 或 DENY |
字串 | 允許 | 必填 |
<IPRules>/<MatchRule>/<SourceAddress>元素
用戶端的 IP 位址範圍。
有效值:有效的 IP 位址 (點號十進位標記法)。如需萬用字元行為,請使用
mask
屬性。
<IPRules noRuleMatchAction = "ALLOW"> <MatchRule action = "ALLOW"> <SourceAddress mask="{variable}">198.51.100.1</SourceAddress> </MatchRule> <MatchRule action = "DENY"> <SourceAddress mask="24">{variable}</SourceAddress> </MatchRule> </IPRules>
如上一個範例所示,SourceAddress
元素也支援
郵件範本
mask
屬性或 IP 位址
因此您可以使用
API Proxy 流程。
舉例來說,您可以將 IP 位址儲存在鍵/值對應 (KVM) 中,並使用
KeyValueMapOperations 政策:擷取 IP 位址並指派給變數 (例如
kvm.ip.value
)。接下來,您可以將該變數用於 IP 位址:
<SourceAddress mask="24">{kvm.ip.value}</SourceAddress>
透過變數設定遮罩和/或 IP 位址,可讓您靈活地變更 不必修改並重新部署 API Proxy。
預設 | 不適用 |
---|---|
存在必要性 | 選用 |
類型 | 字串 (僅限單一 IP 位址) |
屬性
屬性 | 說明 | 類型 | 預設 | 存在必要性 |
---|---|---|---|---|
掩蓋 |
等於下列 CIDR 標記法: 198.51.100.1/24 有效值: IPv4:1 至 32 IPv6:1-128 如果值為 0,僅對 IP 0.0.0.0 有效,因此不切實際。 使用變數設定遮罩
|
整數 | 不適用 | 必填 |
<ValidateBasedOn>元素
X-Forwarded-For
HTTP 標頭含有多個 IP 時
位址,請使用這個 ValidateBasedOn
元素控制 IP 位址
。
除非您確定 IP 位址有效性,否則使用這個方法才能評估 IP 位址
您要求評估的 IP 位址數量舉例來說,假設您選擇全面評估
使用 X-Forwarded-For
標頭中的 IP 位址,就必須能夠信任
以及/或是設定完整的 DENY 或 ALLOW 規則,
IP 會呼叫您的 API Proxy。
標頭中最左側的 IP 位址屬於用戶端,最右側的 IP 位址為伺服器。 將要求轉送至目前服務。最右側的或最後一個 IP 位址 是指上次外部 TCP 交握所接收的位址邊緣。
您只要在這個元素中輸入值,就可以決定是否要檢查 Google 日曆中的所有 IP 位址 標頭 (預設)、僅限第一個 IP 位址或最後一個 IP 位址。
<AccessControl async="false" continueOnError="false" enabled="true" name="Access-Control-1"> <DisplayName>Access Control 1</DisplayName> <IPRules noRuleMatchAction = "ALLOW"> <MatchRule action = "DENY"> <SourceAddress mask="32">198.51.100.1</SourceAddress> </MatchRule> </IPRules> <ValidateBasedOn>X_FORWARDED_FOR_ALL_IP</ValidateBasedOn> </AccessControl>
預設 | X_FORWARDED_FOR_ALL_IP |
---|---|
存在必要性 | 選用 |
有效值 |
|
結構定義
每種政策類型都是由 XML 架構 (.xsd) 定義。僅供參考 您可以在 GitHub 找到政策結構定義。
錯誤參考資料
本節說明在這項政策觸發錯誤時,所傳回的錯誤代碼和錯誤訊息,以及 Edge 所設定的錯誤變數。 請務必瞭解這份資訊,以便瞭解您是否要擬定錯誤規則, 處理錯誤詳情請參閱這篇文章 瞭解政策錯誤和處理方式 發生錯誤
執行階段錯誤
執行政策時,可能會發生這些錯誤。
錯誤程式碼 | HTTP 狀態 | 原因 | 修正 |
---|---|---|---|
accesscontrol.IPDeniedAccess |
403 | 用戶端 IP 位址或已傳入的 IP 位址
在 API 要求中,與以下位置的 <SourceAddress> 元素中指定的 IP 位址相符:
存取權控管政策的 <MatchRule> 元素,以及action
<MatchRule> 元素已設為 DENY 。 |
build |
錯誤變數
系統會在發生執行階段錯誤時設定這些變數。詳情請參閱「政策錯誤專用變數」。
錯誤回應範例
{ "fault":{ "faultstring":"Access Denied for client ip : 52.211.243.3" "detail":{ "errorcode":"accesscontrol.IPDeniedAccess" } } }
錯誤規則範例
<FaultRule name="IPDeniedAccess"> <Step> <Name>AM-IPDeniedAccess</Name> <Condition>(fault.name Matches "IPDeniedAccess") </Condition> </Step> <Condition>(acl.failed = true) </Condition> </FaultRule>