

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

# 使用存取控制清單 (ACLs) 驗證使用者
<a name="clusters.acls"></a>

您可以使用存取控制清單 (ACLs使用者。

ACLs 可讓您透過將使用者分組來控制叢集存取。這些存取控制清單旨在用來組織對叢集的存取。

使用 ACLs，您可以使用存取字串來建立使用者並為其指派特定許可，如下節所述。您可以將使用者指派給符合特定角色 （管理員、人力資源） 的存取控制清單，然後部署到一或多個 MemoryDB 叢集。透過這樣做，您可以在使用相同 MemoryDB 叢集的用戶端之間建立安全界限，並防止用戶端存取彼此的資料。

ACLs旨在支援在 Redis OSS 6 中引入 [ACL](https://valkey.io/docs/topics/acl/)。當您搭配 MemoryDB 叢集使用 ACLs 時，有一些限制：
+ 您無法在存取字串中指定密碼。您可以使用 [CreateUser](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_CreateUser.html) 或 [UpdateUser](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_UpdateUser.html) 呼叫來設定密碼。
+ 針對使用者權限，您需傳遞 `on` 和 `off` 作為存取字串的一部分。如果未在存取字串中指定兩者，則會指派使用者`off`，而且沒有叢集的存取權。
+ 您無法使用禁止的命令。如果您指定禁止的命令，則會擲回例外狀況。如需這些命令的清單，請參閱 [受限制的命令](restrictedcommands.md)。
+ 您無法使用 `reset` 命令作為存取字串的一部分。您可以使用 API 參數指定密碼，而 MemoryDB 會管理密碼。因此您無法使用 `reset`，因為它會刪除使用者的所有密碼。
+ Redis OSS 6 推出 [ACL LIST](https://valkey.io/commands/acl-list) 命令。此命令會傳回使用者清單，以及套用至每個使用者的 ACL 規則。MemoryDB 支援 `ACL LIST`命令，但不像 Redis OSS 一樣包含對密碼雜湊的支援。使用 MemoryDB，您可以使用 [DescribeUsers](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_DescribeUsers.html) 操作來取得類似資訊，包括存取字串中包含的規則。不過，[DescribeUsers](https://docs.aws.amazon.com/memorydb/latest/APIReference/API_DescribeUsers.html) 不會擷取使用者密碼。

  MemoryDB 支援的其他唯讀命令包括 [ACL WHOAMI](https://valkey.io/commands/acl-whoami)、[ACL USERS](https://valkey.io/commands/acl-users) 和 [ACL CAT](https://valkey.io/commands/acl-cat)。MemoryDB 不支援任何其他以寫入為基礎的 ACL 命令。

以下將詳細說明搭配 MemoryDB 使用 ACLs。

**Topics**
+ [使用存取字串指定許可](#access-string)
+ [向量搜尋功能](#access-vss)
+ [將 ACLs 套用至 MemoryDB 的叢集](#rbac-using)

## 使用存取字串指定許可
<a name="access-string"></a>

若要指定 MemoryDB 叢集的許可，您可以使用 AWS CLI 或 建立存取字串，並將其指派給使用者 AWS 管理主控台。

存取字串的定義是套用至使用者的空格分隔規則清單。用於定義使用者可以執行哪些命令，以及使用者可以操作哪些索引鍵。為了執行命令，使用者必須能存取執行中的命令以及該命令存取的所有索引鍵。規則會從左到右累加套用，如果提供的字串中有備援，則可以使用較簡單的字串，而不是提供的字串。

如需 ACL 規則語法的詳細資訊，請參閱 [ACL](https://valkey.io/topics/acl)。

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

 `on ~* &* +@all`

存取字串語法可細分以下各項：
+ `on` - 使用者是活躍使用者。
+ `~*` - 存取權限提供給所有可用的索引鍵。
+ `&*` – 存取會授予所有 pubsub 頻道。
+ `+@all` - 存取權限提供給所有可用的命令。

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

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

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

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

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

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

如需將存取字串指派給使用者的相關資訊，請參閱「[使用主控台和 CLI 建立使用者和存取控制清單](#users-management)」。

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

## 向量搜尋功能
<a name="access-vss"></a>

對於 [向量搜尋](vector-search.md)，所有搜尋命令都屬於 `@search`類別，且現有類別 `@read`、 `@write``@fast`和 `@slow`已更新為包含搜尋命令。如果使用者無法存取某個類別，則該使用者就無法存取該類別中的任何命令。例如，如果使用者無法存取 `@search`，則使用者無法執行任何搜尋相關命令。

下表指出搜尋命令與適當類別的映射。


| VSS 命令 | @read | @write | @fast | @slow | 
| --- | --- | --- | --- | --- | 
| FT.CREATE |  | Y | Y |  | 
| FT.DROPINDEX |  | Y | Y |  | 
| FT.LIST | Y |  |  | Y | 
| FT.INFO | Y |  | Y |  | 
| FT.SEARCH | Y |  |  | Y | 
| FT.AGGREGATE | Y |  |  | Y | 
| FT.PROFILE | Y |  |  | Y | 
| FT.ALIASADD |  | Y | Y |  | 
| FT.ALIASDEL |  | Y | Y |  | 
| FT.ALIASUPDATE |  | Y | Y |  | 
| FT.\$1ALIASLIST | Y |  |  | Y | 
| FT.EXPLAIN | Y |  | Y |  | 
| FT.EXPLAINCLI | Y |  | Y |  | 
| FT.CONFIG | Y |  | Y |  | 

## 將 ACLs 套用至 MemoryDB 的叢集
<a name="rbac-using"></a>

若要使用 MemoryDB ACLs，請執行下列步驟：

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

1. 建立 ACL 並將使用者新增至清單。

1. 將 ACL 指派給叢集。

以下詳細說明這些步驟。

**Topics**
+ [使用主控台和 CLI 建立使用者和存取控制清單](#users-management)
+ [使用主控台和 CLI 管理存取控制清單](#user-groups)
+ [將存取控制清單指派給叢集](#users-groups-to-clusterss)

### 使用主控台和 CLI 建立使用者和存取控制清單
<a name="users-management"></a>

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

請確定您提供的使用者許可符合 ACL 的預期用途。例如，如果您建立名為 的 ACL`Administrators`，則您新增至該群組的任何使用者都應將其存取字串設定為對金鑰和命令的完整存取。對於 `e-commerce` ACL 中的使用者，您可以將其存取字串設定為唯讀存取。

MemoryDB 會為每個帳戶自動設定使用者名稱為 的預設使用者`"default"`。除非明確新增至 ACL，否則它不會與任何叢集相關聯。您無法刪除或修改此使用者。此使用者旨在與先前 Redis OSS 版本的預設行為相容，並具有允許其呼叫所有命令和存取所有金鑰的存取字串。

將為每個包含預設使用者的帳戶建立不可變的「開放存取」ACL。這是預設使用者可以成為成員的唯一 ACL。建立叢集時，您必須選取要與叢集建立關聯的 ACL。雖然您可以選擇將「開放存取」ACL 套用到預設使用者，但強烈建議建立 ACL 的使用者，其許可僅限於其業務需求。

未啟用 TLS 的叢集必須使用「開放存取」ACL 來提供開放身分驗證。

無需任何使用者即可建立 ACLs。空的 ACL 將無法存取叢集，而且只能與啟用 TLS 的叢集建立關聯。

建立使用者時，最多可以設定兩個密碼。當您修改密碼時，會維護與叢集的任何現有連線。

特別是，使用適用於 MemoryDB ACLs 時，請注意這些使用者密碼限制：
+ 密碼必須為 16 - 128 個可列印字元。
+ 不允許使用以下非英數字元：`,` `""` `/` `@`。

#### 使用主控台和 CLI 管理使用者
<a name="users-console"></a>

##### 建立使用者 （主控台）
<a name="users.Createclusters.viewdetails"></a>

**在主控台上建立使用者**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) 的 MemoryDB 主控台。

1. 在左側導覽窗格中，選擇**使用者**。

1. 選擇**建立使用者**

1. 在**建立使用者**頁面上，輸入**名稱**。

   叢集命名限制條件如下：
   + 必須包含 1-40 個英數字元或連字號。
   + 必須以字母開頭。
   + 不能連續包含兩個連字號。
   + 結尾不能是連字號。

1. 在**密碼**下，您最多可以輸入兩個密碼。

1. 在**存取字串**下，輸入存取字串。存取字串會為允許使用者存取的索引鍵和命令設定許可層級。

1. 對於**標籤**，您可以選擇套用標籤來搜尋和篩選使用者或追蹤 AWS 成本。

1. 選擇**建立**。

##### 使用 建立使用者 AWS CLI
<a name="users.Create.cli"></a>

**使用 CLI 建立使用者**
+ 使用 [create-user](https://docs.aws.amazon.com/cli/latest/reference/memorydb/create-user.html) 命令來建立使用者。

  針對 Linux、macOS 或 Unix：

  ```
  aws memorydb create-user \
    --user-name user-name-1 \
    --access-string "~objects:* ~items:* ~public:*" \
    --authentication-mode \
          Passwords="abc",Type=password
  ```

  針對 Windows：

  ```
  aws memorydb create-user ^
    --user-name user-name-1 ^
    --access-string "~objects:* ~items:* ~public:*" ^
    --authentication-mode \
          Passwords="abc",Type=password
  ```

##### 修改使用者 （主控台）
<a name="users.modifyclusters.viewdetails"></a>

**在主控台上修改使用者**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) 的 MemoryDB 主控台。

1. 在左側導覽窗格中，選擇**使用者**。

1. 選擇您要修改的使用者旁的選項按鈕，然後選擇**動作**->**修改**

1. 如果您想要修改密碼，請選擇**修改密碼**選項按鈕。請注意，如果您有兩個密碼，您必須在修改其中一個密碼時輸入這兩個密碼。

1. 如果您要更新存取字串，請輸入新的存取字串。

1. 選擇 **Modify** (修改)。

##### 使用 修改使用者 AWS CLI
<a name="users.modify.cli"></a>

**使用 CLI 修改使用者**

1. 使用 [update-user](https://docs.aws.amazon.com/cli/latest/reference/memorydb/update-user.html) 命令來修改使用者。

1. 修改使用者時，會更新與使用者相關聯的存取控制清單，以及與 ACL 相關聯的任何叢集。所有現有的連線都會保留。範例如下。

   針對 Linux、macOS 或 Unix：

   ```
   aws memorydb update-user \
     --user-name user-name-1 \
     --access-string "~objects:* ~items:* ~public:*"
   ```

   針對 Windows：

   ```
   aws memorydb update-user ^
     --user-name user-name-1 ^
     --access-string "~objects:* ~items:* ~public:*"
   ```

##### 檢視使用者詳細資訊 （主控台）
<a name="users.viewclusters.viewdetails"></a>

**在主控台上檢視使用者詳細資訊**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) 的 MemoryDB 主控台。

1. 在左側導覽窗格中，選擇**使用者**。

1. 在**使用者名稱**下選擇使用者，或使用搜尋方塊來尋找使用者。

1. 在**使用者設定**下，您可以檢閱使用者的存取字串、密碼計數、狀態和 Amazon Resource Name (ARN)。

1. 在**存取控制清單 (ACL)** 下，您可以檢閱使用者所屬的 ACL。

1. 在**標籤**下，您可以檢閱與使用者相關聯的任何標籤。

##### 使用 檢視使用者詳細資訊 AWS CLI
<a name="user.view.cli"></a>

使用 [describe-users](https://docs.aws.amazon.com/cli/latest/reference/memorydb/describe-users.html) 命令來檢視使用者的詳細資訊。

```
aws memorydb describe-users \
  --user-name my-user-name
```

##### 刪除使用者 （主控台）
<a name="users.deleteclusters"></a>

**在主控台上刪除使用者**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) 的 MemoryDB 主控台。

1. 在左側導覽窗格中，選擇**使用者**。

1. 選擇您要修改的使用者旁的選項按鈕，然後選擇**動作**->**刪除**

1. 若要確認，請在確認文字方塊`delete`中輸入 ，然後選擇**刪除**。

1. 若要取消，請選擇 **Cancel (取消)**。

##### 使用 刪除使用者 AWS CLI
<a name="users.delete.cli"></a>

**使用 CLI 刪除使用者**
+ 使用 [delete-user](https://docs.aws.amazon.com/cli/latest/reference/memorydb/delete-user.html) 命令來刪除使用者。

  帳戶會從其所屬的任何存取控制清單中刪除和移除。下列是 範例。

  針對 Linux、macOS 或 Unix：

  ```
  aws memorydb delete-user \
    --user-name user-name-2
  ```

  針對 Windows：

  ```
  aws memorydb delete-user ^
    --user-name user-name-2
  ```

### 使用主控台和 CLI 管理存取控制清單
<a name="user-groups"></a>

您可以建立存取控制清單來組織和控制使用者對一或多個叢集的存取，如下所示。

使用下列程序來管理使用主控台的存取控制清單。

#### 建立存取控制清單 (ACL) （主控台）
<a name="acl.createclusters.viewdetails"></a>

**使用主控台建立存取控制清單**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) 的 MemoryDB 主控台。

1. 在左側導覽窗格中，選擇**存取控制清單 (ACL)**。

1. 選擇**建立 ACL**。

1. 在**建立存取控制清單 (ACL)** 頁面上，輸入 ACL 名稱。

   叢集命名限制條件如下：
   + 必須包含 1-40 個英數字元或連字號。
   + 必須以字母開頭。
   + 不能連續包含兩個連字號。
   + 結尾不能是連字號。

1. 在**選取的使用者**下，執行下列其中一項操作：

   1. 選擇建立使用者來**建立新的使用者**

   1. 選擇**管理**，然後從管理使用者對話方塊中選取使用者，然後選擇**選擇**，以新增**使用者**。

1. 對於**標籤**，您可以選擇套用標籤來搜尋和篩選 ACLs 或追蹤 AWS 成本。

1. 選擇**建立**。

#### 使用 建立存取控制清單 (ACL) AWS CLI
<a name="acl.create.cli"></a>

使用以下程序，使用 CLI 建立存取控制清單。

**使用 CLI 建立新的 ACL 並新增使用者**
+ 使用 [create-acl](https://docs.aws.amazon.com/cli/latest/reference/memorydb/create-acl.html) 命令來建立 ACL。

  針對 Linux、macOS 或 Unix：

  ```
  aws memorydb create-acl \
    --acl-name "new-acl-1" \
    --user-names "user-name-1" "user-name-2"
  ```

  針對 Windows：

  ```
  aws memorydb create-acl ^
    --acl-name "new-acl-1" ^
    --user-names "user-name-1" "user-name-2"
  ```

#### 修改存取控制清單 (ACL) （主控台）
<a name="acl.modifyclusters.viewdetails"></a>

**使用主控台修改存取控制清單**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) 的 MemoryDB 主控台。

1. 在左側導覽窗格中，選擇**存取控制清單 (ACL)**。

1. 選擇您要修改的 ACL，然後選擇**修改**

1. 在**修改**頁面上，**在選取的使用者**下執行下列其中一項操作：

   1. 選擇建立使用者以新增至 ACL 來**建立新的使用者**。

   1. 選擇**管理**，然後從管理使用者對話方塊中選取或取消選取使用者，然後選取**選擇**，以新增或移除**使用者**。

1. 在**建立存取控制清單 (ACL)** 頁面上，輸入 ACL 名稱。

   叢集命名限制條件如下：
   + 必須包含 1-40 個英數字元或連字號。
   + 必須以字母開頭。
   + 不能連續包含兩個連字號。
   + 結尾不能是連字號。

1. 在**選取的使用者**下，執行下列其中一項操作：

   1. 選擇建立使用者來**建立新的使用者**

   1. 選擇**管理**，然後從管理使用者對話方塊中選取使用者，然後選擇**選擇**，以新增**使用者**。

1. 選擇**修改**以儲存變更，或選擇**取消**以捨棄變更。

#### 使用 修改存取控制清單 (ACL) AWS CLI
<a name="acl.modify.acl"></a>

**使用 CLI 透過新增使用者或移除目前成員來修改 ACL**
+ 使用 [update-acl](https://docs.aws.amazon.com/cli/latest/reference/memorydb/update-acl.html) 命令來修改 ACL。

  針對 Linux、macOS 或 Unix：

  ```
  aws memorydb update-acl --acl-name new-acl-1 \
  --user-names-to-add user-name-3 \
  --user-names-to-remove user-name-2
  ```

  針對 Windows：

  ```
  aws memorydb update-acl --acl-name new-acl-1 ^
  --user-names-to-add user-name-3 ^
  --user-names-to-remove user-name-2
  ```

**注意**  
此命令會結束任何從 ACL 移除之使用者的開放連線。

#### 檢視存取控制清單 (ACL) 詳細資訊 （主控台）
<a name="acls.viewclusters.viewdetails"></a>

**在主控台上檢視 ACL 詳細資訊**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) 的 MemoryDB 主控台。

1. 在左側導覽窗格中，選擇**存取控制清單 (ACL)**。

1. 選擇 ACL **名稱下的 ACL**，或使用搜尋方塊尋找 ACL。

1. 在**使用者**下，您可以檢閱與 ACL 相關聯的使用者清單。

1. 在**關聯的叢集**下，您可以檢閱 ACL 所屬的叢集。

1. 在**標籤**下，您可以檢閱與 ACL 相關聯的任何標籤。

#### 使用 檢視存取控制清單 (ACL) AWS CLI
<a name="acl.view.cli"></a>

使用 [describe-acls](https://docs.aws.amazon.com/cli/latest/reference/memorydb/describe-acls.html) 命令來檢視 ACL 的詳細資訊。

```
aws memorydb describe-acls \
  --acl-name test-group
```

#### 刪除存取控制清單 (ACL) （主控台）
<a name="acl.deleteacl"></a>

**使用主控台刪除存取控制清單**

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/memorydb/](https://console.aws.amazon.com/memorydb/) 的 MemoryDB 主控台。

1. 在左側導覽窗格中，選擇**存取控制清單 (ACL)**。

1. 選擇您要修改的 ACL，然後選擇**刪除**

1. 在**刪除**頁面上，`delete`在確認方塊中輸入 ，然後選擇**刪除****或取消**以避免刪除 ACL。

會刪除 ACL 本身，而不是屬於 群組的使用者。

#### 使用 刪除存取控制清單 (ACL) AWS CLI
<a name="acl.delete.cli"></a>

**使用 CLI 刪除 ACL**
+ 使用 [delete-acl](https://docs.aws.amazon.com/cli/latest/reference/memorydb/delete-acl.html) 命令來刪除 ACL。

  針對 Linux、macOS 或 Unix：

  ```
  aws memorydb delete-acl /
     --acl-name
  ```

  針對 Windows：

  ```
  aws memorydb delete-acl ^
     --acl-name
  ```

  上述範例會傳回下列回應。

  ```
  aws memorydb delete-acl --acl-name "new-acl-1"
  {
      "ACLName": "new-acl-1",
      "Status": "deleting",
      "EngineVersion": "6.2",
      "UserNames": [
          "user-name-1", 
          "user-name-3"
      ],
      "clusters": [],
      "ARN":"arn:aws:memorydb:us-east-1:493071037918:acl/new-acl-1"
  }
  ```

### 將存取控制清單指派給叢集
<a name="users-groups-to-clusterss"></a>

在您建立 ACL 並新增使用者之後，實作 ACLs的最後一步是將 ACL 指派給叢集。

#### 使用主控台將存取控制清單指派給叢集
<a name="users-groups-to-clusters-con"></a>

若要使用 將 ACL 新增至叢集 AWS 管理主控台，請參閱 [建立 MemoryDB 叢集](getting-started.md#clusters.create)。

#### 使用 將存取控制清單指派給叢集 AWS CLI
<a name="users-groups-to-clusters-CLI"></a>

 下列 AWS CLI 操作會建立啟用傳輸中加密 (TLS) 的叢集，以及值為 的 **acl-name** 參數`my-acl-name`。將子網路群組 `subnet-group` 取代為已存在的子網路群組。

**重要參數**
+ **--engine-version** – 必須為 6.2。
+ **--tls-enabled** – 用於身分驗證和關聯 ACL。
+ **--acl-name** – 此值提供存取控制清單，由具有叢集指定存取許可的使用者組成。

針對 Linux、macOS 或 Unix：

```
aws memorydb create-cluster \
    --cluster-name "new-cluster" \
    --description "new-cluster" \
    --engine-version "6.2" \
    --node-type db.r6g.large \
    --tls-enabled \
    --acl-name "new-acl-1" \
    --subnet-group-name "subnet-group"
```

針對 Windows：

```
aws memorydb create-cluster ^
    --cluster-name "new-cluster" ^
    --cluster-description "new-cluster" ^
    --engine-version "6.2" ^
    --node-type db.r6g.large ^
    --tls-enabled ^
    --acl-name "new-acl-1" ^
    --subnet-group-name "subnet-group"
```

下列 AWS CLI 操作會修改啟用傳輸中加密 (TLS) 的叢集，以及值為 的 **acl-name** 參數`new-acl-2`。

針對 Linux、macOS 或 Unix：

```
aws memorydb update-cluster \
    --cluster-name cluster-1 \
    --acl-name "new-acl-2"
```

針對 Windows：

```
aws memorydb update-cluster ^
    --cluster-name cluster-1 ^
    --acl-name "new-acl-2"
```