授權自訂角色寫資料到MaxCompute(跨帳號投遞)
MaxCompute投遞任務(新版)運行時,需要將從LogStore中讀取的資料投遞到MaxCompute的表中,您可以授權MaxCompute投遞任務(新版)扮演自訂RAM角色完成該操作。本文介紹在MaxCompute和Log ServiceProject不同帳號時,如何對自訂RAM角色進行授權。
背景資訊
Log Service和MaxCompute屬於不同的阿里雲帳號,例如Log Service屬於阿里雲帳號A,MaxCompute屬於阿里雲帳號B。則需授予帳號B下的RAM角色寫入MaxCompute的許可權。授權完成後,MaxCompute投遞任務可以使用該RAM角色將LogStore中的資料寫入到目標MaxCompute表中。
解決痛點:在跨帳號投遞時,由於許可權問題,MaxCompute的表名和表欄位對應不到該投遞任務。

前提條件
-
Log Service所屬帳號A建立ODPS SQL的臨時查詢節點。具體操作,請參見建立臨時查詢節點。
-
使用阿里雲帳號B建立一個和Log Service同地區的MaxCompute專案。具體操作,請參見建立MaxCompute專案。
-
MaxCompute所屬帳號B將您的MaxCompute專案關聯為DataWorks的MaxCompute資料來源,並且和Log ServiceProject同一地區。更多資訊,請參見綁定MaxCompute計算資源。
步驟一: 建立 自訂 角色寫資料 到MaxCompute(MaxCompute所屬帳號B)
-
使用阿里雲主帳號B登入RAM控制台。
-
建立RAM角色,例如
MaxComputeShipRole。具體操作,請參見建立可信實體為阿里雲服務的RAM角色。重要-
建立RAM角色時,必須選擇信任主題類型為雲端服務,且必須信任主題名稱為Log Service。
-
請檢查角色的信任策略如下,
Service內容至少包含"log.aliyuncs.com"。{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "log.aliyuncs.com" ] } } ], "Version": "1" }
-
-
修改RAM角色信任策略。具體操作,請參見修改RAM角色的信任策略。
將原有的信任策略替換為如下內容。
在
Service配置項中添加{阿里雲帳號A的ID}@log.aliyuncs.com和dataworks.aliyuncs.com。其中{阿里雲帳號A的ID},需根據實際情況替換,您可以在帳號中心查看阿里雲帳號ID。說明該策略表示帳號A有許可權通過Log Service擷取臨時Token來操作帳號B中的資源。
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "log.aliyuncs.com", "dataworks.aliyuncs.com", "{阿里雲帳號A的ID}@log.aliyuncs.com" ] } } ], "Version": "1" } -
添加RAM角色為工作空間成員。
-
登入DataWorks控制台。
-
在頁面左上方,選擇地區。
-
在左側導覽列中,單擊工作空間。在工作空間列表頁面,單擊目標工作空間對應的管理。
-
在工作空間頁面的空間成員頁簽下,單擊添加成员。

-
在添加成员對話方塊中,選中當前登入帳號和目標RAM角色,完成添加。
此處需在批量設置角色中選中開發。更多資訊,請參見授權給其他使用者。
-
授予RAM角色操作MaxCompute表的許可權。
-
在成員管理對話方塊中,選中當前登入帳號和目標RAM角色帳號,如
MaxComputeShipRole。完成添加。
-
重要上述授權只針對指定的MaxCompute表。如果您希望目標角色可以操作當前MaxCompute空間專案下所有的表,則您可以為當前登入帳號和目標角色添加admin角色許可權。即在角色列表中,單擊admin角色對應的成員管理,然後在成員管理對話方塊中,選中當前登入帳號和目標角色,完成添加。
-
步驟二:建立MaxCompute投遞表(MaxCompute所屬帳號B)
步驟三:對Log Service所屬帳號A授權(MaxCompute所屬帳號B)
使用步驟二建立的臨時查詢節點執行以下命令,對Log Service所屬阿里雲賬戶A進行授權。
use {MaxCompute專案名稱};
add USER ALIYUN${阿里雲主賬戶A ID};
grant super_administrator to ALIYUN${阿里雲賬戶A ID};
命令說明
|
命令名稱 |
說明 |
|
|
使用MaxCompute所屬帳號B建立的MaxCompute專案名稱。 |
|
|
在MaxCompute專案中添加使用者。您可以通過 |
|
|
使用GRANT授權super_administrator給使用者授權。 |
常見問題
在授權過程中,可能發生如下報錯。
-
在操作過程中出現
FAILED: mismatched input錯誤,表示當前的RAM使用者沒有執行ADD USER等語句的許可權。更多資訊,請參見出現FAILED: mismatched input錯誤時,如何解決。 -
在操作過程中出現
FAILED: ODPS-0130013:Authorization exception - Authorization Failed [4003], You have NO privilege to do the PROJECT SECURITY OPERATION for {acs:odps:*:projects/xxxxxx/authorization/users}. Context ID:1111-11111-1111-1111-11111.錯誤,表示當前的操作使用者無MaxCompute賬戶操作或者授權許可權。更多資訊,請參見出現操作使用者無許可權錯誤時,如何解決。
查看Log Service所屬主帳號是否授權成功(Log Service所屬帳號A)
使用阿里雲主賬戶A登入A帳號建立的臨時查詢節點,執行以下SQL,查看阿里雲主帳號A授權是否成功。
執行完成後,通過以下命令確認授權是否成功。
use {MaxCompute專案名稱};
show grants;
命令說明
|
命令名稱 |
說明 |
|
|
使用MaxCompute所屬帳號B建立的MaxCompute專案名稱。 |
|
|
查看super_administrator角色是否給賬戶A授權成功。 結果顯示如圖所示,表示授權成功。
|
常見問題
執行use {MaxCompute專案名稱}時可能會報錯,解決方案請參見Access Denied - Authorization Failed。
步驟四:授權RAM使用者管理MaxCompute投遞任務(Log Service所屬帳號A)
-
使用阿里雲主賬戶A建立一個RAM使用者,此RAM使用者用於建立MaxCompute投遞任務。具體操作,請參見建立RAM使用者。
-
授予RAM使用者自訂權限原則。具體操作,請參見管理RAM使用者的許可權。
步驟五:授權RAM角色讀取LogStore資料(Log Service所屬帳號A)
步驟六:對RAM使用者進行DataWorks表授權(Log Service所屬帳號A)
使用阿里雲主賬戶A登入該帳號建立的臨時查詢節點,授予步驟四的RAM使用者操作DataWorks表的許可權。
SQL中的{MaxCompute專案名稱}、{阿里雲主帳號A ID}和{RAM使用者名稱稱}請根據實際情況填寫。
use {MaxCompute專案名稱};
add USER RAM${阿里雲主帳號A ID}:{RAM使用者名稱稱};
grant admin to RAM${阿里雲主帳號A ID}:{RAM使用者名稱稱};
show grants FOR RAM${阿里雲主帳號A ID}:{RAM使用者名稱稱};
命令說明
|
命令名稱 |
說明 |
|
|
使用MaxCompute所屬帳號B建立的MaxCompute專案名稱。 |
|
|
在MaxCompute專案中添加使用者。您可以通過 |
|
|
|
|
|
查看Admin角色是否授權成功。 結果顯示如圖所示,表示授權成功。
|
步驟七:建立MaxCompute投遞
使用步驟四建立的RAM使用者建立MaxCompute投遞任務(新版),其中讀Log Service授權使用預設角色,寫MaxCompute授權使用自訂角色。
-
跨帳號投遞無需點擊自動授權的授權,此處涉及跨帳號,日誌投遞自動對應。
-
寫MaxCompute授權的自訂角色為步驟一建立預設角色的ARN。

常見問題
-
Access Denied - Authorization Failed-
報錯資訊
FAILED: ODPS-0420095: Access Denied - Authorization Failed [4002,4009], You have NO privilege 'odps:Read' on {acs:odps:*:projects/welcrm_spaces}. CheckPermission failed, User doesn't exist in the project. Context ID:xxxx. --->Tips: Pricipal:RAM$xxx:xxx; -
原因
由於MaxCompute所屬賬戶B開通DataWorks使用的是RAM使用者,這裡即便使用阿里雲主帳號B登入DataWorks,實際上使用者使用的也是RAM使用者權限。
-
解決方案
-
使用MaxCompute所屬賬戶B登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的,在下拉框中選擇對應工作空間後單擊進入管理中心。
-
進入工作空間管理中心頁面後,單擊左側導覽列的數據源,進入資料來源頁面。
-
單擊目標資料來源右側的編輯。
-
修改目標資料來源的預設訪問身份為阿里雲主帳號。

-
-


