

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

# 从笔记本连接到 Amazon EMR 集群
<a name="scheduled-notebook-connect-emr"></a>

如果您从 Studio 的 Jupyter 笔记本连接到 Amazon EMR 集群，则可能需要执行其他设置。具体而言，以下讨论涉及两个问题：
+ **将参数传递到 Amazon EMR 连接命令**。在 SparkMagic 内核中，由于 Papermill 传递参数的方式和 SparkMagic 接收参数的方式存在差异，您传递给 Amazon EMR 连接命令的参数可能无法按预期工作。解决这一限制的办法是将参数作为环境变量传递。有关此问题和解决方法的更多详细信息，请参阅[将参数传递给 EMR 连接命令](#scheduled-notebook-connect-emr-pass-param)。
+ **将用户凭证传递给经过 Kerberos、LDAP 或 HTTP Basic Auth 身份验证的 Amazon EMR 集群**。在交互模式下，Studio 会在弹出表单中要求您提供凭证，您可以在其中输入登录凭证。在非交互式计划的笔记本中，您必须通过 Amazon Secrets Manager传递它们。有关如何在安排的笔记本作业 Amazon Secrets Manager 中使用的更多详细信息，请参阅[将用户凭证传递给经过 Kerberos、LDAP 或 HTTP Basic Auth 身份验证的 Amazon EMR 集群](#scheduled-notebook-connect-emr-credentials)。

## 将参数传递给 EMR 连接命令
<a name="scheduled-notebook-connect-emr-pass-param"></a>

如果您在 SparkMagic PySpark 和 Spark 内核中使用图像并想要参数化 EMR 连接命令，请在 “**环境变量**” 字段中提供您的参数，而不是 “创建 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、LDAP 或 HTTP Basic Auth 身份验证的 Amazon EMR 集群
<a name="scheduled-notebook-connect-emr-credentials"></a>

要与使用 Kerberos、LDAP 或 HTTP 基本身份验证的 Amazon EMR 集群建立安全连接，您可以使用 Amazon Secrets Manager 向您的连接命令传递用户证书。有关如何创建 Secrets Manager 密钥的信息，请参阅[创建 Amazon Secrets Manager 密钥](https://docs.amazonaws.cn/secretsmanager/latest/userguide/create_secret.html)。您的密文必须包含用户名和密码。您通过 `--secrets` 参数传递密钥，如以下示例所示：

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

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

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

------
#### [ JSON ]

****  

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

------

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

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

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333: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:111122223333:secret:aes123-1a2b3c",
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes456-4d5e6f",
                "arn:aws:secretsmanager:us-west-2:111122223333:secret:aes789-7g8h9i"
            ]
        }
    ]
}
```

------