如何设置 EMRFS 的跨账户访问?

上次更新时间: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":[
      {
         "Effect":"Allow",
         "Principal":{
            "AWS":"arn:aws:iam::EMRFSAcctID:role/EMR_EC2_DefaultRole"
         },
         "Action":"sts:AssumeRole"
      }
   ]
}

3.    使用 AWS 命令行界面 (AWS CLI) 创建具有角色映射的安全配置。角色映射必须在目标账户中指定角色(您在步骤 1 中创建的角色)。

注意:您必须使用 AWS CLI 或开发工具包创建安全配置。控制台不会列出其他账户中的角色,即使您有权代入这些角色。

提供类似以下内容的 JSON 对象进行角色映射。替换示例中的以下值:
arn:aws:iam::DestinationAcctID:role/role_in_destination_account:您在步骤 1 中创建的角色的 Amazon 资源名称 (ARN)
s3://awsexamplebucket/:您希望 EMRFS 写入的存储桶。

{
  "AuthorizationConfiguration": {
    "EmrFsConfiguration": {
      "RoleMappings": [{
        "Role": "arn:aws:iam::DestinationAcctID:role/role_in_destination_account",
        "IdentifierType": "Prefix",
        "Identifiers": ["s3://awsexamplebucket/"]
      }]
    }
  }
}

4.    创建 IAM 策略,然后将其附加到 EMR EC2 实例配置文件(例如 EMR_EC2_DefaultRole)。

以下示例策略可使 AWS Security Token Service (STS) 代入所有角色。您的策略至少必须允许 STS 代入您在步骤 1 中创建的角色。有关更多信息,请参阅授予创建临时安全凭证的权限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "*"
        }
    ]
}

5.    启动 EMR 集群并指定您在步骤 3 中创建的安全配置

注意:如果目标存储桶使用通过 AWS Key Management Service (AWS KMS) 进行的服务器端加密,代入的角色必须是 KMS 客户主密钥 (CMK) 的一个密钥用户。如果 KMS CMK 中未列出该角色,您将无法访问存储桶。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?