角色型存取控制 (RBAC) - Amazon ElastiCache

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

角色型存取控制 (RBAC)

您可以透過 Valkey 7.2 和更新使用 Valkey 和 Redis OSSAUTH命令進行驗證版本以及 Redis 6.0 OSS 之後的 中所描述的 Valkey 和 Redis OSSAUTH命令來驗證使用者,而不需要使用 (RBAC) 來驗證使用者。RBAC 也是控制無伺服器快取存取的唯一方法。

與 Valkey 和 Redis OSS 不同AUTH,在驗證所有已驗證的用戶端的權杖時,其具有完整快取存取權,RBAC可讓您透過使用者群組控制快取存取權。這些使用者群組的設計目的是整理快取的存取權。

透過 RBAC,您可以使用存取字串建立使用者並為其指派特定許可,如下所述。您可以將使用者指派給與特定角色 (管理員、人力資源) 一致的使用者群組,然後部署到一或多個 ElastiCache 快取。透過這樣做,您可以使用相同的 Valkey 或 Redis OSS快取,在用戶端之間建立安全界限,並防止用戶端存取彼此的資料。

注意

RBAC 搭配 Valkey 叢集使用 時,您仍然需要指派使用者和使用者群組引擎「redis」。

RBAC 旨在支援在 Redis 6 OSS ACL中引入 。當您RBAC搭配 ElastiCache Valkey 或 Redis OSS快取使用 時,有一些限制:

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

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

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

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

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

    ElastiCache 搭配 Valkey 和 Redis 支援的其他唯讀命令OSS包括 ACL WHOAMIACL USERSACL CAT。 ElastiCache 搭配 Valkey 和 Redis OSS不支援任何其他以寫入為基礎的ACL命令。

  • 以下為目前的限制:

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

RBAC 搭配 ElastiCache (Redis OSS) 使用 會更詳細地描述如下。

使用存取字串指定許可

若要指定 ElastiCache (Redis OSS) 快取的許可,您可以使用 AWS CLI 或 建立存取字串,並將其指派給使用者 AWS Management Console。

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

如需ACL規則語法的相關資訊,請參閱 ACL

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

on ~* +@all

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

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

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

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

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

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

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

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

+command1 – 使用者的命令存取權僅限於 命令 1.

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

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

如果您要將現有工作負載遷移至 ElastiCache,您可以呼叫 來擷取存取字串ACL LIST,但不包括使用者和任何密碼雜湊。

對於 Redis 6.2 版及更高OSS版本,也支援下列存取字串語法:

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

對於 Redis 7.0 版及更高OSS版本,也支援下列存取字串語法:

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

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

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

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

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

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

ElastiCache 使用 Valkey 或 Redis RBAC套用至 的快取 OSS

若要 ElastiCache 搭配 Valkey 或 Redis OSS 使用 RBAC,請執行下列步驟:

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

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

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

以下詳細說明這些步驟。

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

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

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

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

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

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

在主控台上修改預設使用者
  1. 登入 AWS Management Console 並在 開啟 Amazon ElastiCache 主控台https://console.aws.amazon.com/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"

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

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

特別是,在使用 RBAC for ElastiCache (Redis OSS) 時,請注意這些使用者密碼限制:

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

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

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

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

在主控台上管理使用者
  1. 登入 AWS Management Console 並在 開啟 Amazon ElastiCache 主控台https://console.aws.amazon.com/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 並在 開啟 Amazon ElastiCache 主控台https://console.aws.amazon.com/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 操作會使用具有 值 的 user-group-id 參數來建立無伺服器快取my-user-group-id。將子網路群組 sng-test 取代為已存在的子網路群組。

重要參數
  • --engine – 必須為 valkeyredis

  • --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 操作會使用 值 的 user-group-id 參數修改無伺服器快取my-user-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 – 必須為 valkeyredis

  • --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 事件

從 遷移AUTH至 RBAC

如果您AUTH依 所述使用 ,使用 Valkey 和 Redis OSSAUTH命令進行驗證並想要使用 遷移至 RBAC,請使用下列程序。

使用下列程序,RBAC使用主控台從 遷移AUTH至 。

RBAC 使用主控台從 Valkey 或 Redis 遷移OSSAUTH至
  1. 登入 AWS Management Console 並在 https://console.aws.amazon.com/elasticache/開啟 ElastiCache 主控台。

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

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

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

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

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

    修改視窗隨即出現。

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

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

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

使用下列程序,從 Valkey 或 Redis 遷移OSSAUTH至RBAC使用 CLI。

RBAC 使用 從 遷移AUTH至 CLI
  • 請使用 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至 AUTH

如果您使用 RBAC並想要遷移至 Redis OSS AUTH ,請參閱 從 遷移RBAC至 AUTH

注意

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