ECS應(yīng)用角色(EMR 3.32及之前版本和EMR 4.5及之前版本)
E-MapReduce環(huán)境提供了MetaService服務(wù),MetaService服務(wù)是一種特殊的ECS應(yīng)用角色。EMR 3.32及之前版本和EMR 4.5及之前版本,創(chuàng)建時會自動綁定該角色。在EMR集群之上運行的應(yīng)用程序通過該角色來獲得與其他云服務(wù)交互的權(quán)限,實現(xiàn)以免AccessKey的方式訪問阿里云資源,避免了在配置文件中暴露AccessKey的風險。
前提條件
已授權(quán)該角色,詳情請參見阿里云賬號角色授權(quán)。
背景信息
當前MetaService服務(wù)僅支持免AccessKey訪問OSS、LogService和MNS數(shù)據(jù)。
權(quán)限內(nèi)容
權(quán)限名稱(Action) | 權(quán)限說明 |
oss:PutObject | 上傳文件或文件夾對象。 |
oss:GetObject | 獲取文件或文件夾對象。 |
oss:ListObjects | 查詢文件列表信息。 |
oss:DeleteObject | 刪除某個文件。 |
oss:ListBuckets | 列舉存儲空間(Bucket)。 |
oss:AbortMultipartUpload | 終止MultipartUpload事件。 |
oss:ListMultipartUploads | 列舉所有執(zhí)行中的Multipart Upload事件。 |
oss:RestoreObject | 解凍歸檔類型(Archive)或冷歸檔(Cold Archive)的文件(Object)。 |
oss:GetBucketInfo | 查看存儲空間(Bucket)的相關(guān)信息。 |
oss:ListObjectVersions | 用于列出Bucket中包括刪除標記(Delete Marker)在內(nèi)的所有Object的版本信息。 |
oss:DeleteObjectVersion | 刪除指定版本Object。 |
oss:PostDataLakeStorageFileOperation | OSS-HDFS訪問權(quán)限。 |
ots:CreateTable | 根據(jù)給定的表結(jié)構(gòu)信息創(chuàng)建相應(yīng)的數(shù)據(jù)表。 |
ots:DeleteTable | 刪除本實例下指定的表。 |
ots:GetRow | 根據(jù)指定的主鍵讀取單行數(shù)據(jù)。 |
ots:PutRow | 插入數(shù)據(jù)到指定的行。 |
ots:UpdateRow | 更新指定行的數(shù)據(jù)。 |
ots:DeleteRow | 刪除一行數(shù)據(jù)。 |
ots:GetRange | 讀取指定主鍵范圍內(nèi)的數(shù)據(jù)。 |
ots:BatchWriteRow | 批量插入、修改或刪除一個或多個表中的若干行數(shù)據(jù)。 |
ots:BatchGetRow | 批量讀取一個表或多個表中的若干行數(shù)據(jù)。 |
ots:ComputeSplitPointsBySize | 將全表的數(shù)據(jù)在邏輯上劃分成接近指定大小的若干分片,返回這些分片之間的分割點以及分片所在機器的提示。 |
ots:StartLocalTransaction | 為分區(qū)鍵值創(chuàng)建一個局部事務(wù),并獲取局部事務(wù)ID。 |
ots:CommitTransaction | 提交局部事務(wù)。 |
ots:AbortTransaction | 丟棄局部事務(wù)。 |
dlf:BatchCreatePartitions | 批量創(chuàng)建分區(qū)。 |
dlf:BatchCreateTables | 批量創(chuàng)建數(shù)據(jù)表。 |
dlf:BatchDeletePartitions | 批量刪除分區(qū)。 |
dlf:BatchDeleteTables | 批量刪除表。 |
dlf:BatchGetPartitions | 批量獲取分區(qū)列表。 |
dlf:BatchGetTables | 批量獲取數(shù)據(jù)表列表。 |
dlf:BatchUpdatePartitions | 批量更新分區(qū)信息。 |
dlf:BatchUpdateTables | 批量更新數(shù)據(jù)表。 |
dlf:CreateDatabase | 創(chuàng)建數(shù)據(jù)庫。 |
dlf:CreateFunction | 創(chuàng)建函數(shù)。 |
dlf:CreatePartition | 創(chuàng)建分區(qū)。 |
dlf:CreateTable | 創(chuàng)建數(shù)據(jù)表。 |
dlf:DeleteDatabase | 刪除數(shù)據(jù)庫。 |
dlf:DeleteFunction | 刪除函數(shù)。 |
dlf:DeletePartition | 刪除分區(qū)。 |
dlf:DeleteTable | 刪除數(shù)據(jù)表。 |
dlf:GetDatabase | 獲取數(shù)據(jù)庫。 |
dlf:GetFunction | 獲取函數(shù)。 |
dlf:GetPartition | 獲取分區(qū)。 |
dlf:GetTable | 獲取數(shù)據(jù)表。 |
dlf:ListCatalogs | 獲取數(shù)據(jù)目錄列表。 |
dlf:ListDatabases | 獲取數(shù)據(jù)庫列表。 |
dlf:ListFunctionNames | 獲取函數(shù)名稱列表。 |
dlf:ListFunctions | 獲取函數(shù)列表。 |
dlf:ListPartitionNames | 獲取分區(qū)名稱列表。 |
dlf:ListPartitions | 獲取分區(qū)列表。 |
dlf:ListPartitionsByExpr | 按條件獲取元數(shù)據(jù)表分區(qū)列表。 |
dlf:ListPartitionsByFilter | 按條件獲取元數(shù)據(jù)表分區(qū)列表。 |
dlf:ListTableNames | 獲取數(shù)據(jù)表名稱列表。 |
dlf:ListTables | 獲取數(shù)據(jù)表列表。 |
dlf:RenamePartition | 修改分區(qū)名稱。 |
dlf:RenameTable | 修改數(shù)據(jù)表名稱。 |
dlf:UpdateDatabase | 更新數(shù)據(jù)庫信息。 |
dlf:UpdateFunction | 更新函數(shù)信息。 |
dlf:UpdateTable | 更新數(shù)據(jù)表信息。 |
dlf:UpdateTableColumnStatistics | 更新元數(shù)據(jù)表統(tǒng)計信息。 |
dlf:GetTableColumnStatistics | 獲取元數(shù)據(jù)表統(tǒng)計信息。 |
dlf:DeleteTableColumnStatistics | 刪除元數(shù)據(jù)表統(tǒng)計信息。 |
dlf:UpdatePartitionColumnStatistics | 更新分區(qū)統(tǒng)計信息。 |
dlf:GetPartitionColumnStatistics | 獲取分區(qū)統(tǒng)計信息。 |
dlf:DeletePartitionColumnStatistics | 刪除分區(qū)統(tǒng)計信息。 |
dlf:BatchGetPartitionColumnStatistics | 批量獲取表分區(qū)統(tǒng)計信息。 |
dlf:CreateLock | 創(chuàng)建元數(shù)據(jù)鎖。 |
dlf:UnLock | 解鎖指定的元數(shù)據(jù)鎖。 |
dlf:AbortLock | 終止元數(shù)據(jù)鎖。 |
dlf:RefreshLock | 刷新元數(shù)據(jù)鎖。 |
dlf:GetLock | 獲取元數(shù)據(jù)鎖。 |
dlf:GetAsyncTaskStatus | 獲取異步任務(wù)狀態(tài)。 |
dlf:DeltaGetPermissions | 獲取權(quán)限列表。 |
dlf:GetPermissions | 獲取數(shù)據(jù)權(quán)限信息。 |
dlf:GetServiceInfo | 獲取服務(wù)信息。 |
dlf:GetRoles | 獲取數(shù)據(jù)權(quán)限中角色信息。 |
dlf:CheckPermissions | 數(shù)據(jù)權(quán)限校驗。 |
支持MetaService的數(shù)據(jù)源
目前在E-MapReduce上支持MetaService的產(chǎn)品有OSS、LogService和MNS。您可以在E-MapReduce集群上使用E-MapReduce SDK接口免AccessKey讀寫上述數(shù)據(jù)源。
MetaService默認只有OSS的讀寫權(quán)限,如果您希望MetaService支持LogService和MNS,請前往RAM控制臺為AliyunEmrEcsDefaultRole應(yīng)用角色增加LogService和MNS的讀寫權(quán)限,RAM控制臺鏈接為RAM控制臺。
RAM角色授權(quán),詳情請參見為RAM角色授權(quán)。
使用MetaService
- 降低AccessKey泄漏的風險。基于RAM,您可按最小夠用原則給角色授權(quán),做到權(quán)限最小化,這樣可以將安全風險降到最低。
- 提高用戶體驗。尤其在交互式訪問OSS資源時,可避免讓您輸入一長串的OSS路徑。
- EMR自帶服務(wù)
EMR自帶服務(wù)中運行的作業(yè)均可以自動基于MetaSerivce服務(wù)免明文AccessKey訪問阿里云資源(OSS、LogService和MNS)
以下是使用MetaService(新)和不使用MetaService(舊)的對比示例:- 通過Hadoop命令行查看OSS數(shù)據(jù)
- 舊方式
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數(shù)據(jù)
- 舊方式
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數(shù)據(jù)
- 自行部署服務(wù)MetaService是一個HTTP服務(wù),您可以直接訪問這個HTTP服務(wù)的URL獲取STS臨時憑證,然后在自行搭建的系統(tǒng)中使用該STS臨時憑證免AccessKey訪問阿里云資源。重要 STS臨時憑證失效前半小時會生成新的STS臨時憑證,在這半小時內(nèi),新舊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
- 網(wǎng)絡(luò)類型:/cluster-network-type