

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

# 為啟用 Apache Ranger 的 Amazon EMR 叢集設定 Zeppelin
<a name="emr-ranger-configure-zeppelin"></a>

本主題說明如何為啟用 Apache Ranger 的 Amazon EMR 叢集設定 [Apache Zeppelin](https://zeppelin.apache.org/)，以便您可以將 Zeppelin 用作互動式資料探索的筆記本。Zeppelin 包含於 Amazon EMR 發行版本 5.0.0 及更新版本。較早發行版本包括 Zeppelin 作為沙盒應用程式。如需詳細資訊，請參閱《Amazon EMR 版本指南》**中的 [Amazon EMR 4.x 發行版本](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-4x.html)。

依預設，Zeppelin 設定了預設登入名稱和密碼，這在多租戶環境中並不安全。

若要設定 Zeppelin，請完成下列步驟。

1. **修改身分驗證機制**。

   修改 `shiro.ini` 檔案以實作您偏好的身分驗證機制。Zeppelin 支援 Active Directory、LDAP、PAM 和 Knox SSO。如需詳細資訊，請參閱 [Apache Zeppelin 的 Apache Shiro 身分驗證](https://zeppelin.apache.org/docs/0.8.2/setup/security/shiro_authentication.html)。

1. **設定 Zeppelin 以模擬最終使用者**

   當您允許 Zeppelin 模擬最終使用者時，Zeppelin 提交的作業可以作為該最終使用者執行。將下列組態新增至 `core-site.xml`：

   ```
   [
     {
       "Classification": "core-site",
       "Properties": {
         "hadoop.proxyuser.zeppelin.hosts": "*",
         "hadoop.proxyuser.zeppelin.groups": "*"
       },
       "Configurations": [
       ]
     }
   ]
   ```

   接下來，將下列組態新增至位於 `/etc/hadoop/conf` 的 `hadoop-kms-site.xml`：

   ```
   [
     {
       "Classification": "hadoop-kms-site",
       "Properties": {
         "hadoop.kms.proxyuser.zeppelin.hosts": "*",
         "hadoop.kms.proxyuser.zeppelin.groups": "*"
       },
       "Configurations": [
       ]
     }
   ]
   ```

   您也可以遵循[在主控台中重新設定執行個體群組](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-running-cluster.html#emr-configure-apps-running-cluster-console)中的步驟，使用主控台將這些組態新增至 Amazon EMR 叢集。

1. **允許 Zeppelin 以最終使用者身分執行 sudo**

   建立包含下列內容的檔案 `/etc/sudoers.d/90-zeppelin-user`：

   ```
   zeppelin ALL=(ALL) NOPASSWD:ALL
   ```

1. **修改解譯器設定，在自己的程序中執行使用者作業**。

   對於所有解譯器，將它們設定為在「隔離」程序中執行個體化「每個使用者」的解譯器。  
![Amazon EMR 和 Apache Ranger 架構圖。](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/images/per_user.png)

1. **修改 `zeppelin-env.sh`**

   將下列內容新增至 `zeppelin-env.sh`，以便 Zeppelin 以最終使用者身分啟動解譯器：

   ```
   ZEPPELIN_IMPERSONATE_USER=`echo ${ZEPPELIN_IMPERSONATE_USER} | cut -d @ -f1`
   export ZEPPELIN_IMPERSONATE_CMD='sudo -H -u ${ZEPPELIN_IMPERSONATE_USER} bash -c'
   ```

   將下列內容新增至 `zeppelin-env.sh`，以將預設筆記本許可變更為僅對建立者唯讀：

   ```
   export ZEPPELIN_NOTEBOOK_PUBLIC="false"
   ```

   最後，將下列內容新增至 `zeppelin-env.sh`，以在第一條 `CLASSPATH` 陳述式之後包含 EMR RecordServer 類別路徑：

   ```
   export CLASSPATH="$CLASSPATH:/usr/share/aws/emr/record-server/lib/aws-emr-record-server-connector-common.jar:/usr/share/aws/emr/record-server/lib/aws-emr-record-server-spark-connector.jar:/usr/share/aws/emr/record-server/lib/aws-emr-record-server-client.jar:/usr/share/aws/emr/record-server/lib/aws-emr-record-server-common.jar:/usr/share/aws/emr/record-server/lib/jars/secret-agent-interface.jar"
   ```

1. **重新啟動 Zeppelin。**

   執行下列命令以重新啟動 Zeppelin：

   ```
   sudo systemctl restart zeppelin
   ```