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:ListBuckets | 列举存储空间(Bucket)。 |
oss:AbortMultipartUpload | 终止MultipartUpload事件。 |
oss:ListMultipartUploads | 列举所有执行中的Multipart Upload事件。 |
oss:RestoreObject | 解冻归档类型(Archive)或冷归档(Cold Archive)的文件(Object)。 |
oss:GetBucketInfo | 查看存储空间(Bucket)的相关信息。 |
oss:ListObjectVersions | 用于列出Bucket中包括删除标记(Delete Marker)在内的所有Object的版本信息。 |
oss:DeleteObjectVersion | 删除指定版本Object。 |
oss:PostDataLakeStorageFileOperation | OSS-HDFS访问权限。 |
ots:CreateTable | 根据给定的表结构信息创建相应的数据表。 |
ots:DeleteTable | 删除本实例下指定的表。 |
ots:GetRow | 根据指定的主键读取单行数据。 |
ots:PutRow | 插入数据到指定的行。 |
ots:UpdateRow | 更新指定行的数据。 |
ots:DeleteRow | 删除一行数据。 |
ots:GetRange | 读取指定主键范围内的数据。 |
ots:BatchWriteRow | 批量插入、修改或删除一个或多个表中的若干行数据。 |
ots:BatchGetRow | 批量读取一个表或多个表中的若干行数据。 |
ots:ComputeSplitPointsBySize | 将全表的数据在逻辑上划分成接近指定大小的若干分片,返回这些分片之间的分割点以及分片所在机器的提示。 |
ots:StartLocalTransaction | 为分区键值创建一个局部事务,并获取局部事务ID。 |
ots:CommitTransaction | 提交局部事务。 |
ots:AbortTransaction | 丢弃局部事务。 |
dlf:BatchCreatePartitions | 批量创建分区。 |
dlf:BatchCreateTables | 批量创建数据表。 |
dlf:BatchDeletePartitions | 批量删除分区。 |
dlf:BatchDeleteTables | 批量删除表。 |
dlf:BatchGetPartitions | 批量获取分区列表。 |
dlf:BatchGetTables | 批量获取数据表列表。 |
dlf:BatchUpdatePartitions | 批量更新分区信息。 |
dlf:BatchUpdateTables | 批量更新数据表。 |
dlf:CreateDatabase | 创建数据库。 |
dlf:CreateFunction | 创建函数。 |
dlf:CreatePartition | 创建分区。 |
dlf:CreateTable | 创建数据表。 |
dlf:DeleteDatabase | 删除数据库。 |
dlf:DeleteFunction | 删除函数。 |
dlf:DeletePartition | 删除分区。 |
dlf:DeleteTable | 删除数据表。 |
dlf:GetDatabase | 获取数据库。 |
dlf:GetFunction | 获取函数。 |
dlf:GetPartition | 获取分区。 |
dlf:GetTable | 获取数据表。 |
dlf:ListCatalogs | 获取数据目录列表。 |
dlf:ListDatabases | 获取数据库列表。 |
dlf:ListFunctionNames | 获取函数名称列表。 |
dlf:ListFunctions | 获取函数列表。 |
dlf:ListPartitionNames | 获取分区名称列表。 |
dlf:ListPartitions | 获取分区列表。 |
dlf:ListPartitionsByExpr | 按条件获取元数据表分区列表。 |
dlf:ListPartitionsByFilter | 按条件获取元数据表分区列表。 |
dlf:ListTableNames | 获取数据表名称列表。 |
dlf:ListTables | 获取数据表列表。 |
dlf:RenamePartition | 修改分区名称。 |
dlf:RenameTable | 修改数据表名称。 |
dlf:UpdateDatabase | 更新数据库信息。 |
dlf:UpdateFunction | 更新函数信息。 |
dlf:UpdateTable | 更新数据表信息。 |
dlf:UpdateTableColumnStatistics | 更新元数据表统计信息。 |
dlf:GetTableColumnStatistics | 获取元数据表统计信息。 |
dlf:DeleteTableColumnStatistics | 删除元数据表统计信息。 |
dlf:UpdatePartitionColumnStatistics | 更新分区统计信息。 |
dlf:GetPartitionColumnStatistics | 获取分区统计信息。 |
dlf:DeletePartitionColumnStatistics | 删除分区统计信息。 |
dlf:BatchGetPartitionColumnStatistics | 批量获取表分区统计信息。 |
dlf:CreateLock | 创建元数据锁。 |
dlf:UnLock | 解锁指定的元数据锁。 |
dlf:AbortLock | 终止元数据锁。 |
dlf:RefreshLock | 刷新元数据锁。 |
dlf:GetLock | 获取元数据锁。 |
dlf:GetAsyncTaskStatus | 获取异步任务状态。 |
dlf:DeltaGetPermissions | 获取权限列表。 |
dlf:GetPermissions | 获取数据权限信息。 |
dlf:GetServiceInfo | 获取服务信息。 |
dlf:GetRoles | 获取数据权限中角色信息。 |
dlf:CheckPermissions | 数据权限校验。 |
重要 请谨慎编辑和删除默认角色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
基于MetaService服务,您可通过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")
- 旧方式
- 通过Hadoop命令行查看OSS数据
- 自行部署服务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