角色型存取控制 (RBAC) 規則數量 - Amazon ElastiCache 的雷迪斯

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

角色型存取控制 (RBAC) 規則數量

不同於使用 使用 Redis AUTH 命令進行身分驗證 中所述的 Redis AUTH 命令進行使用者身分驗證,在 Redis 6.0 以上版本中,您可以使用稱為角色型存取控制 (RBAC) 的功能。RBAC 也是控制無伺服器快取存取的唯一方法。

與 Redis AUTH 不同的是,所有已通過身分驗證的用戶端都具有完整的快取存取權 (前提是若其字符已通過驗證),RBAC 可讓您透過使用者群組控制快取存取。這些使用者群組的設計目的是整理快取的存取權。

使用 RBAC,您可以建立使用者,並使用存取字串將特定許可指派給他們,如下所說明。您可以將使用者指派給具有相同特定角色 (系統管理員、人力資源) 的使用者群組,然後將該群組部署至一或多個 ElastiCache for Redis 快取。如此一來,您就可以在使用相同 Redis 快取的用戶端之間建立安全界限,並防止用戶端存取彼此的資料。

RBAC 的設計是為了支援在 Redis 6 中推出的 Redis ACL。搭配 ElastiCache for Redis 快取使用 RBAC 時,會受到一些限制:

  • 您無法在存取字串中指定密碼。您可以使用 CreateUserModifyUser 呼叫來設定密碼。

  • 針對使用者權限,您需傳遞 onoff 作為存取字串的一部分。如果存取字串中沒有指定這兩項,則會為使用者指派 off,且使用者沒有快取的存取權限。

  • 您無法使用禁止和重新命名的命令。如果您指定禁止或重新命名的命令,則會擲回例外情況。如果您想要將存取控制清單 (ACL) 用於重新命名的命令,請指定命令的原始名稱,也就是將命令重新命名之前的名稱。

  • 您無法使用 reset 命令作為存取字串的一部分。您可以使用 API 參數指定密碼,而 ElastiCache for Redis 會管理密碼。因此您無法使用 reset,因為它會刪除使用者的所有密碼。

  • Redis 6 引入了 ACL LIST 命令。此命令會傳回使用者清單,以及套用至每個使用者的 ACL 規則。ElastiCache for Redis 支援 ACL LIST 命令,但不像 Redis 包含密碼雜湊的支援。使用 ElastiCache for Redis,您可以使用 describe-users 作業來取得類似的資訊,包括存取字串中包含的規則。但是 describe-users 不會擷取使用者密碼。

    ElastiCache for Redis 支援的其他唯讀命令包括 ACL WHOAMIACL USERSACL CAT。ElastiCache for Redis 不支援任何其他寫入型 ACL 命令。

  • 以下為目前的限制:

    資源 允許的上限
    每使用者群組使用者數 100
    使用者數 1000
    使用者群組數 100

以下詳述搭配 ElastiCache for Redis 使用 RBAC 的方式。

使用存取字串指定許可

若要為 ElastiCache for Redis 快取指定許可,請使用 AWS CLI 或 AWS Management Console,建立存取字串並指派給使用者。

存取字串的定義是套用至使用者的空格分隔規則清單。用於定義使用者可以執行哪些命令,以及使用者可以操作哪些索引鍵。為了執行命令,使用者必須能存取執行中的命令以及該命令存取的所有索引鍵。規則會從左到右累積套用,如果提供的字串中存在冗餘項目,可以改用更簡單的字串而非提供的字串。

如需 ACL 規則語法的詳細資訊,請參閱 ACL

在下列範例中,存取字串代表有權存取所有可用索引鍵和命令的活躍使用者。

on ~* +@all

存取字串語法可細分以下各項:

  • on - 使用者是活躍使用者。

  • ~* - 存取權限提供給所有可用的索引鍵。

  • +@all - 存取權限提供給所有可用的命令。

先前的設定受到最低限度的限制。您可以修改這些設定,提高安全性。

在下面的範例中,存取字串代表對於以「app::」keyspace 開頭的索引鍵,存取權受限於讀取存取的使用者

on ~app::* -@all +@read

您可以列出使用者可存取的命令,進一步精簡這些許可:

+command1 - 使用者對命令的存取權限受限於 command1

+@category - 使用者的存取權限受限於某個命令類別。

如需將存取字串指派給使用者的相關資訊,請參閱「使用主控台和 CLI 建立使用者和使用者群組」。

如果您要將現有的工作負載遷移至 ElastiCache,您可以透過呼叫 ACL LIST 來擷取存取字串,並排除使用者和任何密碼雜湊。

針對 Redis 6.2 及更高版本,以下存取字串語法也受到支援:

  • &* - 存取權限提供給所有可用的索引鍵。

針對 Redis 7.0 版及更高版本,以下存取字串語法也受到支援:

  • | – 可用於封鎖子命令 (例如「-config|set」)。

  • %R~<pattern> – 新增指定的讀取金鑰模式。這與常態金鑰模式類似,但僅授予符合特定模式的金鑰讀取許可。如需詳細資訊,請參閱金鑰許可

  • %W~<pattern> – 新增指定的寫入金鑰模式。這與常態金鑰模式類似,但僅授予符合特定模式的金鑰寫入許可。如需詳細資訊,請參閱金鑰許可

  • %RW~<pattern>~<pattern> 的別名。

  • (<rule list>) – 建立新的選擇器以配對規則。選擇器會在使用者許可之後受到評估,並根據其定義的順序進行評估。如果命令符合使用者許可或任何選擇器,則允許該命令。如需詳細資訊,請參閱 ACL selectors (ACL 選擇器)。

  • clearselectors – 刪除所有連接到使用者的選擇器。

將 RBAC 套用至 ElastiCache for Redis 的快取

若要使用 ElastiCache for Redis RBAC,您需採取以下步驟:

  1. 建立一或多位使用者。

  2. 建立使用者群組,並為該群組新增使用者。

  3. 將使用者群組指派給啟用傳輸中加密的快取。

以下詳細說明這些步驟。

使用主控台和 CLI 建立使用者和使用者群組

RBAC 使用者的使用者資訊是使用者 ID、使用者名稱,以及選用的密碼和存取字串。存取字串提供索引鍵和命令的許可層級。使用者 ID 對使用者而言是唯一的,而使用者名稱是傳遞給引擎的內容。

請確定您提供的使用者許可對使用者群組的預期用途來說有意義。例如,如果您建立名為 Administrators 的使用者群組,則您新增至該群組的任何使用者都應該將其存取字串設為完整存取索引鍵和命令。針對 e-commerce 使用者群組中的,您可以將其存取字串設為唯讀存取。

ElastiCache 會以使用者 ID 和使用者名稱 "default" 自動設定預設使用者,並將其新增至所有使用者群組。您無法刪除或修改此使用者。此使用者的用意是要與先前 Redis 版本的預設行為相容,且具有允許它呼叫所有命令並存取所有索引鍵的存取字串。

若要將適當的存取控制新增至快取,請將此預設使用者取代為未啟用或未使用高強度密碼的新使用者。若要變更預設使用者,請將使用者名稱設定為 default。然後您可以將其與原始預設使用者交換。

下列程序說明如何交換原始 default 使用者與具有經修改存取字串的另一個 default 使用者。

在主控台上修改預設使用者
  1. 登入 AWS Management Console 並前往 https://console.aws.amazon.com/elasticache/ 開啟 Amazon ElastiCache 主控台。

  2. 從導覽窗格選擇使用者群組管理

  3. 針對使用者群組 ID,選擇您要修改的 ID。確定您選擇的是連結而非核取方塊。

  4. 選擇 Modify (修改)。

  5. 修改視窗中,選擇管理,並針對使用者名稱選擇要作為預設使用者的使用者。

  6. 選擇 Choose (選擇)

  7. 選擇 Modify (修改)。執行這項操作時,原始預設使用者所擁有的任何現有快取連線都會終止。

使用 AWS CLI 修改預設使用者
  1. 使用以下命令以使用者名稱 default 建立新使用者。

    若為 Linux、macOS 或 Unix:

    aws elasticache create-user \ --user-id "new-default-user" \ --user-name "default" \ --engine "REDIS" \ --passwords "a-str0ng-pa))word" \ --access-string "off +get ~keys*"

    針對 Windows:

    aws elasticache create-user ^ --user-id "new-default-user" ^ --user-name "default" ^ --engine "REDIS" ^ --passwords "a-str0ng-pa))word" ^ --access-string "off +get ~keys*"
  2. 建立使用者群組並新增先前建立的使用者。

    若為 Linux、macOS 或 Unix:

    aws elasticache create-user-group \ --user-group-id "new-group-2" \ --engine "REDIS" \ --user-ids "new-default-user"

    針對 Windows:

    aws elasticache create-user-group ^ --user-group-id "new-group-2" ^ --engine "REDIS" ^ --user-ids "new-default-user"
  3. 交換新的 default 使用者與原始 default 使用者。

    若為 Linux、macOS 或 Unix:

    aws elasticache modify-user-group \ --user-group-id test-group \ --user-ids-to-add "new-default-user" \ --user-ids-to-remove "default"

    針對 Windows:

    aws elasticache modify-user-group ^ --user-group-id test-group ^ --user-ids-to-add "new-default-user" ^ --user-ids-to-remove "default"

    呼叫此修改操作時,原始預設使用者所擁有的任何現有快取連線都會終止。

建立使用者時,最多可以設定兩個密碼。修改密碼時,任何現有的快取連線都會保留。

特別是在搭配 ElastiCache for Redis 使用 RBAC 時,更要注意下列使用者密碼限制:

  • 密碼必須為 16 - 128 個可列印字元。

  • 不允許使用以下非英數字元:, "" / @

使用主控台和 CLI 管理使用者

透過下列程序,在主控台上管理使用者。

在主控台上管理使用者
  1. 登入 AWS Management Console 並前往 https://console.aws.amazon.com/elasticache/ 開啟 Amazon ElastiCache 主控台。

  2. 在 Amazon ElastiCache 儀表板上,選擇使用者管理。以下是可用的選項:

    • 建立使用者 - 建立使用者時,您需輸入使用者 ID、使用者名稱、身分驗證模式和存取字串。存取字串會為允許使用者存取的索引鍵和命令設定許可層級。

      建立使用者時,最多可以設定兩個密碼。修改密碼時,任何現有的快取連線都會保留。

    • 修改使用者 - 可讓您更新使用者的身分驗證設定或變更其存取字串。

    • 刪除使用者 - 將帳戶從其所屬的任何使用者群組中移除。

透過下列程序,使用 AWS CLI 來管理使用者。

使用 CLI 修改使用者
  • 使用 modify-user 命令來更新使用者的密碼或密碼,或變更使用者的存取許可。

    修改使用者時,會更新與使用者相關聯的使用者群組,以及與使用者群組相關聯的任何快取。所有現有的連線都會保留。範例如下。

    若為 Linux、macOS 或 Unix:

    aws elasticache modify-user \ --user-id user-id-1 \ --access-string "~objects:* ~items:* ~public:*" \ --no-password-required

    針對 Windows:

    aws elasticache modify-user ^ --user-id user-id-1 ^ --access-string "~objects:* ~items:* ~public:*" ^ --no-password-required
注意

不建議您使用 nopass 選項。如果您使用此選項,建議將使用者的許可設定為唯讀,並提供一組有限索引鍵的存取權。

使用 CLI 刪除使用者
  • 使用 delete-user 命令來刪除使用者。系統會刪除帳戶,並將其從所屬的任何使用者群組中移除。以下是範例。

    若為 Linux、macOS 或 Unix:

    aws elasticache delete-user \ --user-id user-id-2

    針對 Windows:

    aws elasticache delete-user ^ --user-id user-id-2

若要查看使用者清單,請呼叫 describe-users 作業。

aws elasticache describe-users

使用主控台和 CLI 管理使用者群組

您可以建立使用者群組來整理和控制使用者對一或多個快取的存取權,如下所示。

透過下列程序,使用主控台來管理使用者群組。

使用主控台來管理使用者群組
  1. 登入 AWS Management Console 並前往 https://console.aws.amazon.com/elasticache/ 開啟 Amazon ElastiCache 主控台。

  2. 在 Amazon ElastiCache 儀表板上,選擇使用者群組管理

    可透過以下作業來建立新的使用者群組:

    • 建立 - 建立使用者群組時,您需新增使用者,然後將使用者群組指派給快取。例如,您可以為具有快取管理角色的使用者建立 Admin 使用者群組。

      重要

      建立使用者群組時,您需加入預設使用者。

    • 新增使用者 - 將使用者新增至使用者群組。

    • 移除使用者 - 從使用者群組中刪除使用者。將使用者從使用者群組中移除時,他們所擁有的任何現有快取連線都會終止。

    • 刪除 - 用來來刪除使用者群組。請注意,系統會刪除使用者群組本身,而不是屬於該群組的使用者。

    針對現有的使用者群組,您可以執行以下操作:

    • 新增使用者 - 將現有使用者新增到使用者群組中。

    • 刪除使用者 - 從使用者群組中移除現有使用者。

      注意

      使用者會從使用者群組中移除,但不會從系統中刪除。

透過下列程序,使用 CLI 來管理使用者群組。

使用 CLI 建立新的使用者群組並新增使用者
  • 請使用 create-user-group 命令,如下列所示。

    若為 Linux、macOS 或 Unix:

    aws elasticache create-user-group \ --user-group-id "new-group-1" \ --engine "REDIS" \ --user-ids user-id-1, user-id-2

    針對 Windows:

    aws elasticache create-user-group ^ --user-group-id "new-group-1" ^ --engine "REDIS" ^ --user-ids user-id-1, user-id-2
使用 CLI 新增使用者或移除目前成員來修改使用者群組
  • 請使用 modify-user-group 命令,如下列所示。

    若為 Linux、macOS 或 Unix:

    aws elasticache modify-user-group --user-group-id new-group-1 \ --user-ids-to-add user-id-3 \ --user-ids-to-remove user-id-2

    針對 Windows:

    aws elasticache modify-user-group --user-group-id new-group-1 ^ --user-ids-to-add userid-3 ^ --user-ids-to-removere user-id-2
注意

屬於從使用者群組中移除之使用者的任何開啟連線,都會以此命令結束。

使用 CLI 刪除使用者群組
  • 請使用 delete-user-group 命令,如下列所示。系統會刪除使用者群組本身,而不是屬於該群組的使用者。

    若為 Linux、macOS 或 Unix:

    aws elasticache delete-user-group / --user-group-id

    針對 Windows:

    aws elasticache delete-user-group ^ --user-group-id

若要查看使用者群組清單,您可以呼叫 describe-user-groups 作業。

aws elasticache describe-user-groups \ --user-group-id test-group

將使用者群組指派至無伺服器快取

建立使用者群組並新增使用者之後,實作 RBAC 的最後一個步驟是將使用者群組指派至無伺服器快取。

使用主控台將使用者群組指派至無伺服器快取

若要使用 AWS Management Console 將使用者群組新增至無伺服器快取,請執行下列操作:

使用 AWS CLI 將使用者群組指派至無伺服器快取

下列 AWS CLI 操作會使用值為 my-user-group-iduser-group-id 參數建立無伺服器快取。將子網路群組 sng-test 取代為已存在的子網路群組。

重要參數
  • --engine - 必須為 redis

  • --user-group-id - 此值提供由具有指定的快取存取許可之使用者所組成的使用者群組 ID。

若為 Linux、macOS 或 Unix:

aws elasticache create-serverless-cache \ --serverless-cache-name "new-serverless-cache" \ --description "new-serverless-cache" \ --engine "redis" \ --user-group-id "new-group-1"

針對 Windows:

aws elasticache create-serverless-cache ^ --serverless-cache-name "new-serverless-cache" ^ --description "new-serverless-cache" ^ --engine "redis" ^ --user-group-id "new-group-1"

下列 AWS CLI 操作會使用值為 my-user-group-iduser-group-id 參數修改無伺服器快取。

若為 Linux、macOS 或 Unix:

aws elasticache modify-serverless-cache \ --serverless-cache-name serverless-cache-1 \ --user-group-id "new-group-2"

針對 Windows:

aws elasticache modify-serverless-cache ^ --serverless-cache-name serverless-cache-1 ^ --user-group-id "new-group-2"

請注意,對快取所做的任何修改都會以非同步方式更新。您可以透過檢視事件來監控進度。如需更多詳細資訊,請參閱 檢視 ElastiCache 事件

將使用者群組指派給複寫群組

建立使用者群組並新增使用者之後,實作 RBAC 的最後一個步驟是將使用者群組指派給複寫群組。

使用主控台將使用者群組指派給複寫群組

若要使用 AWS Management Console 將使用者群組新增至複寫群組,請執行下列動作:

使用 AWS CLI 將使用者群組指派給複寫群組

以下 AWS CLI 作業會建立啟用傳輸中加密 (TLS) 且 user-group-ids 參數值為 my-user-group-id 的複寫群組。將子網路群組 sng-test 取代為已存在的子網路群組。

重要參數
  • --engine - 必須為 redis

  • --engine-version – 必須是 6.0 或更新版本。

  • --transit-encryption-enabled - 進行身分驗證和為使用者群組建立關聯所需的項目。

  • --user-group-ids - 此值提供由具有指定的快取存取許可之使用者所組成的使用者群組 ID。

  • --cache-subnet-group - 為使用者群組建立關聯所需的項目。

若為 Linux、macOS 或 Unix:

aws elasticache create-replication-group \ --replication-group-id "new-replication-group" \ --replication-group-description "new-replication-group" \ --engine "redis" \ --cache-node-type cache.m5.large \ --transit-encryption-enabled \ --user-group-ids "new-group-1" \ --cache-subnet-group "cache-subnet-group"

針對 Windows:

aws elasticache create-replication-group ^ --replication-group-id "new-replication-group" ^ --replication-group-description "new-replication-group" ^ --engine "redis" ^ --cache-node-type cache.m5.large ^ --transit-encryption-enabled ^ --user-group-ids "new-group-1" ^ --cache-subnet-group "cache-subnet-group"

以下 AWS CLI 作業會修改啟用傳輸中加密 (TLS) 且 user-group-ids 參數值為 my-user-group-id 的複寫群組。

若為 Linux、macOS 或 Unix:

aws elasticache modify-replication-group \ --replication-group-id replication-group-1 \ --user-group-ids-to-remove "new-group-1" \ --user-group-ids-to-add "new-group-2"

針對 Windows:

aws elasticache modify-replication-group ^ --replication-group-id replication-group-1 ^ --user-group-ids-to-remove "new-group-1" ^ --user-group-ids-to-add "new-group-2"

記下回應中的 PendingChanges。對快取所做的任何修改都會以非同步方式更新。您可以透過檢視事件來監控進度。如需更多詳細資訊,請參閱 檢視 ElastiCache 事件

從 Redis AUTH 遷移至 RBAC

如果您目前使用 Redis AUTH (如 使用 Redis AUTH 命令進行身分驗證 中所說明),且想要遷移至使用 RBAC,請使用下列程序。

透過以下程序,使用主控台從 Redis AUTH 遷移至 RBAC。

使用主控台從 Redis AUTH 遷移到 RBAC
  1. 登入 AWS Management Console 並前往 https://console.aws.amazon.com/elasticache/ 開啟 ElastiCache 主控台。

  2. 在右上角清單中,選擇您要修改之快取所在的 AWS 區域。

  3. 在導覽窗格中,選擇您要修改之快取上執行的引擎。

    接著會出現所選引擎的快取清單。

  4. 在快取清單中,選擇您要修改之快取的名稱。

  5. Actions (動作) 中,選擇 Modify (修改)。

    修改視窗隨即出現。

  6. 針對存取控制,選擇使用者群組存取控制清單

  7. 針對使用者群組存取控制清單,選擇一個使用者群組。

  8. 選擇預覽變更,然後在下一個畫面上選擇修改

透過以下程序,使用 CLI 從 Redis AUTH 遷移至 RBAC。

使用 CLI 從 Redis AUTH 遷移到 RBAC
  • 請使用 modify-replication-group 命令,如下列所示。

    若為 Linux、macOS 或 Unix:

    aws elasticache modify-replication-group --replication-group-id test \ --auth-token-update-strategy DELETE \ --user-group-ids-to-add user-group-1

    針對 Windows:

    aws elasticache modify-replication-group --replication-group-id test ^ --auth-token-update-strategy DELETE ^ --user-group-ids-to-add user-group-1

從 RBAC 遷移至 Redis AUTH

如果您目前使用 RBAC 且想要遷移至 Redis AUTH,請參閱「從 RBAC 遷移至 Redis AUTH」。

注意

如果您需要停用 ElastiCache 快取上的存取控制,則需要透過 AWS CLI 來進行。如需更多詳細資訊,請參閱 在 ElastiCache Redis 快取上停用存取控制