

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

# Apache Kafka ACL
<a name="msk-acls"></a>

Apache Kafka 具有可插入的授權方，並隨附out-of-box授權方實作。Amazon MSK 會在代理程式的 `server.properties` 檔案中啟用此授權。

Apache Kafka ACL 的格式為「主體 P 被主機 H [允許/拒絕] 在任何匹配 ResourcePattern RP 的資源 R 上進行操作 O」。如果 RP 不匹配特定的資源 R，那麼 R 和 ACL 無關聯，因此除了超級使用者以外沒有其他人能夠存取 R。若要變更此 Apache Kafka 行為，請將屬性 `allow.everyone.if.no.acl.found` 設定為 "true"。Amazon MSK 預設設定為 "true"。這表示使用 Amazon MSK 叢集時，如果您未在資源上明確設定 ACL，則所有委託人都可以存取此資源。如果您啟用資源上的 ACL，只有授權的委託人可以存取它。如果您想要限制對主題的存取，並授權使用 TLS 相互驗證的用戶端，請使用 Apache Kafka 授權方 CLI 來新增 ACL。如需有關新增、移除和列出 ACL 的詳細資訊，請參閱 [Kafka 授權命令列界面](https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Authorization+Command+Line+Interface)。

由於 Amazon MSK 會將代理程式設定為超級使用者，因此他們可以存取所有主題。這有助於代理程式從主要分割區複寫訊息，無論是否為叢集的組態定義 `allow.everyone.if.no.acl.found` 屬性。

**若要新增或移除主題的讀取和寫入權限**

1. 將您的代理程式新增至 ACL 表格，以允許它們讀取所有具有 ACL 的主題。若要授予代理程式對主題的讀取權限，請在可與 MSK 叢集通訊的用戶端機器上執行下列命令。

   使用叢集的任何引導代理程式的 DNS 取代 *Distinguished-Name*，然後以星號 (`*`) 取代此辨別名稱中第一個句點之前的字串。例如，如果其中一個叢集的引導代理程式具有 DNS，`b-6.mytestcluster.67281x.c4.kafka.us-east-1.amazonaws.com`請使用 `*.mytestcluster.67281x.c4.kafka.us-east-1.amazonaws.com` 取代下列命令中的 *Distinguished-Name*。如需有關如何取得引導代理程式的資訊，請參閱[取得 Amazon MSK 叢集的引導代理程式](msk-get-bootstrap-brokers.md)。

   ```
   <path-to-your-kafka-installation>/bin/kafka-acls.sh --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Read --group=* --topic Topic-Name
   ```

1. 若要授予用戶端應用程式對主題的讀取存取權，請在用戶端機器上執行下列命令。若您使用雙向 TLS 身分驗證，使用與建立私有金鑰時相同的 *Distinguished-Name*。

   ```
   <path-to-your-kafka-installation>/bin/kafka-acls.sh --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Read --group=* --topic Topic-Name
   ```

   若要移除讀取權限，您可以執行相同的命令，將 `--add` 取代為 `--remove`。

1. 若要授與主題的寫入權限，請在用戶端機器上執行下列命令。若您使用雙向 TLS 身分驗證，使用與建立私有金鑰時相同的 *Distinguished-Name*。

   ```
   <path-to-your-kafka-installation>/bin/kafka-acls.sh --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Write --topic Topic-Name
   ```

   若要移除寫入權限，您可以執行相同的命令，將 `--add` 取代為 `--remove`。