从您的笔记本电脑连接到 Amazon EMR 集群 - Amazon SageMaker

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从您的笔记本电脑连接到 Amazon EMR 集群

如果您在 Studio 中通过 Jupyter 笔记本连接到 Amazon EMR 集群,则可能需要执行其他设置。具体而言,以下讨论涉及两个问题:

  • 将参数传递到您的 Amazon EMR 连接命令中。在 SparkMagic 内核中,由于 Papermill 传递参数的方式和 SparkMagic 接收参数的方式不同,您传递给 Amazon EMR 连接命令的参数可能无法按预期工作。解决这一限制的办法是将参数作为环境变量传递。有关此问题和解决方法的更多详细信息,请参阅将参数传递给您的EMR连接命令

  • 将用户证书传递给 Kerberos 或经过HTTP基本身份验证的 Amazon 集群。LDAP EMR在交互模式下,Studio 会在弹出表单中要求您提供凭证,您可以在其中输入登录凭证。在非交互式计划的笔记本中,您必须通过 AWS Secrets Manager传递它们。有关如何在安排的笔记本作业 AWS Secrets Manager 中使用这些的更多详细信息,请参阅将用户证书传递给您的 Kerberos 或HTTP基本身份验证LDAP的 Amazon 集群 EMR

将参数传递给您的EMR连接命令

如果您在 SparkMagic PySpark 和 Spark 内核中使用图像并想要参数化EMR连接命令,请在 “环境变量” 字段中提供您的参数,而不是 “Create Job” 表单(在 “其他选项” 下拉菜单中)的 “参数” 字段。确保 Jupyter 笔记本中的EMR连接命令将这些参数作为环境变量传递。例如,假设您在创建作业时将 cluster-id 作为环境变量传递。您的EMR连接命令应如下所示:

%%local import os
%sm_analytics emr connect —cluster-id {os.getenv('cluster_id')} --auth-type None

您需要这种解决方法来满足 SparkMagic 和 Papermill 的要求。对于后台上下文, SparkMagic 内核希望%%local魔法命令伴随您定义的任何局部变量。不过,Papermill 不会通过您的覆盖来传递 %%local 魔术命令。为了解决这个 Papermill 限制,必须在环境变量字段中将参数作为环境变量提供。

将用户证书传递给您的 Kerberos 或HTTP基本身份验证LDAP的 Amazon 集群 EMR

要与使用 Kerberos 或HTTP基本身份验证的 Amazon EMR 集群建立安全连接,您可以使用 AWS Secrets Manager 向您的连接命令传递用户证书。LDAP有关如何创建 Secrets Manager 密钥的信息,请参阅创建 AWS Secrets Manager 密钥。您的密码必须包含您的用户名和密码。您通过 --secrets 参数传递密钥,如以下示例所示:

%sm_analytics emr connect --cluster-id j_abcde12345 --auth Kerberos --secret aws_secret_id_123

您的管理员可以使用 attribute-based-access-control (ABAC) 方法设置灵活的访问策略,该方法根据特殊标签分配访问权限。您可以设置灵活的访问权限,为账户中的所有用户创建单个密钥,或为每个用户分别创建一个密钥。以下代码示例演示了这些场景:

为账户中的所有用户创建单个密钥

{ "Version" : "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : {"AWS" : "arn:aws:iam::AWS_ACCOUNT_ID:role/service-role/AmazonSageMaker-ExecutionRole-20190101T012345"}, "Action" : "secretsmanager:GetSecretValue", "Resource" : [ "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes123-1a2b3c", "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes456-4d5e6f", "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes789-7g8h9i" ] } ] }

为每个用户分别创建不同的密钥

您可以使用 PrincipleTag 标签分别为每个用户创建不同的密钥,如以下示例所示:

{ "Version" : "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : {"AWS" : "arn:aws:iam::AWS_ACCOUNT_ID:role/service-role/AmazonSageMaker-ExecutionRole-20190101T012345"}, "Condition" : { "StringEquals" : { "aws:ResourceTag/user-identity": "${aws:PrincipalTag/user-identity}" } }, "Action" : "secretsmanager:GetSecretValue", "Resource" : [ "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes123-1a2b3c", "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes456-4d5e6f", "arn:aws:secretsmanager:us-west-2:AWS_ACCOUNT_ID:secret:aes789-7g8h9i" ] } ] }