在 Memorystore for Redis Cluster 中使用存取控制清單 (ACL) 政策,即可確保叢集存取安全。您可以限制使用者和服務存取特定金鑰、指令和 Pub/Sub 管道,啟用精細的安全防護機制。
以下是使用 ACL 政策確保叢集存取安全的用途範例:
- 提供角色式存取控管 (RBAC):為應用程式的不同元件建立不同的使用者設定檔。舉例來說,網頁前端可以具備唯讀存取權,而背景工作服務則具備讀取/寫入存取權。避免資料意外外洩或遭到竄改。
- 避免破壞性指令:限制高階管理員才能使用危險指令,例如
FLUSHALL、FLUSHDB或CONFIG。確保資料完整性,避免軟體錯誤或人為錯誤。 提供多租戶應用程式安全性:為不同微服務或外部合作夥伴使用不同的 ACL 使用者。確保某項服務的使用者無法讀取或修改其他服務擁有的金鑰。
Memorystore for Redis Cluster 不提供資源層級的多租戶功能。即使鍵空間已分割,單一服務仍可能耗用不成比例的記憶體或 CPU 資源。
執行唯讀分析和監控:指派專屬使用者,只能使用
GET或其他唯讀指令 (例如SCAN或TYPE),用於分析引擎或資訊主頁應用程式。防止意外寫入或刪除資料。安全資料庫金鑰:限制應用程式只能與符合特定模式的金鑰互動 (例如
app1:*)。這可在叢集中提供資料的邏輯分離。停用 Lua 指令碼:使用 ACL 政策管理叢集的 Lua 指令碼功能。停用或限制 Lua 指令碼可協助調整效能、簡化叢集功能,或遵守貴機構的安全防護指南。
事前準備
開始使用 ACL 政策前,請先完成本節中的操作說明。
使用 Google Cloud 控制台、Google Cloud CLI 和 API
如要使用 Google Cloud 控制台、Google Cloud CLI 和 API,請執行下列步驟:
- 在 Google Cloud 控制台的專案選擇器頁面中,選取或建立 Google Cloud 專案。
注意:如果您不打算保留在這項程序中建立的資源,請建立新專案,而不要選取現有專案。這樣在完成這些步驟之後,您就可以刪除專案,並移除與該專案相關聯的所有資源。
前往專案選取器 - 請確認您已為專案啟用計費功能。瞭解如何檢查專案是否已啟用計費功能。
注意:如果您先前已安裝 gcloud CLI,請執行
gcloud components update,確認目前使用的是最新版本。您至少需要 gcloud CLI440.0.0版,才能存取 Memorystore for Redis Cluster gcloud CLI 指令。-
啟用 Memorystore for Redis API。
Memorystore for Redis -
啟用 Network Connectivity API。
Network Connectivity API -
啟用 Service Consumer Management API。
Service Consumer Management API
指派 Memorystore for Redis Cluster 角色
請確認您或所用的使用者帳戶具備執行所需動作的必要權限。
如要執行所有 ACL 政策作業,請使用 Redis 管理員 (roles/redis.admin) 和 Redis 編輯者 (roles/redis.editor) 角色。如要僅查看 ACL 政策,請使用 Redis 檢視者 (roles/redis.viewer) 角色。
指派 Memorystore for Redis Cluster 權限
除了 Redis 管理員、Redis 編輯者和 Redis 檢視者角色,如要在 Memorystore for Redis Cluster 中使用 ACL 政策,您還需要下列權限:
| 動作 | 權限 |
|---|---|
| 建立 ACL 政策 | redis.aclPolicies.create |
| 將 ACL 政策指派給叢集 | redis.clusters.update |
| 查看 ACL 政策的相關資訊 | redis.aclPolicies.list |
| 查看 ACL 政策的相關資訊 | redis.aclPolicies.get |
| 查看 ACL 政策修訂版本資訊 | redis.aclPolicyRevisions.list |
| 查看 ACL 政策修訂版本資訊 | redis.aclPolicyRevisions.get |
| 修改 ACL 政策 | redis.aclPolicies.update |
| 從叢集移除 ACL 政策 | redis.clusters.update |
| 刪除 ACL 政策 | redis.aclPolicies.delete |
建立 ACL 政策
在 Memorystore for Redis Cluster 中建立 ACL 政策,即可限制使用者存取特定鍵、指令和 Pub/Sub 管道,進而提升叢集安全性。
您可以使用 gcloud CLI 建立 ACL 政策。
gcloud
如要建立 ACL 政策,請使用 gcloud redis acl-policies create 指令。
gcloud redis acl-policies create ACL_POLICY_NAME \ --region=REGION \ --rules=rule="on ~* +@all",username="lucian" \ --rules=rule="on +get",username="taylor"
請將下列項目改為對應的值:
- ACL_POLICY_NAME:您要建立的 ACL 政策名稱。政策名稱只能使用小寫英文字母、數字和連字號,開頭須為英文字母,且於所在區域中不得重複。
- REGION:您要將 ACL 政策放在哪個區域。
這項政策使用基本的權杖型驗證機制,並包含可執行下列動作的規則:
- 第一條規則會授予
lucian~* +@all權限。這項權限可讓使用者存取所有金鑰並執行所有指令。 - 第二項規則會將
get權限授予taylor。這項權限可讓使用者擷取與金鑰相關聯的值。這項功能會限制使用者存取唯讀資料作業,並防止使用者修改金鑰。
如要為使用 Identity and Access Management (IAM) 驗證的 ACL 政策建立規則,建議您使用 IAM 主體做為使用者名稱 (例如使用者的電子郵件地址)。
gcloud redis acl-policies create ACL_POLICY_NAME \ --region=REGION \ --rules=rule="on ~* +@all",username="lucian@example.com" \ --rules=rule="on +get",username="taylor@example.com"
如要為不使用驗證的 ACL 政策建立規則,使用者必須是 default 使用者。
gcloud redis acl-policies create ACL_POLICY_NAME \ --region=REGION \ --rules=rule="on ~* +@all",username="default"
如要進一步瞭解基本的權杖型驗證和 IAM 驗證,請參閱「透過基本的權杖型驗證機制確保叢集存取安全」和「關於 IAM 驗證」。
如要進一步瞭解可建立的其他 ACL 規則和政策,請參閱 Redis 說明文件中的 ACL。
將 ACL 政策指派給叢集
將 ACL 政策指派給叢集,或取代已指派的政策,即可讓 Memorystore for Redis Cluster 將政策規則套用至叢集。因此,您可以限制使用者存取特定鍵、指令和 Pub/Sub 管道。
您可以使用 gcloud CLI 將 ACL 政策指派給叢集。
將政策指派給新叢集
如要建立叢集並將 ACL 政策指派給叢集,請參閱「建立執行個體」。
將政策指派給現有叢集
如要提高現有叢集的安全性,可以為叢集指派 ACL 政策。
gcloud
如要將 ACL 政策指派給現有叢集,請使用 gcloud redis clusters update 指令。
gcloud redis clusters update CLUSTER_ID \ --update_mask=acl_policy \ --acl-policy=ACL_POLICY_NAME \ --region=REGION
請替換下列項目:
- CLUSTER_ID:要指派 ACL 政策的叢集 ID
- ACL_POLICY_NAME:ACL 政策的名稱
- REGION:叢集所在的區域
查看 ACL 政策的相關資訊
查看 Memorystore for Redis Cluster 中的 ACL 政策資訊,有助於維護安全性、確保環境運作穩定,以及稽核記憶體內資料。這些政策會定義哪些使用者可以讀取或修改特定金鑰模式、執行特定指令,或是存取特定 Pub/Sub 管道。
您可以使用 gcloud CLI 查看 ACL 政策的相關資訊。
gcloud
如要查看 ACL 政策的相關資訊,請使用 gcloud redis acl-policies list 指令。
gcloud redis acl-policies list --region=REGION
將 REGION 替換為 ACL 政策所在的區域。
查看 ACL 政策的相關資訊
查看 Memorystore for Redis Cluster 中的 ACL 政策資訊,即可執行安全性稽核、排解存取錯誤,以及驗證使用者指令、金鑰權限和 Pub/Sub 管道的存取權,藉此強制執行最低權限原則。此外,管理員可以查看 ACL 政策,確保應用程式擁有適當的存取權,並偵測過於寬鬆的規則。
您可以使用 gcloud CLI 查看 ACL 政策的相關資訊。如要查看這項資訊,請使用 gcloud redis acl-policies describe 指令。
gcloud redis acl-policies describe ACL_POLICY_NAME \ --region=REGION
請將下列項目改為對應的值:
- ACL_POLICY_NAME:要查看資訊的 ACL 政策名稱
- REGION:ACL 政策所在的區域
查看 ACL 政策修訂版本資訊
建立 ACL 政策時,Memorystore for Redis Cluster 會為該政策建立版本 (修訂版本)。每當您修改政策,Memorystore for Redis Cluster 就會建立後續的政策修訂版本。
由於 Memorystore for Redis Cluster 會自動產生這些修訂版本,因此您可以將其用於內部追蹤和稽核。此外,您也可以查看修訂版本,瞭解每個歷史版本中 ACL 政策的確切內容。
您可以透過 ACL 政策修訂版本,追蹤哪些叢集使用政策的哪個修訂版本。這有助於維持曝光度,並確保叢集在政策更新後最終一致性的期間內使用正確版本。
您可以使用 gcloud CLI 查看 ACL 政策修訂版本的相關資訊。
gcloud
如要查看 ACL 政策修訂版本的相關資訊,請使用 gcloud redis acl-policies revisions list 指令。
gcloud redis acl-policies revisions list \ --acl-policy=ACL_POLICY_NAME \ --region=REGION
請替換下列項目:
- ACL_POLICY_NAME:包含您要查看資訊的修訂版本的 ACL 政策名稱
- REGION:ACL 政策所在的區域
記下輸出內容中的修訂版本 ID,您需要這些 ID,才能查看特定 ACL 政策修訂版本的相關資訊。
查看 ACL 政策修訂版本資訊
查看 ACL 政策修訂版本時,您會看到相關規則、中繼資料,以及所有附加叢集的清單。您可以使用 gcloud CLI 查看 ACL 政策修訂版本的相關資訊。
gcloud
如要查看 ACL 政策修訂版本的相關資訊,請使用 gcloud redis acl-policies revisions describe 指令。
gcloud redis acl-policies revisions describe ACL_POLICY_REVISION_ID \ --acl-policy=ACL_POLICY_NAME \ --region=REGION
請替換下列項目:
- ACL_POLICY_REVISION_ID:您要查看資訊的 ACL 政策修訂版本 ID。您在查看 ACL 政策修訂版本資訊時,會看到這個 ID。
- ACL_POLICY_NAME:包含修訂版本的 ACL 政策名稱。
- REGION:ACL 政策所在的區域。
修改 ACL 政策
在 Memorystore for Redis Cluster 中修改 ACL 政策,可強化安全性、強制執行最低權限存取,以及管理作業安全。您可以使用 gcloud CLI 修改政策。
在 ACL 政策中新增規則
如要提高 ACL 政策的安全性,請在政策中新增規則。
gcloud
如要將規則新增至 ACL 政策,請使用 gcloud redis acl-policies update 指令。
gcloud redis acl-policies update ACL_POLICY_NAME \ --region=REGION \ --add-rules=rule="on ~list:*",username="lucian"
請替換下列項目:
- ACL_POLICY_NAME:您要新增 ACL 規則的 ACL 政策名稱
- REGION:ACL 政策所在的區域
這項規則會授予 lucian 存取所有以 list: 開頭的鍵。
取代 ACL 政策的規則
取代 ACL 政策的 ACL 規則可提供更嚴密的安全性、提升作業安全,以及更精細的使用者存取控管。舉例來說,您可以在事件應變期間撤銷權限,或啟用臨時存取權以進行偵錯。
gcloud
如要取代 ACL 政策的規則,請使用 gcloud redis acl-policies update 指令。
gcloud redis acl-policies update ACL_POLICY_NAME \ --region=REGION \ --rules=rule="on ~c*che",username="lucian"
請替換下列項目:
- ACL_POLICY_NAME:要取代 ACL 規則的 ACL 政策名稱
- REGION:ACL 政策所在的區域
您要替換的政策規則會授予 lucian 存取權,允許存取所有符合 c*che 模式的金鑰。例如:cache、caache 和 ceche。
從 ACL 政策中移除規則
如果 ACL 規則不再適用於 ACL 政策,您可以移除該規則。
gcloud
如要從 ACL 政策移除規則,請使用 gcloud redis acl-policies update 指令。
gcloud redis acl-policies update ACL_POLICY_NAME \ --region=REGION \ --remove-rules=rule="on ~set",username="lucian"
請將下列項目改為對應的值:
- ACL_POLICY_NAME:要移除 ACL 規則的 ACL 政策名稱
- REGION:ACL 政策所在的區域
移除這項規則會撤銷 lucian 的相關權限。如要存取叢集,lucian 現在必須以 default 使用者身分連線,並受該使用者權限的限制。
從叢集移除 ACL 政策
如果 ACL 政策不再適用於 Memorystore for Redis Cluster 中的叢集,您可以移除該政策。您可以使用 gcloud CLI 移除政策。
gcloud
如要從叢集移除 ACL 政策,請使用 gcloud redis clusters update 指令。
gcloud redis clusters update CLUSTER_ID \ --acl-policy="" \ --region=REGION
請替換下列項目:
- CLUSTER_ID:您要移除 ACL 政策的叢集 ID
- REGION:叢集所在的區域
acl-policy 參數的 "" 值為空字串。這表示您要從叢集中移除 ACL 政策。
刪除 ACL 政策
如果不再需要 ACL 政策,可以將其刪除。您可以使用 gcloud CLI 刪除政策。
gcloud
如要刪除 ACL 政策,請使用 gcloud redis acl-policies delete 指令。
gcloud redis acl-policies delete ACL_POLICY_NAME \ --region=REGION
請替換下列項目:
- ACL_POLICY_NAME:要刪除的 ACL 政策名稱
- REGION:ACL 政策所在的區域
停用 Lua 指令碼
您可以使用 ACL 政策管理叢集的 Lua 指令碼功能。 停用或限制 Lua 指令碼有助於調整效能、簡化叢集功能,或遵守貴機構的安全防護指南。
為使用者停用指令碼指令
如要停用 Lua 指令碼,禁止使用者執行,您必須使用 ACL 政策,並從使用者的 ACL 規則字串中移除指令碼指令的權限。
Redis 會將指令分類為群組。Lua 指令碼屬於 @scripting 類別。您必須移除使用者權限的主要指令如下:
EVAL:執行以字串形式提供的 Lua 指令碼EVALSHA:使用SCRIPT LOAD指令執行快取 Lua 指令碼SCRIPT:管理指令碼快取 (例如LOAD、FLUSH、EXISTS和KILL)SCRIPT指令包含下列子指令:
您可以為使用者停用所有指令碼指令,也可以停用特定指令。
如要停用指令碼指令,請使用 gcloud CLI,並在指令或類別前加上減號 (-)。
為使用者停用所有指令碼指令
如要為使用者停用所有指令碼指令,請建立 ACL 政策並指派給叢集,或修改指派給叢集的 ACL 政策。
建立政策
如要建立 ACL 政策,為名為 lucian 的使用者停用所有指令碼指令,請使用 gcloud redis acl-policies create 指令。
gcloud redis acl-policies create POLICY_NAME \ --region=REGION \ --rules=rule="on ~* +@all -@scripting",username=lucian
請替換下列項目:
- POLICY_NAME:ACL 政策的名稱
- REGION:要將 ACL 政策放在哪個區域
修改政策
如要修改 ACL 政策,停用 lucian 的所有指令碼指令,請使用 gcloud redis acl-policies update 指令。
gcloud redis acl-policies update POLICY_NAME \ --region=REGION \ --rules=rule="on ~* +@all -@scripting",username=lucian
請將下列項目改為對應的值:
- POLICY_NAME:ACL 政策的名稱
- REGION:ACL 政策所在的區域
如要只授予使用者所需的特定權限,請變更 +@all 值。舉例來說,如要讓使用者只能存取唯讀指令,請將 +@all 變更為 +@read。如要進一步瞭解可設定的使用者權限,請參閱 Redis ACL 說明文件。
為使用者停用指令碼指令
您可以指定要為使用者停用的指令。舉例來說,您可以允許使用者執行所有指令碼指令,但 SCRIPT FLUSH 指令除外。如要為使用者停用指令碼指令,請建立 ACL 政策並指派給叢集,或修改指派給叢集的 ACL 政策。
您可以停用任何指令碼指令。在本節範例中,您會為使用者停用 SCRIPT FLUSH 指令。如需指令碼指令清單,請參閱「為使用者停用指令碼指令」。
建立政策
如要建立 ACL 政策,停用 lucian 的 SCRIPT FLUSH 指令碼指令,請使用 gcloud redis acl-policies create 指令。
gcloud redis acl-policies create POLICY_NAME \ --region=REGION \ --rules=rule="on ~* -script|flush",username=lucian
請替換下列項目:
- POLICY_NAME:ACL 政策的名稱
- REGION:要將 ACL 政策放在哪個區域
修改政策
如要修改 ACL 政策,停用 lucian 的所有指令碼指令,請使用 gcloud redis acl-policies update 指令。
gcloud redis acl-policies update POLICY_NAME \ --region=REGION \ --rules=rule="on ~* -script|flush",username=lucian
請替換下列項目:
- POLICY_NAME:ACL 政策的名稱
- REGION:ACL 政策所在的區域
如要只授予使用者所需的特定權限,請變更 +@all 值。舉例來說,如要讓使用者只能存取唯讀指令,請將 +@all 變更為 +@read。如要進一步瞭解可設定的使用者權限,請參閱 Redis ACL 說明文件。
保護預設使用者
如要為 default 超級使用者停用指令碼權限,請建立 ACL 政策並指派給叢集,或修改指派給叢集的 ACL 政策。
建立政策
如要建立 ACL 政策,停用 default 使用者的所有指令碼指令,請使用 gcloud redis acl-policies create 指令。
gcloud redis acl-policies create POLICY_NAME \ --region=REGION \ --rules=rule="on ~* +@all -@scripting",username=default
請替換下列項目:
- POLICY_NAME:ACL 政策的名稱
- REGION:要將 ACL 政策放在哪個區域
修改政策
如要修改 ACL 政策,為 default 使用者停用所有指令碼指令,請使用 gcloud redis acl-policies update 指令。
gcloud redis acl-policies update POLICY_NAME \ --region=REGION \ --rules=rule="on ~* +@all -@scripting",username=default
請替換下列項目:
- POLICY_NAME:ACL 政策的名稱
- REGION:ACL 政策所在的區域
如要只授予 default 使用者需要的特定權限,請變更 +@all 值。舉例來說,如要讓使用者只能存取唯讀指令,請將 +@all 變更為 +@read。如要進一步瞭解可設定的使用者權限,請參閱 Redis ACL 文件。
疑難排解
本節列出使用 ACL 政策時可能收到的錯誤訊息、這些訊息的原因,以及排解訊息問題的提示。
| 錯誤訊息 | 原因 | 疑難排解 |
|---|---|---|
username cannot be empty |
您在 ACL 政策中為使用者名稱設定空白字串或只含空格的字串。 | 使用英數字元或特殊字元組合的使用者名稱。然後,再次建立 ACL 政策。 |
duplicate username found in ACL policy |
ACL 政策中有重複的使用者名稱。 | 使用錯誤記錄檔找出重複的使用者名稱。修改 ACL 政策建立要求,為使用者名稱指定一項規則。然後再次建立 ACL 政策。 |
ACL rule token cannot contain token. use either
IAM or Basic Auth features to enable authentication
|
您無法在 ACL 政策中使用密碼字元 (例如 <、>、# 和 !) 或相關指令 (例如 nopass、resetpass 和 reset)。 |
從 ACL 政策的規則中,移除所有密碼字元和相關指令。然後再次建立 ACL 政策。如要設定驗證,請啟用基本驗證或以 IAM 為基礎的驗證。 |
passwords not allowed in ACL rules (token starts with
char). use either IAM or Basic Auth features to
enable authentication |
您無法在 ACL 政策中使用密碼字元 (例如 <、>、# 和 !) 或相關指令 (例如 nopass、resetpass 和 reset)。 |
從 ACL 政策的規則中,移除所有密碼字元和相關指令。然後再次建立 ACL 政策。如要設定驗證,請啟用基本驗證或以 IAM 為基礎的驗證。 |
invalid ACL rule syntax |
您未在 ACL 政策的一或多項規則中正確格式化存取字串。 | 正確格式化存取字串。 |
ACL policy is in DELETING state and cannot be used |
您嘗試將 ACL 政策指派給叢集,但該政策的狀態為 DELETING。 |
為叢集指派其他 ACL 政策。 |
ACL_POLICY_IN_USE: ACL policy is in use by 1 or more clusters
|
您嘗試刪除的 ACL 政策已指派給至少一個叢集。 | 如要刪除 ACL 政策,必須先從所有指派該政策的叢集移除政策。如要判斷哪些叢集已指派政策,請參閱「查看 ACL 政策的相關資訊」。 |
fast-failing the workflow as the resource is in DELETING
state |
您嘗試修改狀態為 DELETING 的 ACL 政策。 |
如果 ACL 政策的狀態為 DELETING,您就無法修改政策。 |