

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

# 将敏感配置数据存储在 AWS Secrets Manager
<a name="storing-sensitive-data"></a>

Amazon EMR 描述并列出了以明文形式发出自定义配置数据（例如 `DescribeCluster` 和 `ListInstanceGroups`）的 API 操作。Amazon EMR 与集成， AWS Secrets Manager 因此您可以将数据存储在 Secrets Manager 中，并在配置中使用秘密 ARN。这样，您就不会以明文形式将敏感配置数据传递给 Amazon EMR，也不会将其暴露给外部。 APIs如果您指明键值对包含存储在 Secrets Manager 中的密钥 ARN，Amazon EMR 则会在向集群发送配置数据时检索此密钥。当 Amazon EMR 使用外部 APIs 来显示配置时，它不会发送注释。

## 创建密钥
<a name="create-secret"></a>

要创建密钥，请遵循《AWS Secrets Manager 用户指南》**中[创建 AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)的说明。在**步骤 3** 中，必须选择 **Plaintext**（明文）字段来输入您的敏感值。

请注意，虽然 Secrets Manager 允许密钥最多包含 65536 个字节，但 Amazon EMR 将属性键（不包括注释）和检索到的密钥值的组合长度限制为 1024 个字符。

## 授予 Amazon EMR 检索密钥的访问权限
<a name="grant-access"></a>

Amazon EMR 使用 IAM 服务角色为您预置和管理集群。Amazon EMR 服务角色定义在预置资源，以及执行在集群中运行的特定 Amazon EC2 实例的上下文中不执行的服务级任务时，允许 Amazon EMR 执行的操作。有关服务角色的更多信息，请参阅 [Amazon EMR 的服务角色（EMR 角色）](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role.html)和[自定义 IAM 角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles-custom.html)。

要允许 Amazon EMR 从 Secrets Manager 检索密钥值，请在启动集群时将下面的策略声明添加到您的 Amazon EMR 角色中。

```
{
   "Sid":"AllowSecretsRetrieval",
   "Effect":"Allow",
   "Action":"secretsmanager:GetSecretValue",
   "Resource":[
      "arn:aws:secretsmanager:<region>:<aws-account-id>:secret:<secret-name>"
   ]
}
```

如果您使用客户管理的密钥创建密钥 AWS KMS key，则还必须为 Amazon EMR 角色添加对您使用的密钥的`kms:Decrypt`权限。有关更多信息，请参阅 *AWS Secrets Manager 用户指南*中的 [AWS Secrets Manager的身份验证和访问控制](https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access.html)。

## 在配置分类中使用密钥
<a name="config-secret"></a>

您可以向任何配置属性添加 `EMR.secret@` 注释，以表明其键值对包含存储在 Secrets Manager 中的密钥 ARN。

以下示例演示如何在配置分类中提供密钥 ARN：

```
{
   "Classification":"core-site",
   "Properties":{
      "presto.s3.access-key":"<sensitive-access-key>",
      "EMR.secret@presto.s3.secret-key":"arn:aws:secretsmanager:<region>:<aws-account-id>:secret:<secret-name>"
   }
}
```

在创建集群并提交注释的配置后，Amazon EMR 会验证配置属性。如果您的配置有效，Amazon EMR 将从配置中删除注释并从 Secrets Manager 中检索该密钥以创建实际配置，然后再将其应用于集群：

```
{
   "Classification":"core-site",
   "Properties":{
      "presto.s3.access-key":"<sensitive-access-key>",
      "presto.s3.secret-key":"<my-secret-key-retrieved-from-Secrets-Manager>"
   }
}
```

当您调用类似 `DescribeCluster` 的操作时，Amazon EMR 将返回集群上的当前应用程序配置。如果应用程序配置属性被标记为包含密钥 ARN，则 `DescribeCluster` 调用返回的应用程序配置包含 ARN 而不是密钥值。这样可以确保密钥值仅在集群上可见：

```
{
   "Classification":"core-site",
   "Properties":{
      "presto.s3.access-key":"<sensitive-access-key>",
      "presto.s3.secret-key":"arn:aws:secretsmanager:<region>:<aws-account-id>:secret:<secret-name>"
   }
}
```

## 更新密钥值
<a name="update-secret"></a>

每当连接的实例组启动、重新配置或调整大小时，Amazon EMR 都会从注释的配置中检索密钥值。您可以使用 Secrets Manager 修改正在运行的集群的配置中使用的密钥的值。完成后，您可以向想要接收更新值的每个实例组提交重新配置请求。如需详细了解如何重新配置实例组以及重新配置时需要考虑的事项，请参阅 [在正在运行的集群中重新配置实例组](emr-configure-apps-running-cluster.md)。