2
2
3
3
set -e
4
4
5
- KERBEROS=${KERBEROS-" false" }
5
+ KERBEROS=" ${KERBEROS-false} "
6
6
AES=${AES-" false" }
7
7
if [ " $DATA_TRANSFER_PROTECTION " = " privacy" ]; then
8
8
KERBEROS=" true"
15
15
ENCRYPT_DATA_TRANSFER=" false"
16
16
fi
17
17
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
+
18
25
CONF_AUTHENTICATION=" simple"
19
26
KERBEROS_REALM=" EXAMPLE.COM"
20
27
KERBEROS_PRINCIPLE=" administrator"
21
28
KERBEROS_PASSWORD=" password1234"
22
- if [ $KERBEROS = " true" ]; then
29
+ if [ " $KERBEROS " = " true" ]; then
23
30
CONF_AUTHENTICATION=" kerberos"
24
31
25
32
HOSTNAME=$( hostname)
50
57
sudo apt-get install -y krb5-user krb5-kdc krb5-admin-server
51
58
52
59
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
54
61
sudo kadmin.local -q " addprinc -randkey $p /$HOSTNAME @$KERBEROS_REALM "
55
62
sudo kadmin.local -q " addprinc -randkey $p /localhost@$KERBEROS_REALM "
56
63
sudo kadmin.local -q " xst -k /tmp/$p .keytab $p /$HOSTNAME @$KERBEROS_REALM "
57
64
sudo kadmin.local -q " xst -k /tmp/$p .keytab $p /localhost@$KERBEROS_REALM "
58
65
sudo chmod +rx /tmp/$p .keytab
59
66
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 "
60
70
61
71
echo " Restarting krb services..."
62
72
sudo service krb5-kdc restart
@@ -116,6 +126,10 @@ sudo tee $HADOOP_ROOT/etc/hadoop/core-site.xml <<EOF
116
126
<name>hadoop.rpc.protection</name>
117
127
<value>$RPC_PROTECTION </value>
118
128
</property>
129
+ <property>
130
+ <name>hadoop.security.key.provider.path</name>
131
+ <value>$CONF_KMS_PROVIDER </value>
132
+ </property>
119
133
</configuration>
120
134
EOF
121
135
@@ -172,6 +186,41 @@ $HADOOP_ROOT/bin/hdfs namenode -format
172
186
sudo groupadd hadoop
173
187
sudo usermod -a -G hadoop $USER
174
188
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
+
175
224
echo " Starting namenode..."
176
225
$HADOOP_ROOT /bin/hdfs namenode > /tmp/hdfs/namenode.log 2>&1 &
177
226
@@ -183,5 +232,13 @@ sleep 5
183
232
echo " Waiting for cluster to exit safe mode..."
184
233
$HADOOP_ROOT /bin/hdfs dfsadmin -safemode wait
185
234
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
+
186
242
echo " 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