授權 Apache Ambari 檢視的使用者
啟用企業安全性套件 (ESP) 的 HDInsight 叢集可提供企業級功能,包括以 Microsoft Entra ID 為基礎的驗證。 您可以將已新增至已獲得存取權之 Microsoft Entra 群組的新使用者同步至叢集,讓這些特定使用者能夠執行特定動作。 當您在 Apache Ambari 中使用使用者、群組和許可權時,ESP HDInsight 叢集和標準 HDInsight 叢集都支援。
Active Directory 使用者可以使用其網域認證來登入叢集節點。 他們也可以使用其網域認證來驗證叢集與其他已核准之端點 (例如 Hue、Ambari 檢視、ODBC、JDBC、PowerShell 和 REST API) 的互動。
警告
請勿變更以 Linux 為基礎之 HDInsight 叢集上的 Ambari 看門狗 (hdinsightwatchdog) 密碼。 變更密碼會破壞在叢集上使用指令碼動作或執行調整作業的能力。
如果您尚未這麼做,請依照這些指示來佈建新 ESP 叢集。
存取 Ambari 管理頁面
若要移至 Ambari 管理頁面,請在 Apache Ambari Web UI 上瀏覽至 https://CLUSTERNAME.azurehdinsight.net
。 輸入您建立叢集時所定義的叢集系統管理員使用者名稱和密碼。 接著,從 Ambari 儀表板中,選取 [admin] \(系統管理員\) 功能表底下的 [Manage Ambari] \(管理 Ambari\):
新增使用者
透過入口網站新增使用者
從 [管理] 頁面中,選取 [使用者]。
選取 [+ 建立本機使用者]。
提供 [使用者名稱] 和 [密碼]。 選取 [儲存]。
透過 PowerShell 新增使用者
透過將 CLUSTERNAME
、NEWUSER
及 PASSWORD
取代為適當的值來編輯下列變數。
# Set-ExecutionPolicy Unrestricted
# Begin user input; update values
$clusterName="CLUSTERNAME"
$user="NEWUSER"
$userpass='PASSWORD'
# End user input
$adminCredentials = Get-Credential -UserName "admin" -Message "Enter admin password"
$clusterName = $clusterName.ToLower()
$createUserUrl="https://$($clusterName).azurehdinsight.net/api/v1/users"
$createUserBody=@{
"Users/user_name" = "$user"
"Users/password" = "$userpass"
"Users/active" = "$true"
"Users/admin" = "$false"
} | ConvertTo-Json
# Create user
$statusCode =
Invoke-WebRequest `
-Uri $createUserUrl `
-Credential $adminCredentials `
-Method POST `
-Headers @{"X-Requested-By" = "ambari"} `
-Body $createUserBody | Select-Object -Expand StatusCode
if ($statusCode -eq 201) {
Write-Output "User is created: $user"
}
else
{
Write-Output 'User is not created'
Exit
}
$grantPrivilegeUrl="https://$($clusterName).azurehdinsight.net/api/v1/clusters/$($clusterName)/privileges"
$grantPrivilegeBody=@{
"PrivilegeInfo" = @{
"permission_name" = "CLUSTER.USER"
"principal_name" = "$user"
"principal_type" = "USER"
}
} | ConvertTo-Json
# Grant privileges
$statusCode =
Invoke-WebRequest `
-Uri $grantPrivilegeUrl `
-Credential $adminCredentials `
-Method POST `
-Headers @{"X-Requested-By" = "ambari"} `
-Body $grantPrivilegeBody | Select-Object -Expand StatusCode
if ($statusCode -eq 201) {
Write-Output 'Privilege is granted'
}
else
{
Write-Output 'Privilege is not granted'
Exit
}
Write-Host "Pausing for 100 seconds"
Start-Sleep -s 100
$userCredentials = "$($user):$($userpass)"
$encodedUserCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($userCredentials))
$zookeeperUrlHeaders = @{ Authorization = "Basic $encodedUserCredentials" }
$getZookeeperurl="https://$($clusterName).azurehdinsight.net/api/v1/clusters/$($clusterName)/services/ZOOKEEPER/components/ZOOKEEPER_SERVER"
# Perform query with new user
$zookeeperHosts =
Invoke-WebRequest `
-Uri $getZookeeperurl `
-Method Get `
-Headers $zookeeperUrlHeaders
Write-Output $zookeeperHosts
透過 Curl 新增使用者
透過將 CLUSTERNAME
、ADMINPASSWORD
、NEWUSER
及 USERPASSWORD
取代為適當的值來編輯下列變數。 指令碼是設計為使用 bash 執行。 需要稍微修改 Windows 命令提示字元。
export CLUSTER_NAME="CLUSTERNAME"
export ADMIN_PASSWORD='ADMINPASSWORD'
export USER="NEWUSER"
export USER_PASSWORD='USERPASSWORD'
# create user
curl -k -u admin:$ADMIN_PASSWORD -H "X-Requested-By: ambari" -X POST \
-d "{\"Users/user_name\":\"$USER\",\"Users/password\":\"$USER_PASSWORD\",\"Users/active\":\"true\",\"Users/admin\":\"false\"}" \
https://$CLUSTER_NAME.azurehdinsight.net/api/v1/users
echo "user created: $USER"
# grant permissions
curl -k -u admin:$ADMIN_PASSWORD -H "X-Requested-By: ambari" -X POST \
-d '[{"PrivilegeInfo":{"permission_name":"CLUSTER.USER","principal_name":"'$USER'","principal_type":"USER"}}]' \
https://$CLUSTER_NAME.azurehdinsight.net/api/v1/clusters/$CLUSTER_NAME/privileges
echo "Privilege is granted"
echo "Pausing for 100 seconds"
sleep 10s
# perform query using new user account
curl -k -u $USER:$USER_PASSWORD -H "X-Requested-By: ambari" \
-X GET "https://$CLUSTER_NAME.azurehdinsight.net/api/v1/clusters/$CLUSTER_NAME/services/ZOOKEEPER/components/ZOOKEEPER_SERVER"
授與對 Apache Hive 檢視的權限
Ambari 隨附 Apache Hive 和 Apache TEZ 等等的檢視執行個體。 若要授與對一或多個 Hive 檢視執行個體的存取權,請移至 Ambari 管理頁面。
從管理頁面中,選取左邊 [檢視] \(Views\) 功能表標題底下的 [檢視] \(Views\) 連結。
在 [檢視] \(Views\) 頁面上,展開 [HIVE] 資料列。 將 Hive 服務新增到叢集時,會建立一個預設的 Hive 檢視。 您也可以視需要建立更多 Hive 檢視執行個體。 選取一個 Hive 檢視:
向下捲動到 [檢視] \(Views\) 頁面底部。 在 [權限] \(Permissions\) 區段底下,您有兩個選項來授與網域使用者對檢視的權限:
將權限授與這些使用者
將權限授與這些群組
若要新增使用者,請選取 [Add User] \(新增使用者\) 按鈕。
開始輸入使用者名稱,您將會看到先前已定義之名稱的下拉式清單。
選取使用者名稱,或完成使用者名稱輸入。 若要新增此使用者名稱作為新使用者,請選取 [New] \(新增\) 按鈕。
若要儲存您的變更,請選取藍色核取方塊。
若要新增群組,請選取 [Add Group] \(新增群組\) 按鈕。
開始輸入群組名稱。 不論是選取現有的群組名稱,還是新增新的群組,程序都與新增使用者相同。
若要儲存您的變更,請選取藍色核取方塊。
當您想要指派權限給使用者來使用該檢視,但不想要讓使用者成為具有額外權限之群組的成員時,將使用者直接新增到檢視會相當有用。 若要降低系統管理額外負擔,將權限指派給群組可能會是更簡單的方式。
授與對 Apache TEZ 檢視的權限
Apache TEZ 檢視執行個體可讓使用者對所有 Tez 作業 (由 Apache Hive 查詢和 Apache Pig 指令碼所提交) 進行監視和偵錯。 佈建叢集時,會建立一個預設的 Tez 檢視執行個體。
若要將使用者和群組指派給 Tez 檢視執行個體,請依照先前所述,展開 [Views] \(檢視\) 頁面上的 [TEZ]TEZ 資料列。
若要新增使用者或群組,請重複上一節中的步驟 3 到 5。
將使用者指派給角色
使用者和群組有 5 個安全性角色,依存取權限由高至低列出:
- 叢集系統管理員
- 叢集操作員
- 服務管理員
- 服務操作員
- 叢集使用者
若要管理角色,請移至 Ambari 管理頁面,然後選取左邊 [Clusters] \(叢集\) 功能表群組內的 [Roles] \(角色\) 連結。
若要查看賦予每個角色的權限清單,請按一下 [Roles] \(角色\) 頁面上 [Roles] \(角色\) 資料表標頭旁邊的藍色問號。
在此頁面上,有兩個不同的檢視,可供您用來管理使用者和群組的角色:[Block] \(區塊\) 和 [List] \(清單\)。
[區塊] 檢視
[封鎖] 檢視會在自己的數據列中顯示每個角色,並提供 Assign roles to these users
和 *Assign roles to these groups
選項,如先前所述。
清單檢視
[List] \(清單\) 檢視提供快速編輯功能,分成兩個類別:[Users] \(使用者\) 和 [Groups] \(群組\)。
[List] \(清單\) 檢視的 [Users] \(使用者\) 類別會顯示所有使用者的清單,可讓您從下拉式清單中選取每個使用者的角色。
[List] \(清單\) 檢視的 [Groups] \(群組\) 類別會顯示所有群組,以及指派給每個群組的角色。 在我們的範例中,群組清單是透過同步處理,從叢集 [Domain] \(網域\) 設定之 [Access user group] \(存取使用者群組\) 屬性中指定的 Microsoft Entra 群組取得。 請參閱建立啟用 ESP 的 HDInsight 叢集。
在上圖中, Hive 使用者 群組會獲 指派叢集使用者 角色。 這是一個唯讀角色,可讓該群組的使用者檢視服務組態和叢集計量,但無法進行變更。
以僅具有檢視權限的使用者身分登入 Ambari
我們已經為 Microsoft Entra 網域使用者 "hiveuser1" 指派對 Hive 和 Tez 檢視的權限。 當我們啟動 Ambari Web UI 並輸入此使用者的網域認證 (電子郵件格式的 Microsoft Entra 使用者名稱,以及密碼) 時,系統會將此使用者重新導向到 Ambari [Views] \(檢視\) 頁面。 從此頁面中,使用者可以選取任何可存取的檢視。 使用者無法瀏覽網站的任何其他部分,包括儀表板、服務、主機、警示或系統管理員頁面。
以叢集使用者身分登入 Ambari
我們已經將 Microsoft Entra 網域使用者 "hiveuser2" 指派給 [Cluster User] \(叢集使用者\) 角色。 此角色能夠存取儀表板及所有功能表項目。 叢集使用者獲允許使用的選項比系統管理員少。 例如,hiveuser2 可以檢視每個服務的組態,但無法加以編輯。