授權預設角色寫資料到MaxCompute(跨帳號投遞)
MaxCompute投遞任務(新版)運行時,需要將讀取到的LogStore資料投遞到MaxCompute表中,您可以授權MaxCompute投遞任務(新版)扮演預設角色完成該操作。本文介紹在MaxCompute和Log ServiceProject不同帳號時,如何對預設角色進行授權。
背景資訊
Log Service和MaxCompute屬於不同的阿里雲帳號,例如Log Service屬於阿里雲帳號A,MaxCompute屬於阿里雲帳號B。則需授予帳號B下的RAM角色寫入MaxCompute的許可權。授權完成後,MaxCompute投遞任務可以使用該RAM角色將LogStore中的資料寫入到目標MaxCompute表中。
解決痛點:在跨帳號投遞時,由於許可權問題,MaxCompute的表名和表欄位對應不到該投遞任務。
跨帳號投遞情境下,MaxCompute表名下拉框顯示undefined,MaxCompute欄位名列和MaxCompute分區欄位名列均無法自動對應,顯示為空白預留位置。
前提條件
-
Log Service所屬帳號A建立ODPS SQL的臨時查詢節點。具體操作,請參見建立臨時查詢節點。
-
使用阿里雲帳號B建立一個和Log Service同地區的MaxCompute專案。具體操作,請參見建立MaxCompute專案。
-
MaxCompute所屬帳號B將您的MaxCompute專案關聯為DataWorks的MaxCompute資料來源,並且和Log ServiceProject同一地區。更多資訊,請參見綁定MaxCompute計算資源。
步驟一:建立預設角色寫資料到MaxCompute(MaxCompute所屬帳號B)
-
使用阿里雲賬戶B訪問雲資源訪問授權,建立AliyunLogDefaultRole角色。
-
修改帳號B下的AliyunLogDefaultRole角色的信任策略。具體操作,請參見修改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控制台。
在頁面左上方,選擇地區。
在左側導覽列中,單擊工作空間。
在工作空間列表頁面,單擊目標工作空間對應的管理。
在工作空間配置,單擊空間成員與角色。然後在空間成員頁簽下,單擊添加成員。

在新增成員對話方塊中,選中當前登入帳號和AliyunLogDefaultRole角色,根據頁面提示完成添加。
此處需在大量設定角色中選中開發。更多資訊,請參見授權給其他使用者。

授予AliyunLogDefaultRole角色操作MaxCompute表的許可權。
登入MaxCompute控制台,在左上方選擇地區。
選擇,在專案管理頁面,單擊目標專案操作列的管理。

在MaxCompute專案管理頁面,單擊角色許可權。

如果出現如下報錯,您需要在阿里雲主帳號下將當前登入的RAM使用者添加至目標MaxCompute專案,先在角色列表中單擊admin對應的成員管理,然後在成員管理對話方塊中,選中當前登入RAM使用者,根據頁面提示完成添加。

在角色列表中,單擊role_project_admin角色對應的成員管理。
在成員管理對話方塊中,選中當前登入帳號和AliyunLogDefaultRole角色帳號,根據頁面提示完成添加。
在角色列表中,單擊role_project_admin角色對應的成員管理。
在成員管理對話方塊的Table頁簽下,選擇目標MaxCompute表,選中Describe、Alter和Update。

重要上述授權只針對指定的MaxCompute表。如果您希望目標角色可以操作當前MaxCompute空間專案下所有的表,則您可以為當前登入帳號和AliyunLogDefaultRole角色帳號添加admin角色許可權。即在角色列表中,單擊admin角色對應的成員管理,然後在成員管理對話方塊中,選中當前登入帳號和AliyunLogDefaultRole角色帳號,根據頁面提示完成添加。
步驟二:建立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控制台建立一個自訂權限原則,具體操作,請參見通過指令碼編輯模式建立自訂權限原則。
其中在指令碼編輯頁簽,請使用以下指令碼替換配置框中的原有內容。
重要請根據實際情況替換指令碼中的
Project名稱和LogStore名稱。如果您要使用RAM使用者配置MaxCompute投遞任務警示,還需授予RAM使用者警示操作許可權。具體操作,請參見授權RAM使用者操作警示。
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "log:GetLogStore", "log:GetIndex", "log:GetLogStoreHistogram", "log:GetLogStoreLogs" ], "Resource": [ "acs:log:*:*:project/Project名稱/logstore/LogStore名稱", "acs:log:*:*:project/Project名稱/logstore/internal-diagnostic_log" ] }, { "Effect": "Allow", "Action": [ "log:CreateJob", "log:UpdateJob", "log:DeleteJob", "log:ListJobs", "log:GetJob" ], "Resource": "acs:log:*:*:project/Project名稱/job/*" }, { "Effect": "Allow", "Action": [ "log:ListLogStores", "log:ListDashboard", "log:ListSavedSearch" ], "Resource": "acs:log:*:*:project/Project名稱/*" }, { "Effect": "Allow", "Action": [ "ram:PassRole", "ram:GetRole", "ram:ListRoles" ], "Resource": "*" } ] }-
授予RAM使用者自訂權限原則。具體操作,請參見管理RAM使用者的許可權。
步驟五:授權RAM角色讀取LogStore資料(Log Service所屬帳號A)
-
使用阿里雲帳號(主帳號)或RAM使用者登入阿里雲控制台。
單擊雲資源訪問授權完成授權。
說明如果阿里雲主帳號沒有預設角色
AliyunLogDefaultRole,RAM使用者只有第一次單擊後會產生該角色。Log Service扮演
AliyunLogDefaultRole角色來訪問您在其他雲產品中的資源。預設角色
AliyunLogDefaultRole的權限原則請參見AliyunLogDefaultRole。
步驟六:對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。
在配置表單中,讀Log Service授權選擇預設角色,ARN為acs:ram::帳號ID:role/aliyunlogdefaultrole;寫MaxCompute授權的自訂角色ARN格式為acs:ram::帳號ID:role/maxcomputeshiprole。
常見問題
-
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控制台,切換至目標地區後,單擊左側導覽列的,在下拉框中選擇對應工作空間後單擊進入管理中心。
-
進入工作空間管理中心頁面後,單擊左側導覽列的數據源,進入資料來源頁面。
-
單擊目標資料來源右側的編輯。
-
修改目標資料來源的預設訪問身份為阿里雲主帳號。
-
-
