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

2 分钟阅读
0

我想要使用 Amazon 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 的基础。标识符可以是用户、组,也可以是表示数据位置的 Amazon S3 前缀。当 EMRFS 发出与访问基础相匹配的请求时,EMRFS 有集群 EC2 实例为请求承担相应的 IAM 角色。集群 EC2 实例的 IAM 权限是附加在该角色上的,而不是附加在服务角色。有关更多信息,请参阅为 EMRFS 请求 Amazon S3 配置 IAM 角色

在以下步骤中,将标识符指定为通过 EMRFS 访问的 Amazon S3 前缀。这就为 EMRFS 创建了使用角色映射的安全配置的跨账户访问:

1.    在目标账户中创建 IAM 角色。您将从 EMR 集群中代入该角色。

2.    添加类似于以下内容的信任策略。信任策略必须允许 Amazon 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 或 SDK 创建安全配置。控制台不会列出其他账户中的角色,即使您有权代入这些角色。如果在运行 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": [
        {
          "Role": "arn:aws:iam::DestinationAcctID:role/role_in_destination_account",
          "IdentifierType": "Prefix",
          "Identifiers": [
            "s3://doc-example-bucket/"
          ]
        }
      ]
    }
  }
}

4.    创建 IAM 策略,然后将其附加到 Amazon 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) 进行的服务器端加密,代入的角色必须是 AWS KMS 客户管理的密钥的一个密钥用户。如果 AWS KMS 密钥中未列出该角色,则您将无法访问存储桶。


相关信息

创建安全配置

AWS 官方
AWS 官方已更新 2 年前