22
33set -e
44
5- KERBEROS=${KERBEROS-" false" }
5+ KERBEROS=" ${KERBEROS-false} "
66AES=${AES-" false" }
77if [ " $DATA_TRANSFER_PROTECTION " = " privacy" ]; then
88 KERBEROS=" true"
1515 ENCRYPT_DATA_TRANSFER=" false"
1616fi
1717
18+ CONF_KMS_PROVIDER=" "
19+ TRANSPARENT_ENCRYPTION=false
20+ if [ " $HADOOP_VERSION " != " 2.10.1" ]; then
21+ TRANSPARENT_ENCRYPTION=true
22+ CONF_KMS_PROVIDER=" kms://http@localhost:9600/kms"
23+ fi
24+
1825CONF_AUTHENTICATION=" simple"
1926KERBEROS_REALM=" EXAMPLE.COM"
2027KERBEROS_PRINCIPLE=" administrator"
2128KERBEROS_PASSWORD=" password1234"
22- if [ $KERBEROS = " true" ]; then
29+ if [ " $KERBEROS " = " true" ]; then
2330 CONF_AUTHENTICATION=" kerberos"
2431
2532 HOSTNAME=$( hostname)
5057 sudo apt-get install -y krb5-user krb5-kdc krb5-admin-server
5158
5259 printf " $KERBEROS_PASSWORD \n$KERBEROS_PASSWORD " | sudo kdb5_util -r " $KERBEROS_REALM " create -s
53- for p in nn dn $USER gohdfs1 gohdfs2; do
60+ for p in nn dn kms $USER gohdfs1 gohdfs2; do
5461 sudo kadmin.local -q " addprinc -randkey $p /$HOSTNAME @$KERBEROS_REALM "
5562 sudo kadmin.local -q " addprinc -randkey $p /localhost@$KERBEROS_REALM "
5663 sudo kadmin.local -q " xst -k /tmp/$p .keytab $p /$HOSTNAME @$KERBEROS_REALM "
5764 sudo kadmin.local -q " xst -k /tmp/$p .keytab $p /localhost@$KERBEROS_REALM "
5865 sudo chmod +rx /tmp/$p .keytab
5966 done
67+ # HTTP service for KMS
68+ sudo kadmin.local -q " addprinc -randkey HTTP/localhost@$KERBEROS_REALM "
69+ sudo kadmin.local -q " xst -k /tmp/kms.keytab HTTP/localhost@$KERBEROS_REALM "
6070
6171 echo " Restarting krb services..."
6272 sudo service krb5-kdc restart
@@ -116,6 +126,10 @@ sudo tee $HADOOP_ROOT/etc/hadoop/core-site.xml <<EOF
116126 <name>hadoop.rpc.protection</name>
117127 <value>$RPC_PROTECTION </value>
118128 </property>
129+ <property>
130+ <name>hadoop.security.key.provider.path</name>
131+ <value>$CONF_KMS_PROVIDER </value>
132+ </property>
119133</configuration>
120134EOF
121135
@@ -172,6 +186,41 @@ $HADOOP_ROOT/bin/hdfs namenode -format
172186sudo groupadd hadoop
173187sudo usermod -a -G hadoop $USER
174188
189+ sudo tee $HADOOP_ROOT /etc/hadoop/kms-site.xml << EOF
190+ <configuration>
191+ <property>
192+ <name>hadoop.kms.key.provider.uri</name>
193+ <value>jceks://file@/tmp/hdfs/kms.keystore</value>
194+ </property>
195+ <property>
196+ <name>hadoop.security.keystore.java-keystore-provider.password-file</name>
197+ <value>kms.keystore.password</value>
198+ </property>
199+ <property>
200+ <name>hadoop.kms.authentication.type</name>
201+ <value>$CONF_AUTHENTICATION </value>
202+ </property>
203+ <property>
204+ <name>hadoop.kms.authentication.kerberos.keytab</name>
205+ <value>/tmp/kms.keytab</value>
206+ </property>
207+ <property>
208+ <name>hadoop.kms.authentication.kerberos.principal</name>
209+ <value>HTTP/localhost@$KERBEROS_REALM </value>
210+ </property>
211+ </configuration>
212+ EOF
213+
214+ sudo tee $HADOOP_ROOT /etc/hadoop/kms.keystore.password << EOF
215+ 123456
216+ EOF
217+
218+ if [ " $TRANSPARENT_ENCRYPTION " = " true" ]; then
219+ echo " Starting KMS..."
220+ rm $HADOOP_ROOT /etc/hadoop/kms-log4j.properties
221+ $HADOOP_ROOT /bin/hadoop kms > /tmp/hdfs/kms.log 2>&1 &
222+ fi
223+
175224echo " Starting namenode..."
176225$HADOOP_ROOT /bin/hdfs namenode > /tmp/hdfs/namenode.log 2>&1 &
177226
@@ -183,5 +232,13 @@ sleep 5
183232echo " Waiting for cluster to exit safe mode..."
184233$HADOOP_ROOT /bin/hdfs dfsadmin -safemode wait
185234
235+ $HADOOP_ROOT /bin/hadoop fs -mkdir -p /_test/kms
236+ if [ " $TRANSPARENT_ENCRYPTION " = " true" ]; then
237+ echo " Prepare encrypted zone"
238+ $HADOOP_ROOT /bin/hadoop key create key1
239+ $HADOOP_ROOT /bin/hdfs crypto -createZone -keyName key1 -path /_test/kms
240+ fi
241+
186242echo " HADOOP_CONF_DIR=$( pwd) /$HADOOP_ROOT /etc/hadoop" >> $GITHUB_ENV
187- echo " $( pwd) /$HADOOP_ROOT /bin" >> $GITHUB_PATH
243+ echo " TRANSPARENT_ENCRYPTION=$TRANSPARENT_ENCRYPTION " >> $GITHUB_ENV
244+ echo " $( pwd) /$HADOOP_ROOT /bin" >> $GITHUB_PATH
0 commit comments