上次更新时间:2020 年 1 月 17 日
我想要使用 EMR File System (EMRFS) 在位于不同 AWS 账户的 Amazon Simple Storage Service (Amazon S3) 存储桶中进行写入。
简短描述使用以下选项之一来设置 EMRFS 的跨账户访问:
为向 Amazon EMR 账户授予访问的目标存储桶添加存储桶策略。这是最简单的选项。但是,目标账户不拥有 EMRFS 写入目标存储桶的对象。 使用自定义凭证提供程序。此选项允许您代入目标存储桶账户中的 AWS Identity and Access Management (IAM) 角色。这意味着,目标账户拥有 EMRFS 写入目标存储桶的对象。 在安全配置中使用角色映射。此选项还允许 EMRFS 代入目标存储桶账户中的 IAM 角色。本文将对这种方法予以讨论。 解决方法当您使用安全配置为 EMRFS 指定 IAM 角色时,您可以设置角色映射。角色映射可指定与标识符对应的 IAM 角色。在这种情况下,标识符指的是您希望通过 EMRFS 访问的 Amazon S3 前缀。标识符确定通过 EMRFS 访问 Amazon S3 的基础。有关更多信息,请参阅为至 Amazon S3 的 EMRFS 请求配置 IAM 角色。
要使用具有角色映射的安全配置创建 EMRFS 的跨账户访问,请遵循以下步骤:
1.在目标账户中创建 IAM 角色。您将从 EMR 集群中代入该角色。
2.添加类似于以下内容的信任策略。信任策略必须允许 EMR 的 Amazon Elastic Compute Cloud (Amazon EC2) 角色在代入您在步骤 1 中创建的角色。有关更多信息,请参阅配置角色。
{
"Version":"2012-10-17",
"Statement":
}
3.使用 AWS 命令行界面 (AWS CLI) 创建具有角色映射的安全配置。角色映射必须在目标账户中指定角色(您在步骤 1 中创建的角色)。
注意:您必须使用 AWS CLI 或开发工具包创建安全配置。控制台不会列出其他账户中的角色,即使您有权代入这些角色。如果在运行 AWS CLI 命令时收到错误,请确保您使用的 AWS CLI 为最新版本。
提供类似以下内容的 JSON 对象进行角色映射。替换示例中的以下值:
arn:aws:iam::DestinationAcctID:role/role_in_destination_account:您在步骤 1 中创建的角色的 Amazon 资源名称 (ARN)
s3://doc-example-bucket/:您希望 EMRFS 写入的存储桶
{
"AuthorizationConfiguration": {
"EmrFsConfiguration": {
"RoleMappings":
}]
}
}
}
4.创建 IAM 策略,然后将其附加到 EMR EC2 实例配置文件(例如 EMR_EC2_DefaultRole)。
以下示例策略可使 AWS Security Token Service (STS) 代入所有角色。您的策略至少必须允许 STS 代入您在步骤 1 中创建的角色。有关更多信息,请参阅授予创建临时安全凭证的权限。
{
"Version": "2012-10-17",
"Statement":
}
5.启动 EMR 集群并指定您在步骤 3 中创建的安全配置。
注意:如果目标存储桶使用通过 AWS Key Management Service (AWS KMS) 进行的服务器端加密,代入的角色必须是 KMS 客户主密钥 (CMK) 的一个密钥用户。如果 KMS CMK 中未列出该角色,您将无法访问存储桶。