使用 ACL 政策確保叢集存取安全

在 Memorystore for Redis Cluster 中使用存取控制清單 (ACL) 政策,即可確保叢集存取安全。您可以限制使用者和服務存取特定金鑰、指令和 Pub/Sub 管道,啟用精細的安全防護機制。

以下是使用 ACL 政策確保叢集存取安全的用途範例:

  • 提供角色式存取控管 (RBAC):為應用程式的不同元件建立不同的使用者設定檔。舉例來說,網頁前端可以具備唯讀存取權,而背景工作服務則具備讀取/寫入存取權。避免資料意外外洩或遭到竄改。
  • 避免破壞性指令:限制高階管理員才能使用危險指令,例如 FLUSHALLFLUSHDBCONFIG。確保資料完整性,避免軟體錯誤或人為錯誤。
  • 提供多租戶應用程式安全性:為不同微服務或外部合作夥伴使用不同的 ACL 使用者。確保某項服務的使用者無法讀取或修改其他服務擁有的金鑰。

    Memorystore for Redis Cluster 不提供資源層級的多租戶功能。即使鍵空間已分割,單一服務仍可能耗用不成比例的記憶體或 CPU 資源。

  • 執行唯讀分析和監控:指派專屬使用者,只能使用 GET 或其他唯讀指令 (例如 SCANTYPE),用於分析引擎或資訊主頁應用程式。防止意外寫入或刪除資料。

  • 安全資料庫金鑰:限制應用程式只能與符合特定模式的金鑰互動 (例如 app1:*)。這可在叢集中提供資料的邏輯分離。

  • 停用 Lua 指令碼:使用 ACL 政策管理叢集的 Lua 指令碼功能。停用或限制 Lua 指令碼可協助調整效能、簡化叢集功能,或遵守貴機構的安全防護指南。

事前準備

開始使用 ACL 政策前,請先完成本節中的操作說明。

使用 Google Cloud 控制台、Google Cloud CLI 和 API

如要使用 Google Cloud 控制台、Google Cloud CLI 和 API,請執行下列步驟:

  1. 在 Google Cloud 控制台的專案選擇器頁面中,選取或建立 Google Cloud 專案

    注意:如果您不打算保留在這項程序中建立的資源,請建立新專案,而不要選取現有專案。這樣在完成這些步驟之後,您就可以刪除專案,並移除與該專案相關聯的所有資源。


    前往專案選取器
  2. 請確認您已為專案啟用計費功能。瞭解如何檢查專案是否已啟用計費功能
  3. 安裝初始化 Google Cloud CLI。

    注意:如果您先前已安裝 gcloud CLI,請執行 gcloud components update,確認目前使用的是最新版本。您至少需要 gcloud CLI 440.0.0 版,才能存取 Memorystore for Redis Cluster gcloud CLI 指令。

  4. 啟用 Memorystore for Redis API。
    Memorystore for Redis
  5. 啟用 Network Connectivity API。
    Network Connectivity API
  6. 啟用 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 模式的金鑰。例如:cachecaacheceche

從 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 類別。您必須移除使用者權限的主要指令如下:

您可以為使用者停用所有指令碼指令,也可以停用特定指令。 如要停用指令碼指令,請使用 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 政策,停用 lucianSCRIPT 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 政策中使用密碼字元 (例如 <>#!) 或相關指令 (例如 nopassresetpassreset)。 從 ACL 政策的規則中,移除所有密碼字元和相關指令。然後再次建立 ACL 政策。如要設定驗證,請啟用基本驗證或以 IAM 為基礎的驗證
passwords not allowed in ACL rules (token starts with char). use either IAM or Basic Auth features to enable authentication 您無法在 ACL 政策中使用密碼字元 (例如 <>#!) 或相關指令 (例如 nopassresetpassreset)。 從 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,您就無法修改政策。