Active Directory存儲關於Windows域成員的信息,包括用戶和hosts。
verticause使用Kerberos協議來訪問這些信息,以便對Windows用戶進行Vertica數據庫的身份驗證。Kerberos協議使用principals 來標識用戶,並使用keytab文件來存儲用戶的密碼信息。您需要將keytab文件安裝到Vertica中,以使Vertica數據庫能夠以密碼方式對windows用戶進行身份驗證。
這個過程描述:
- 創建Vertica service principal。
- 導出這些principal的keytab文件
- 在Vertica數據庫中安裝keytab文件。這允許Vertica對Windows用戶進行身份驗證,並授予他們對Vertica數據庫的訪問權。
1
爲Vertica服務創建一個Windows account (principal) ,併爲集羣中的每個節點/主機創建一個Vertica host。下面過程爲運行在此節點上的主機verticanode01和vertica服務創建Windows帳戶。
當您創建這些帳戶時,請選擇以下內容:
- 用戶無法更改密碼
- 密碼永不過期
注意:您可以取消選擇密碼永不過期。但是,如果更改了這些用戶密碼,則必須重新創建keytab文件並將其重新安裝到Vertica中。這包括重複整個過程。
2
如果在HDFS上使用由Kerberos身份驗證保護的外部表,則必須啓用委託。爲此,訪問Active Directory Users and Computers對話框,右鍵單擊Vertica服務的Windows帳戶(主體),並選擇delegate。委託給任何服務時,請信任此用戶。
3
運行以下命令 create the keytab for the host verticanode01.dc.com node/host:
$ ktpass -out ./host.verticanode01.dc.com.keytab -princ host/verticanode01.dc.com@DC.COM -mapuser verticanode01
-mapop set -pass secret -ptype KRB5_NT_SRV_HST
4
運行以下命令爲vertica服務創建keytab:
$ ktpass -out ./vertica.verticanode01dc.com.keytab -princ vertica/verticanode01.dc.com@DC.COM -mapuser vertica
-mapop set -pass secret -ptype KRB5_NT_PRINCIPAL
5
運行以下命令來驗證服務主體名稱是否正確映射。您必須爲集羣中的每個節點運行以下命令:
$ setspn -L vertica
Registered ServicePrincipalNamefor CN=vertica,CN=Users,DC=dc,DC=com
vertica/verticanode01.dc.com
$ setspn -L verticanode01
Registered ServicePrincipalNamefor CN=verticanode01,CN=Users,DC=dc,DC=com
host/verticanode01.dc.com
6
將上面創建的keytabs, vertica.verticanode01.dc.com.keytab和host.verticanode01.dcc.com.keytab複製到Linux主機verticanode01.dc.com。
7
將keytab文件合併到一個單獨的keytab中:
[release@vertica krbTest]$ /usr/kerberos/sbin/ktutil
ktutil: rkt host.verticanode01.dc.com.keytab
ktutil: rkt vertica.verticanode01.dc.com.keytab
ktutil: list
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
1 3 host/verticanode01.dc.com@DC.COM
2 16 vertica/verticanode01.dc.com@DC.COM
ktutil: wkt verticanode01.dc.com.keytab
ktutil: exit
這將創建一個包含用於身份驗證的服務器主體的keytab文件。
8
將新的keytab文件複製到目錄目錄中。例如:
$ cp verticanode01.dc.com.keytab /home/dbadmin/VMart/v_vmart_nodennnn_catalog
9
測試keytab文件檢索票據的能力,以確保它從Vertica節點工作:
$ kinit vertica/verticanode01.dc.com -k -t verticanode01.dc.com.keytab
$ klist
Ticket cache: KFILE:/tmp/krb_ccache_1003
Default principal: vertica/verticanode01.dc.com@DC.COM
Valid starting Expires Service principal
04/08/2017 13:35:25 04/08/2017 23:35:25 krbtgt/DC.COM@DC.COM
renew until 04/15/2017 14:35:25
10
設置正確的權限和所有權的keytab文件:
$ chmod 600 verticanode01.dc.com.keytab
$ chown dbadmin:verticadba verticanode01.dc.com.keytab
11
使用ALTER數據庫設置以下Kerberos配置參數,向Vertica提供有關Kerberos主體的信息:
KerberosKeytabFile=<CATALOGDIR>/verticanode01.dc.com.keytab
KerberosRealm=DC.COM
KerberosServiceName=vertica
KerberosTicketDuration = 0
KerberosHostname=verticanode01.dc.com
12
重新啓動Vertica服務器。
13
按照以下步驟測試Kerberos設置,以確保所有客戶端都使用gss身份驗證方法。
From Vertica:
=> CREATE USER windowsuser1;
CREATE USER
=> CREATE AUTHENTICATION v_kerberos method 'gss' host '0.0.0.0/0';
CREATE AUTHENTICATION
=> ALTER AUTHENTICATION v_kerberos enable;
ALTER AUTHENTICATION
=> GRANT AUTHENTICATION v_kerberos to windowsuser1;
GRANT AUTHENTICATION
From the operating system command line:
$ kinit windowsuser1
$ vsql -U windowsuser1 -k vertica -K verticanode01.dc.com -h verticanode01.dc.com -c "select client_authentication_name,
authentication_method from sessions;"
client_authentication_name | authentication_method--
----------------------------+-----------------------
v_kerberos | GSS-Kerberos
(1 row)
14
運行KERBEROS_CONFIG_CHECK()來驗證Kerberos配置。KERBEROS_CONFIG_CHECK()驗證以下內容:
- kinit和kb5.conf文件的存在。
- 是否存在並設置了keytab文件
- 在數據庫中設置的Kerberos配置參數:
KerberosServiceName
KerberosHostname
KerberosRealm
Vertica Principal - Kerberos可以讀取Vertica keys
- Kerberos可以獲得Vertica主體的票據
- Vertica可以用kinit初始化keys