本文說明使用情境感知存取權的最佳做法,協助您有效保護 Google Cloud 資源。情境感知存取權是一種安全防護方法,可根據使用者的驗證強度、裝置狀態、網路位置、地理位置或其他屬性,控管使用者存取權。這種做法不僅使用基本使用者身分進行安全存取,還能協助您實作零信任安全模式,提升整體安全防護能力。如要瞭解如何為不同類型的應用程式和資源導入情境感知存取權,請參閱「使用情境感知存取權保護應用程式和資源」。
為確保應用程式和 Google Cloud 資源安全無虞,您可以根據各種情境因素和組合,定義精細的存取權控管機制。您可以使用 Access Context Manager 定義存取政策,其中包含存取層級和服務參數。
本文適用於負責身分與存取權管理 (IAM),以及資源和應用程式安全性的資安專業人員。 Google Cloud 本文假設您已熟悉 Access Context Manager、Google Cloud和 IAM 管理。
情境感知存取權方法
在貴機構設定情境感知存取權時,您必須決定要將情境感知存取權控管機制套用至應用程式、資源,還是兩者皆是。如要做出這項決定,請先區分下列不同類型的應用程式和服務:
- 管理應用程式:使用者可透過這類應用程式管理或與Google Cloud 資源互動,例如 VM 執行個體、BigQuery 資料集或 Cloud Storage bucket。管理應用程式的例子包括 Google Cloud 控制台、Google Cloud CLI、Terraform 和 IAP Desktop。
- 企業應用程式:這類應用程式包括在Google Cloud 上執行的網頁應用程式,並使用 SAML 或 Identity-Aware Proxy (IAP) 進行驗證和授權。這類應用程式有時也稱為「內部應用程式」。業務線應用程式的例子包括 CRM 系統、資訊主頁和其他自訂應用程式。
- Google Workspace 和其他 Google 服務:這些服務由 Google 提供,但與 Google Cloud無關。
您可以根據業務線應用程式處理驗證和授權的方式,進一步區分這些應用程式:
- SAML:使用 Google Workspace SAML 進行驗證的應用程式。SaaS 應用程式通常屬於這類。
- IAP:您部署在 IAP 後方的自訂網頁應用程式。
- OAuth:使用 OAuth 2.0,並使用一或多個 Google Cloud OAuth 範圍的自訂網頁或電腦應用程式。
下方的流程圖顯示每種應用程式最適合的脈絡感知存取方式:
下圖顯示下列類型的應用程式:
管理應用程式:一般來說,保護管理應用程式所輔助存取的資源,比保護應用程式本身更重要。Google Cloud 請參考下列情境:
- 使用者無法存取任何資源。在這種情況下,使用者可能認為存取管理應用程式的價值不高。
- 使用者可以存取資源,但無法存取管理應用程式。在這種情況下,他們或許可以找到未遭封鎖的其他管理應用程式,並透過該應用程式存取資源。
因此,管理應用程式應以資源為中心。如要以最有效的方式對資源套用適當的情境感知存取權控管,請使用虛擬私有雲 (VPC) 服務範圍和適當的輸入規則。您可以搭配存取權繫結使用 VPC 服務範圍。
使用 OAuth 的業務線應用程式:對於這類應用程式,請務必保護應用程式本身的存取權,以及應用程式可能使用的資源。如要使用情境感知存取權保護應用程式,請使用存取權繫結。
使用 IAP 的業務線應用程式:雖然 IAP 使用 OAuth,但您無法使用存取權繫結,保護使用 IAP 驗證使用者的應用程式。請改用 IAM 條件保護這些應用程式。
使用 SAML 的業務線應用程式:與使用 OAuth 的業務線應用程式類似,保護應用程式本身以及應用程式可能使用的資源存取權,也是非常重要。如要保護這些應用程式,請使用 Google Workspace 情境感知存取權。
Google Workspace 和其他 Google 服務:對於這類應用程式,請務必保護應用程式本身的存取權,以及應用程式可能使用的資源。如要保護這些應用程式,請使用 Google Workspace 情境感知存取權。
管理存取層級
下列各節將說明管理存取層級時的建議做法。
建立可重複使用的存取層級
存取層級是全域資源,適用於 Google Cloud 機構中的所有資源。因此,建議盡量減少存取層級總數,並確保這些層級有意義,且適用於多項資源。請考量下列事項:
- 請勿在存取層級名稱中嵌入特定資源或應用程式的名稱。
- 請勿在存取層級中編碼任何資源或應用程式專屬需求。
- 使用可判斷特定使用者或裝置姿勢的名稱,例如
Fully Trusted Device
。
使用複合存取層級
為協助減少維護負擔,並確保子網路或區域變更時的一致性,請勿在多個存取層級中重複相同的需求。而是讓存取層級相互依附。
舉例來說,請勿在多個存取層級中列出相同的受信任地區或 IP 子網路,而是建立名為 Trusted location
的額外存取層級。這個 Trusted location
層級可做為其他存取層級的依附元件。
在存取層級中排除緊急存取使用者
為避免意外遭到封鎖,建議您從所有存取層級中排除至少一位緊急存取使用者。如要確保豁免適用於您套用存取層級的所有應用程式和資源,請在存取層級中設定豁免:
- 新增一個條件,定義一般需求。
- 新增另一個條件,並
members
要求列出一或多位緊急存取使用者。 - 將合併函式設為
OR
條件,這樣使用者只需要符合其中一個條件即可。
舉例來說,下列存取層級會限制存取三個區域,但使用者 emergencyaccess@example.net
可免除這項規定:
{
"name": "accessPolicies/…",
"title": "Example access level",
"basic": {
"conditions": [
{
"members": [
"user:emergencyaccess@example.net"
]
},
{
"regions": [
"DE",
"AU",
"SG"
]
}
],
"combiningFunction": "OR"
}
}
設定修復訊息
貴機構的使用者可能不知道,他們的位置、裝置和其他因素可能會影響是否能存取特定應用程式。為讓使用者瞭解情況並減少支援要求,請設定自訂修復訊息,提供使用者恢復存取權的步驟。
管理存取權繫結
存取權繫結可讓您為使用一或多個 Google Cloud 範圍的 OAuth 應用程式設定情境感知存取權。存取權繫結也是為業務線應用程式強制執行情境感知存取權的有效方法。
下列各節說明使用存取權繫結時的建議做法。
使用單一存取權繫結和範圍設定
使用存取權繫結時,請務必考量下列限制:
- 每個 Cloud Identity 群組最多只能有一個存取權繫結。
- 如果使用者適用多個存取權繫結,系統會優先採用限制較少的存取權繫結。
為配合這兩項限制,請使用適用於所有使用者的單一存取權繫結:
- 建立群組,自動納入 Cloud Identity 或 Google Workspace 帳戶的所有使用者。
- 建立或使用存取繫結,將預設存取層級與群組建立關聯。預設存取層級應適用於大多數使用者、裝置和應用程式。
- 如有需要,請使用範圍存取權設定 (
scopedAccessSettings
),為所選應用程式指派較弱的存取層級。
使用嚴格的預設存取層級
如果存取權繫結同時指定範圍存取權設定和預設存取層級,系統會使用 OR
語意合併這兩個存取層級。這項行為會產生下列影響:
- 使用者只需符合其中一個存取層級的條件,就能存取 OAuth 應用程式。
- 為 OAuth 應用程式新增範圍存取權設定時,您可以降低有效存取權需求。
- 如果範圍存取設定使用的存取層級比存取權繫結的預設存取層級更嚴格,則不會生效。
為存取權繫結選取預設存取層級時,建議您採取下列做法:
- 使用嚴格存取層級做為預設存取層級。
- 使用範圍存取設定,為個別 OAuth 應用程式套用較低的存取層級。
建議您在預設存取層級中新增下列部分或所有限制:
- 瀏覽器和裝置限制:規定使用者必須透過受管理的 Chrome 瀏覽器和管理員核准的裝置存取應用程式。
- 地理區域限制:如果貴機構只在特定區域營運,請使用區域限制,只將這些區域納入允許清單。否則,您可以透過區域限制,禁止存取受到制裁的地區,或因其他原因不相關的地區。
- IP 網路限制:如果貴機構的使用者只能透過特定網路存取Google Cloud ,或是貴機構使用常見的輸出 Proxy,您可以加入 IP 網路限制。
請勿使用需要憑證式驗證的存取層級做為預設存取層級。憑證式驗證最適合 VPC 服務範圍的連入規則。
依應用程式管理例外狀況
如要管理預設存取層級的例外狀況,請為個別應用程式新增例外狀況,而非為使用者或群組新增例外狀況。
嚴格的預設存取層級可能適用於大多數應用程式,但不適用於所有應用程式:
- 有些應用程式可能較不敏感,您需要讓不符合預設存取層級的使用者也能存取。例如,合作夥伴、訪客或校友必須能夠存取的應用程式。
- 部分應用程式可能與預設存取層級強制執行的其中一項限制不相容。
如要為個別應用程式免除預設存取層級,請使用範圍存取設定。針對每個受影響的應用程式,新增範圍設定並指派更適合該應用程式的存取層級。
請勿建立額外的存取權繫結,以依使用者或群組管理例外狀況。 額外的存取權繫結可能會導致下列問題:
- 您可能會不慎建立重疊的存取權繫結。
- 您可能難以判斷個別應用程式是否有效強制執行情境感知存取權規定。
避免存取繫結重疊
存取權繫結與群組相關聯。如果使用者同時屬於多個群組,則可能適用多個存取權繫結。在這種情況下,這些存取繫結的內容感知存取權需求會使用 OR
語意合併。
這項行為可能會造成意想不到的影響。舉例來說,如果允許使用者加入其他群組,某些應用程式的保護機制可能會遭到破壞。
為避免發生這種情況,建議您避免存取繫結重疊:
- 盡量減少存取繫結數量,最好只有一個。
- 如需多個存取權繫結,請將這些繫結指派給互斥的群組。
防止群組遭到未經授權的修改
根據預設,Cloud Identity 允許群組成員退出群組。這種行為適用於存取權群組,但對於有相關聯存取權繫結的群組而言,卻會造成問題。如果使用者離開與存取權繫結相關聯的群組,就不再受存取權繫結所強制執行的情境感知存取權要求限制。因此,使用者可以離開群組,規避情境感知存取權規定。
設定存取繫結時,請一律使用強制執行群組,且不允許使用者退出強制執行群組。或者,您也可以建立群組,自動納入 Cloud Identity 或 Google Workspace 帳戶的所有使用者。
使用存取權繫結時,禁止外部使用者存取
存取權繫結只會影響機構所屬 Cloud Identity 或 Google Workspace 帳戶的使用者。 Google Cloud 如果這些使用者嘗試存取其他 Google Cloud 機構的資源,仍須遵守貴機構Google Cloud 的存取權繫結。在使用者上套用存取權繫結,與其他 Cloud Identity 環境中的行為不同。
如果您允許外部 Cloud Identity 或 Google Workspace 帳戶的使用者存取您 Google Cloud機構中的資源,存取權繫結對這些使用者不會有任何影響。
為確保存取繫結有效,請勿授予外部使用者存取您 Google Cloud 機構中任何應用程式或資源的權限。此外,請勿將外部使用者新增至 Cloud Identity 或 Google Workspace 帳戶中的群組。
使用個別的存取權繫結來控管工作階段長度
除了情境感知存取權控管外,您也可以使用存取權繫結,管理瀏覽器工作階段和 OAuth 權杖的長度。
使用存取權繫結控管情境感知存取權時,建議避免存取權繫結重疊。
使用存取權繫結控管工作階段長度時,請勿建立重疊的存取權繫結。如果使用者適用多個這類存取權繫結,只有最後更新的存取權繫結會生效,這可能會導致非預期的結果。
為避免發生這類非預期的結果,請使用個別存取繫結來控管工作階段長度。
禁止使用者以服務帳戶身分執行操作
存取權繫結適用於 Cloud Identity 和 Google Workspace 使用者,但不會影響服務帳戶。如果允許使用者驗證身分並以服務帳戶身分執行動作,他們可能就能規避情境感知存取控制項。
使用者可以透過服務帳戶執行動作,這會帶來其他風險。如要讓使用者暫時提升權限,建議使用 Privileged Access Manager。請勿使用服務帳戶模擬功能,除非是為了開發目的。
如要進一步瞭解如何保護服務帳戶和服務帳戶金鑰,請參閱「使用服務帳戶的最佳做法」和「管理服務帳戶金鑰的最佳做法」。
虛擬私有雲服務範圍的 Ingress 規則
輸入規則可讓您從服務範圍外,授予範圍內資源的情境感知存取權。VPC 服務範圍和輸入規則可保護 Google Cloud 資源,而非個別應用程式。因此,含有輸入規則的服務範圍非常適合對管理工具 (例如 Google Cloud 控制台和 gcloud CLI) 執行情境感知存取權。
如要進一步瞭解虛擬私有雲服務範圍,以及相關最佳做法,請參閱「啟用 VPC Service Controls 的最佳做法」。
下列各節說明使用 Ingress 規則強制執行情境感知存取權時,建議採取的做法。
將 IAP TCP 轉送功能納入受限制的服務
允許使用者透過 SSH 或 RDP 連線至服務邊界中的 VM 執行個體,可能會有下列風險:
- 由於使用 SSH 和 RDP 不會存取任何 Google API,因此連線不會套用連入規則。
- 使用者建立 SSH 或 RDP 工作階段後,從該工作階段內啟動的任何 API 存取作業,都會視為源自服務範圍內。因此,您的連入規則不適用於從該工作階段內啟動的任何 API 存取。
為降低這些風險,請只允許透過 IAP TCP 轉送存取 VM 的 SSH 和 RDP:
- 將
iaptunnel.googleapis.com
服務設為受限制的服務。 - 設定防火牆規則,透過 IAP TCP 轉送限制對 SSH 和 RDP 連接埠的存取。
使用 IAP TCP 轉送功能,確保 VPC 服務範圍的連入規則適用於每次嘗試進行 SSH 和 RDP 存取。
為機密服務範圍啟用以憑證為準的存取權
根據預設,Google 存取權杖和更新權杖不會繫結至裝置,因此可能遭竊或遭到重送攻擊。為協助降低這些風險,您可以採用憑證式存取權 (CBA),限制只有具備信任的 X.509 憑證的裝置才能存取。
CBA 有助於加強安全性,但這種做法也會增加額外的基礎架構需求:
- 使用者的裝置必須具備由內部憑證授權單位核發的 X.509 憑證。
- 與憑證相關聯的金鑰必須以防止未經授權匯出的方式儲存。
- 用戶端應用程式必須使用相互傳輸層安全標準 (mTLS) 驗證,才能連線至Google Cloud API。
使用 CBA 保護最敏感的 VPC 服務範圍存取權。這種做法可讓您在安全強度與最低基礎架構需求和整體影響之間取得平衡。
貢獻者
作者:Johannes Passing | 雲端解決方案架構師
其他貢獻者:Ido Flatow | 雲端解決方案架構師