Tutorial: Configure a Cluster-Dedicated KDC - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

Tutorial: Configure a Cluster-Dedicated KDC

本主题指导您创建群集专用群集 key distribution center (KDC),手动将Linux用户帐户添加到所有群集节点,将Kerberos主体添加到主节点上的KDC,并确保客户端计算机安装了Kerberos客户端。

有关AmazonEMR支持Kerberos和KDC的更多信息,以及MITKerberos文件的链接,请参阅 Use Kerberos Authentication.

Step 1: Create the Kerberized Cluster

  1. 创建启用 Kerberos 的安全配置。以下示例演示使用 AWS CLI 将安全配置指定为内联 JSON 结构的 create-security-configuration 命令。您也可以引用本地保存的文件。

    aws emr create-security-configuration --name MyKerberosConfig \ --security-configuration '{"AuthenticationConfiguration": {"KerberosConfiguration": {"Provider": "ClusterDedicatedKdc", "ClusterDedicatedKdcConfiguration": {"TicketLifetimeInHours": 24}}}}}'
  2. 创建引用安全配置、指定集群的 Kerberos 属性并使用引导操作添加 Linux 账户的集群。以下示例演示使用 AWS CLI 的 create-cluster 命令。命令引用您在上面创建的安全配置, MyKerberosConfig。它还引用了简单的脚本, createlinuxusers.sh,作为引导操作,您创建并上传到 Amazon S3 在创建群集之前。

    aws emr create-cluster --name "MyKerberosCluster" \ --release-label emr-5.30.1 \ --instance-type m5.xlarge \ --instance-count 3 \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=MyEC2KeyPair \ --service-role EMR_DefaultRole \ --security-configuration MyKerberosConfig \ --applications Name=Hadoop Name=Hive Name=Oozie Name=Hue Name=HCatalog Name=Spark \ --kerberos-attributes Realm=EC2.INTERNAL,\ KdcAdminPassword=MyClusterKDCAdminPwd \ --bootstrap-actions Path=s3://mybucket/createlinuxusers.sh

    以下示例演示了 createlinuxusers.sh 脚本的内容,它将 user1、user2 和 user3 添加到集群中的每个节点。在下一个步骤中,您将这些用户添加为 KDC 委托人。

    #!/bin/bash sudo adduser user1 sudo adduser user2 sudo adduser user3

Step 2: Add Principals to the KDC, Create HDFS User Directories, and Configure SSH

主节点上运行的 KDC 需要为本地主机和您在集群上创建的每个用户添加委托人。您还可以为每个用户创建 HDFS 目录 (如果他们需要连接到集群并运行 Hadoop 任务)。同样,配置 SSH 服务以启用 GSSAPI 身份验证,这是 Kerberos 所必需的。在启用 GSSAPI 后,重新启动 SSH 服务。

完成这些任务的最简单方法是向集群提交步骤。下面的示例将 bash 脚本 configurekdc.sh 提交到您在上一步中创建的集群,引用其集群 ID。该脚本会保存到 Amazon S3 中。或者,您可以使用 EC2 密钥对连接到主节点来运行命令或在集群创建过程中提交步骤。

aws emr add-steps --cluster-id j-01234567 --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3://myregion.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://mybucket/configurekdc.sh"]

以下示例演示了 configurekdc.sh 脚本的内容。

#!/bin/bash #Add a principal to the KDC for the master node, using the master node's returned host name sudo kadmin.local -q "ktadd -k /etc/krb5.keytab host/`hostname -f`" #Declare an associative array of user names and passwords to add declare -A arr arr=([user1]=pwd1 [user2]=pwd2 [user3]=pwd3) for i in ${!arr[@]}; do #Assign plain language variables for clarity name=${i} password=${arr[${i}]} # Create principal for sshuser in the master node and require a new password on first logon sudo kadmin.local -q "addprinc -pw $password +needchange $name" #Add user hdfs directory hdfs dfs -mkdir /user/$name #Change owner of user's hdfs directory to user hdfs dfs -chown $name:$name /user/$name done # Enable GSSAPI authentication for SSH and restart SSH service sudo sed -i 's/^.*GSSAPIAuthentication.*$/GSSAPIAuthentication yes/' /etc/ssh/sshd_config sudo sed -i 's/^.*GSSAPICleanupCredentials.*$/GSSAPICleanupCredentials yes/' /etc/ssh/sshd_config sudo /etc/init.d/sshd restart

您添加的用户现在应该可以使用 SSH 连接到集群。有关更多信息,请参阅 Using SSH to Connect to Kerberized Clusters。)