在 Amazon Secrets Manager 中存储敏感配置数据 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在 Amazon Secrets Manager 中存储敏感配置数据

Amazon EMR 描述并列出了以明文形式发出自定义配置数据(例如 DescribeClusterListInstanceGroups)的 API 操作。Amazon EMR 与 Amazon Secrets Manager 集成,因此您可以将数据存储在 Secrets Manager 中,并在配置中使用密钥 ARN。这样,您就不会将敏感的配置数据以明文形式传递给 Amazon EMR,也不会将其公开给外部 API。如果您指明键值对包含存储在 Secrets Manager 中的密钥 ARN,Amazon EMR 则会在向集群发送配置数据时检索此密钥。Amazon EMR 在使用外部 API 显示配置时不会发送注释。

创建密钥

要创建密钥,请遵循《Amazon Secrets Manager 用户指南》创建 Amazon Secrets Manager 密钥的说明。在步骤 3 中,必须选择 Plaintext(明文)字段来输入您的敏感值。

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

授予 Amazon EMR 检索密钥的访问权限

Amazon EMR 使用 IAM 服务角色为您预置和管理集群。Amazon EMR 服务角色定义在预置资源,以及执行在集群中运行的特定 Amazon EC2 实例的上下文中不执行的服务级任务时,允许 Amazon EMR 执行的操作。有关服务角色的更多信息,请参阅 Amazon EMR 的服务角色(EMR 角色)自定义 IAM 角色

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

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

如果您使用客户托管的 Amazon KMS key 创建密钥,则还必须为 Amazon EMR 角色添加对所用键的 kms:Decrypt 权限。有关更多信息,请参阅 Amazon Secrets Manager 用户指南中的 Amazon Secrets Manager 的身份验证和访问控制

在配置分类中使用密钥

您可以向任何配置属性添加 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>" } }

更新密钥值

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