E-MapReduce环境提供了MetaService服务,Metaservice服务是一种特殊的ECS应用角色。EMR 3.32及之前版本和EMR 4.5及之前版本,创建时会自动绑定该角色。在EMR集群之上运行的应用程序通过该角色来获得与其他云服务交互的权限,实现以免AccessKey的方式访问阿里云资源,避免了在配置文件中暴露AccessKey的风险。

前提条件

已授权该角色,详情请参见角色授权

背景信息

当前MetaService服务仅支持免AccessKey访问OSS、LogService和MNS数据。

权限内容

默认服务角色AliyunEmrEcsDefaultRole包含系统权限策略为AliyunEmrECSRolePolicy,OSS相关权限内容如下。
权限名称(Action) 权限说明
oss:PutObject 上传文件或文件夹对象。
oss:GetObject 获取文件或文件夹对象。
oss:ListObjects 查询文件列表信息。
oss:DeleteObject 删除某个文件。
oss:AbortMultipartUpload 终止MultipartUpload事件。
注意 请谨慎编辑和删除默认角色AliyunEmrEcsDefaultRole,否则会造成集群创建失败或作业运行失败。

支持MetaService的数据源

目前在E-MapReduce上支持MetaService的产品有OSS、LogService和MNS。您可以在E-MapReduce集群上使用E-MapReduce SDK接口免AccessKey读写上述数据源。

MetaService默认只有OSS的读写权限,如果您希望MetaService支持LogService和MNS,请前往RAM控制台为AliyunEmrEcsDefaultRole应用角色增加LogService和MNS的读写权限,RAM控制台链接为RAM控制台

RAM角色授权,详情请参见为RAM角色授权

使用MetaService

基于MetaSerivce服务,您可通过E-MapReduce作业免AccessKey访问阿里云资源(OSS、LogService和MNS),其优势如下:
  • 降低AccessKey泄漏的风险。基于RAM,您可按最小够用原则给角色授权,做到权限最小化,这样可以将安全风险降到最低。
  • 提高用户体验。尤其在交互式访问OSS资源时,可避免让您输入一长串的OSS路径。
  • EMR自带服务

    EMR自带服务中运行的作业均可以自动基于MetaSerivce服务免明文AccessKey访问阿里云资源(OSS、LogService和MNS)

    以下是使用MetaService(新)和不使用MetaService(旧)的对比示例:
    • 通过Hadoop命令行查看OSS数据
      • 旧方式
        hadoop fs -ls oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c
      • 新方式
        hadoop fs -ls oss://bucket/a/b/c
    • 通过Hive建表
      • 旧方式
        CREATE EXTERNAL TABLE test_table(id INT, name string)
                ROW FORMAT DELIMITED
                FIELDS TERMINATED BY '/t'
                LOCATION 'oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c';
      • 新方式
        CREATE EXTERNAL TABLE test_table(id INT, name string)
                ROW FORMAT DELIMITED
                FIELDS TERMINATED BY '/t'
                LOCATION 'oss://bucket/a/b/c';
    • 使用Spark查看OSS数据
      • 旧方式
        val data = sc.textFile("oss://ZaH******As1s:Ba23N**************sdaBj2@bucket.oss-cn-hangzhou-internal.aliyuncs.com/a/b/c")
      • 新方式
        val data = sc.textFile("oss://bucket/a/b/c")
  • 自行部署服务
    MetaService是一个HTTP服务,您可以直接访问这个HTTP服务的URL获取STS临时凭证,然后在自行搭建的系统中使用该STS临时凭证免AccessKey访问阿里云资源。
    注意 STS临时凭证失效前半小时会生成新的STS临时凭证,在这半小时内,新旧STS临时凭证均可使用。

    例如,通过curl http://localhost:10011/cluster-region,即可获得当前集群所在Region。

    当前MetaService支持以下几类信息:
    • Region:/cluster-region
    • 角色名:/cluster-role-name
    • AccessKeyID:/role-access-key-id
    • AccessKeySecret:/role-access-key-secret
    • SecurityToken:/role-security-token
    • 网络类型:/cluster-network-type