创建与开发终端节点相关联的笔记本服务器 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

创建与开发终端节点相关联的笔记本服务器

一个用于测试您的 ETL 代码的方法是使用运行在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上的 Apache Zeppelin 笔记本。当您使用 AWS Glue 在 Amazon EC2 实例上创建笔记本服务器时,必须执行几项操作以安全地设置您的环境。已构建开发终端节点,可从单个客户端进行访问。为了简化您的设置,请先创建在 Amazon EC2 上从笔记本服务器使用的开发终端节点。

以下部分介绍一些可进行的选择和执行的操作以安全创建笔记本服务器。这些说明执行以下任务:

  • 创建开发终端节点。

  • 在 Amazon EC2 实例上启动笔记本服务器。

  • 将笔记本服务器安全地连接到开发终端节点。

  • 将 Web 浏览器安全地连接到笔记本服务器。

AWS Glue 控制台上的选择

有关使用 AWS Glue 控制台管理开发终端节点的更多信息,请参阅查看开发终端节点属性

创建开发终端节点和笔记本服务器

  1. 登录 AWS 管理控制台并通过以下网址打开 AWS Glue 控制台:https://console.amazonaws.cn/glue/

  2. 在导航窗格中选择开发终端节点,然后选择添加终端节点以创建开发终端节点。

  3. 遵循向导中的步骤创建一个您计划与运行在 Amazon EC2 上的笔记本服务器相关联的开发终端节点。

    添加 SSH 公有密钥 (可选) 步骤中,将公有密钥留空。在稍后的步骤中,您将生成公有密钥并将其推送到开发终端节点,以及生成相应的私有密钥并将其推送到运行笔记本服务器的 Amazon EC2 实例。

  4. 当预配置开发终端节点时,继续执行在 Amazon EC2 上创建笔记本服务器的步骤。在开发终端节点列表页面上,选择您刚刚创建的开发终端节点。选择 Action (操作)Create Zeppelin notebook server (创建 Zeppelin 笔记本服务器),并填写有关您的笔记本服务器的信息。(有关更多信息,请参阅查看开发终端节点属性。)

  5. 选择 Finish。该笔记本服务器使用 AWS CloudFormation 堆栈创建。AWS Glue 控制台为您提供访问 Amazon EC2 实例所需的信息。

    在笔记本服务器准备就绪之后,您必须对 Amazon EC2 实例运行脚本以完成设置。

对 Amazon EC2 实例设置访问的操作

在您创建开发终端节点和笔记本服务器之后,请完成以下操作以为您的笔记本服务器设置 Amazon EC2 实例。

设置对笔记本服务器的访问权限

  1. 如果您的本地桌面运行的是 Windows,则您需要一种方式来运行命令 SSH 和 SCP 以与 Amazon EC2 实例进行交互。您可以在 Amazon EC2 文档中找到连接说明。有关更多信息,请参阅使用 PuTTY 从 Windows 连接到 Linux 实例

  2. 您可以使用 HTTPS URL 连接到您的 Zeppelin 笔记本。这在您的 Amazon EC2 实例上需要一个安全套接字层 (SSL) 证书。该笔记本服务器必须为 Web 浏览器提供证书,以验证其真实性并允许加密流量来处理敏感数据,如密码。

    如果您有证书颁发机构 (CA) 颁发的 SSL 证书,请将您的 SSL 证书密钥存储复制到 Amazon EC2 实例的 ec2-user 具有写入访问权限的路径,例如 /home/ec2-user/。有关复制证书scp 命令的信息,请参阅 AWS Glue 控制台笔记本服务器详细信息。例如,打开终端窗口,并输入以下命令:

    scp -i ec2-private-key keystore.jks ec2-user@dns-address-of-ec2-instance:~/keystore.jks

    必须使用密码创建复制到 Amazon EC2 实例的信任存储库 keystore.jks

    ec2-private-key 是访问 Amazon EC2 实例所需的密钥。当您创建笔记本服务器时,您需要提供 Amazon EC2 密钥对并将此 EC2 私有密钥保存到本地计算机。您可能需要编辑复制证书命令以指向本地计算机上的密钥文件。您还可以在笔记本服务器的 Amazon EC2 控制台详细信息中找到此密钥文件名。

    dns-address-of-ec2-instance 是在其中复制密钥存储的 Amazon EC2 实例的地址。

    注意

    有多种方法可以生成 SSL 证书。使用由证书颁发机构 (CA) 生成的证书是一种安全的最佳实践。您可能需要获得组织中管理员的帮助才能获取证书。在为笔记本服务器创建密钥存储时,请遵循组织的策略。有关更多信息,请参阅 Wikipedia 中的证书颁发机构

    另一种方法是使用笔记本服务器 Amazon EC2 实例上的脚本生成自签名证书。但是,使用此方法,在将每个本地计算机连接到笔记本服务器之前,必须将其配置为信任生成的证书。此外,当生成的证书过期时,必须在所有本地计算机上生成并信任新的证书。有关设置的更多信息,请参阅自签名证书。有关更多信息,请参阅 Wikipedia 中的自签名证书

  3. 使用 SSH,连接到运行您的笔记本服务器的 Amazon EC2 实例;例如:

    ssh -i ec2-private-key ec2-user@dns-address-of-ec2-instance

    ec2-private-key 是访问 Amazon EC2 实例所需的密钥。当您创建笔记本服务器时,您需要提供 Amazon EC2 密钥对并将此 EC2 私有密钥保存到本地计算机。您可能需要编辑复制证书命令以指向本地计算机上的密钥文件。您还可以在笔记本服务器的 Amazon EC2 控制台详细信息中找到此密钥文件名。

    dns-address-of-ec2-instance 是在其中复制密钥存储的 Amazon EC2 实例的地址。

  4. 从主目录 /home/ec2-user/ 中运行 ./setup_notebook_server.py 脚本。AWS Glue 已创建此脚本并将其放置在 Amazon EC2 实例上。此脚本将执行以下操作:

    • 要求输入 Zeppelin 笔记本的密码:密码是 SHA-256 哈希以及加盐和迭代的,随机 128 位加盐哈希保存在具有限制访问权限的 shiro.ini 文件中。这是 Apache Shiro(Apache Zeppelin 使用的授权包)可用的最佳实践。

    • 生成 SSH 公有密钥和私有密钥:该脚本将覆盖与笔记本服务器相关联的开发终端节点上的任何现有 SSH 公有密钥。因此,连接到此开发终端节点的任何其他笔记本服务器、读取-求值-输出循环 (REPL) 或 IDE 无法再进行连接。

    • 验证或生成一个 SSL 证书:使用通过证书颁发机构 (CA) 生成的 SSL 证书或使用此脚本生成证书。如果您复制了证书,则此脚本会要求提供密钥存储文件的位置。提供 Amazon EC2 实例上的完整路径,例如 /home/ec2-user/keystore.jks。已验证 SSL 证书。

    setup_notebook_server.py 脚本的以下示例输出会生成一个自签名 SSL 证书。

    Starting notebook server setup. See AWS Glue documentation for more details. Press Enter to continue... Creating password for Zeppelin user admin Type the password required to access your Zeppelin notebook: Confirm password: Updating user credentials for Zeppelin user admin Zeppelin username and password saved. Setting up SSH tunnel to devEndpoint for notebook connection. Do you want a SSH key pair to be generated on the instance? WARNING this will replace any existing public key on the DevEndpoint [y/n] y Generating SSH key pair /home/ec2-user/dev.pem Generating public/private rsa key pair. Your identification has been saved in /home/ec2-user/dev.pem. Your public key has been saved in /home/ec2-user/dev.pem.pub. The key fingerprint is: 26:d2:71:74:b8:91:48:06:e8:04:55:ee:a8:af:02:22 ec2-user@ip-10-0-0-142 The key's randomart image is: +--[ RSA 2048]----+ |.o.oooo..o. | | o. ...+. | | o . . .o | | .o . o. | | . o o S | |E. . o | |= | |.. | |o.. | +-----------------+ Attempting to reach AWS Glue to update DevEndpoint's public key. This might take a while. Waiting for DevEndpoint update to complete... Waiting for DevEndpoint update to complete... Waiting for DevEndpoint update to complete... DevEndpoint updated to use the public key generated. Configuring Zeppelin server... ******************** We will configure Zeppelin to be a HTTPS server. You can upload a CA signed certificate for the server to consume (recommended). Or you can choose to have a self-signed certificate created. See AWS Glue documentation for additional information on using SSL/TLS certificates. ******************** Do you have a JKS keystore to encrypt HTTPS requests? If not, a self-signed certificate will be generated. [y/n] n Generating self-signed SSL/TLS certificate at /home/ec2-user/ec2-192-0-2-0.compute-1.amazonaws.com.jks Self-signed certificates successfully generated. Exporting the public key certificate to /home/ec2-user/ec2-192-0-2-0.compute-1.amazonaws.com.der Certificate stored in file /home/ec2-user/ec2-192-0-2-0.compute-1.amazonaws.com.der Configuring Zeppelin to use the keystore for SSL connection... Zeppelin server is now configured to use SSL. SHA256 Fingerprint=53:39:12:0A:2B:A5:4A:37:07:A0:33:34:15:B7:2B:6F:ED:35:59:01:B9:43:AF:B9:50:55:E4:A2:8B:3B:59:E6 ********** The public key certificate is exported to /home/ec2-user/ec2-192-0-2-0.compute-1.amazonaws.com.der The SHA-256 fingerprint for the certificate is 53:39:12:0A:2B:A5:4A:37:07:A0:33:34:15:B7:2B:6F:ED:35:59:01:B9:43:AF:B9:50:55:E4:A2:8B:3B:59:E6. You may need it when importing the certificate to the client. See AWS Glue documentation for more details. ********** Press Enter to continue... All settings done! Starting SSH tunnel and Zeppelin... autossh start/running, process 6074 Done. Notebook server setup is complete. Notebook server is ready. See /home/ec2-user/zeppelin/logs/ for Zeppelin log files.
  5. 检查位于 /home/ec2-user/zeppelin/logs/ 的日志文件中尝试启动 Zeppelin 服务器的错误。

本地计算机上连接到 Zeppelin 服务器的操作

在创建开发终端节点和笔记本服务器后,连接到您的 Zeppelin 笔记本。根据设置环境的方式,您可以通过以下方式之一进行连接。

  1. 使用可信 CA 证书进行连接。 如果在 Amazon EC2 实例上设置 Zeppelin 服务器时,您提供了证书颁发机构 (CA) 颁发的 SSL 证书,请选择此方法。要在端口 443 上连接 HTTPS,请打开 Web 浏览器并输入笔记本服务器的 URL。您可以在笔记本服务器的开发笔记本详细信息页面上找到此 URL。输入 HTTPS URL 字段的内容;例如:

    https://public-dns-address-of-ec2-instance:443
  2. 使用自签名证书进行连接。 如果运行 setup_notebook_server.py 脚本以生成 SSL 证书,请首先信任 Web 浏览器与笔记本服务器之间的连接。此操作的详细信息因操作系统和 Web 浏览器而异。常见工作流程如下:

    1. 从本地计算机访问 SSL 证书。对于某些情形,这需要您将 SSL 证书从 Amazon EC2 实例复制到本地计算机;例如:

      scp -i path-to-ec2-private-key ec2-user@notebook-server-dns:/home/ec2-user/notebook-server-dns.der notebook-server-dns.der
    2. 将证书导入您的操作系统和浏览器使用的证书管理器中并查看证书(或者先查看再导入证书)。验证其是否与 Amazon EC2 实例上生成的证书匹配。

    Mozilla Firefox 浏览器:

    在 Firefox 中,您可能会遇到类似 Your connection is not secure (您的连接不安全) 这样的错误。建立连接的一般步骤如下所示(步骤可能因 Firefox 版本而异):

    1. 找到选项首选项页面,导航到该页面并选择查看证书。此选项可能会出现在隐私安全高级选项卡中。

    2. 证书管理器窗口中,选择服务器选项卡,然后选择添加例外

    3. 输入 Amazon EC2 上的笔记本服务器的 HTTPS 位置,然后选择获取证书。选择查看

    4. 验证 Common Name (CN) (公用名 (CN)) 是否与笔记本服务器 Amazon EC2 实例的 DNS 匹配。此外,还需验证 SHA-256 指纹是否与 Amazon EC2 实例上生成的证书的指纹匹配。您可以在 setup_notebook_server.py 脚本的输出中,或者在笔记本实例上通过运行 openssl 命令来查找证书的 SHA-256 指纹。

      openssl x509 -noout -fingerprint -sha256 -inform der -in path-to-certificate.der
    5. 如果值匹配,请确认以信任该证书。

    6. 当证书过期后,请在 Amazon EC2 实例上生成新证书并在本地计算机上信任它。

    macOS 上的 Google Chrome 浏览器:

    在使用 macOS 上的 Chrome 时,您可能会遇到类似 Your connection is not private (您的连接不是私有的) 这样的错误。建立连接的一般步骤如下所示:

    1. 将 SSL 证书从 Amazon EC2 实例中复制到本地计算机。

    2. 选择首选项设置以查找设置页面。导航到高级部分,然后找到隐私与安全性部分。选择管理证书

    3. Keychain Access 窗口中,导航到证书,然后选择文件导入项目以导入 SSL 证书。

    4. 验证 Common Name (CN) (公用名 (CN)) 是否与笔记本服务器 Amazon EC2 实例的 DNS 匹配。此外,还需验证 SHA-256 指纹是否与 Amazon EC2 实例上生成的证书的指纹匹配。您可以在 setup_notebook_server.py 脚本的输出中,或者在笔记本实例上通过运行 openssl 命令来查找证书的 SHA-256 指纹。

      openssl x509 -noout -fingerprint -sha256 -inform der -in path-to-certificate.der
    5. 通过设置始终信任以信任证书。

    6. 当证书过期后,请在 Amazon EC2 实例上生成新证书并在本地计算机上信任它。

    Windows 上的 Chrome 浏览器:

    在使用 Windows 上的 Chrome 时,您可能会遇到类似 Your connection is not private (您的连接不是私有的) 这样的错误。建立连接的一般步骤如下所示:

    1. 将 SSL 证书从 Amazon EC2 实例中复制到本地计算机。

    2. 找到设置页面,导航到高级部分,然后查找隐私与安全性部分。选择管理证书

    3. 证书窗口中,导航到受信任的根证书颁发机构选项卡,并选择导入以导入 SSL 证书。

    4. 将该证书放在受信任的根证书颁发机构证书存储中。

    5. 通过安装证书来信任。

    6. 验证浏览器中证书显示的 SHA-1 指纹是否与 Amazon EC2 实例上生成的证书的指纹匹配。要在浏览器中查找证书,请导航到受信任的根证书颁发机构列表并选择颁发给 Amazon EC2 实例的证书。选择查看证书,选择详细信息,然后查看指纹sha1。您可以通过在 Amazon EC2 实例上运行 openssl 命令找到证书的相应 SHA-1 指纹。

      openssl x509 -noout -fingerprint -sha1 -inform der -in path-to-certificate.der
    7. 当证书过期后,请在 Amazon EC2 实例上生成新证书并在本地计算机上信任它。

    Windows 上的 Microsoft Internet Explorer 浏览器:

    在使用 Windows 上的 Internet Explorer 时,您可能会遇到类似 Your connection is not private (您的连接不是私有的) 这样的错误。建立连接的一般步骤如下所示:

    1. 将 SSL 证书从 Amazon EC2 实例中复制到本地计算机。

    2. 找到 Internet 选项页面,导航到内容选项卡,然后查找证书部分。

    3. 证书窗口中,导航到受信任的根证书颁发机构选项卡,并选择导入以导入 SSL 证书。

    4. 将该证书放在受信任的根证书颁发机构证书存储中。

    5. 通过安装证书来信任。

    6. 验证浏览器中证书显示的 SHA-1 指纹是否与 Amazon EC2 实例上生成的证书的指纹匹配。要在浏览器中查找证书,请导航到受信任的根证书颁发机构列表并选择颁发给 Amazon EC2 实例的证书。选择查看证书,选择详细信息,然后查看指纹sha1。您可以通过在 Amazon EC2 实例上运行 openssl 命令找到证书的相应 SHA-1 指纹。

      openssl x509 -noout -fingerprint -sha1 -inform der -in path-to-certificate.der
    7. 当证书过期后,请在 Amazon EC2 实例上生成新证书并在本地计算机上信任它。

    信任证书后,要在端口 443 上连接 HTTPS,请打开 Web 浏览器并输入笔记本服务器的 URL。您可以在笔记本服务器的开发笔记本详细信息页面上找到此 URL。输入 HTTPS URL 字段的内容;例如:

    https://public-dns-address-of-ec2-instance:443