授權預設角色寫資料到MaxCompute(跨帳號投遞)

更新時間:
Copy as MD

MaxCompute投遞任務(新版)運行時,需要將讀取到的LogStore資料投遞到MaxCompute表中,您可以授權MaxCompute投遞任務(新版)扮演預設角色完成該操作。本文介紹在MaxComputeLog ServiceProject不同帳號時,如何對預設角色進行授權。

背景資訊

Log ServiceMaxCompute屬於不同的阿里雲帳號,例如Log Service屬於阿里雲帳號AMaxCompute屬於阿里雲帳號B。則需授予帳號B下的RAM角色寫入MaxCompute的許可權。授權完成後,MaxCompute投遞任務可以使用該RAM角色將LogStore中的資料寫入到目標MaxCompute表中。

解決痛點:在跨帳號投遞時,由於許可權問題,MaxCompute的表名和表欄位對應不到該投遞任務。

跨帳號投遞情境下,MaxCompute表名下拉框顯示undefinedMaxCompute欄位名列和MaxCompute分區欄位名列均無法自動對應,顯示為空白預留位置。

前提條件

  • Log Service所屬帳號A建立ODPS SQL的臨時查詢節點。具體操作,請參見建立臨時查詢節點

  • 使用阿里雲帳號B建立一個和Log Service同地區的MaxCompute專案。具體操作,請參見建立MaxCompute專案

  • MaxCompute所屬帳號B將您的MaxCompute專案關聯為DataWorksMaxCompute資料來源,並且和Log ServiceProject同一地區。更多資訊,請參見綁定MaxCompute計算資源

步驟一:建立預設角色寫資料到MaxCompute(MaxCompute所屬帳號B)

  1. 使用阿里雲賬戶B訪問雲資源訪問授權,建立AliyunLogDefaultRole角色。

  2. 修改帳號B下的AliyunLogDefaultRole角色的信任策略。具體操作,請參見修改RAM角色的信任策略

    將原有的信任策略替換為如下內容。

    Service配置項中添加{阿里雲帳號AID}@log.aliyuncs.comdataworks.aliyuncs.com。其中{阿里雲帳號AID},需根據實際情況替換,您可以在帳號中心查看阿里雲帳號ID。

    說明

    該策略表示帳號A有許可權通過Log Service擷取臨時Token來操作帳號B中的資源。

    {
        "Statement": [
            {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Principal": {
                    "Service": [
                        "log.aliyuncs.com",
                        "dataworks.aliyuncs.com",
                        "{阿里雲帳號AID}@log.aliyuncs.com"
                    ]
                }
            }
        ],
        "Version": "1"
    }
  3. 添加RAM角色為工作空間成員。

    1. 登入DataWorks控制台

    2. 在頁面左上方,選擇地區。

    3. 在左側導覽列中,單擊工作空間

    4. 工作空間列表頁面,單擊目標工作空間對應的管理

    5. 工作空間配置,單擊空間成員與角色。然後在空間成員頁簽下,單擊添加成員image

    6. 新增成員對話方塊中,選中當前登入帳號和AliyunLogDefaultRole角色,根據頁面提示完成添加。

      此處需在大量設定角色中選中開發。更多資訊,請參見授權給其他使用者image

    7. 授予AliyunLogDefaultRole角色操作MaxCompute表的許可權。

      1. 登入MaxCompute控制台,在左上方選擇地區。

      2. 選擇工作區 > 專案管理,在專案管理頁面,單擊目標專案操作列的管理image

      3. MaxCompute專案管理頁面,單擊角色許可權image.png

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

      4. 在角色列表中,單擊role_project_admin角色對應的成員管理

      5. 成員管理對話方塊中,選中當前登入帳號和AliyunLogDefaultRole角色帳號,根據頁面提示完成添加。

      6. 在角色列表中,單擊role_project_admin角色對應的成員管理

      7. 成員管理對話方塊的Table頁簽下,選擇目標MaxCompute表,選中DescribeAlterUpdateimage.png

      重要

      上述授權只針對指定的MaxCompute表。如果您希望目標角色可以操作當前MaxCompute空間專案下所有的表,則您可以為當前登入帳號和AliyunLogDefaultRole角色帳號添加admin角色許可權。即在角色列表中,單擊admin角色對應的成員管理,然後在成員管理對話方塊中,選中當前登入帳號和AliyunLogDefaultRole角色帳號,根據頁面提示完成添加。

步驟二:建立MaxCompute投遞表(MaxCompute所屬帳號B)

  1. 使用阿里雲帳號B建立ODPS SQL臨時查詢節點。具體操作,請參見建立臨時查詢節點

  2. 在節點編輯頁面,建立分區表,用於儲存Log Service資料。具體說明,請參見表操作

    CREATE TABLE IF NOT EXISTS server_logs (
        request_method STRING,
        `status` string
    )
    PARTITIONED BY (
        ds STRING 
    )
    LIFECYCLE 30;

步驟三:對Log Service所屬帳號A授權(MaxCompute所屬帳號B)

使用步驟二建立的臨時查詢節點執行以下命令,對Log Service所屬阿里雲主賬戶A進行授權。

use {MaxCompute專案名稱};
add USER ALIYUN${阿里雲主賬戶A ID};
grant super_administrator to ALIYUN${阿里雲賬戶A ID};

命令說明

命令名稱

說明

use {MaxCompute專案名稱}

使用MaxCompute所屬帳號B建立的MaxCompute專案名稱。

add USER ALIYUN${阿里雲主賬戶A ID}

MaxCompute專案中添加使用者。您可以通過list users;命令查看對應的使用者。

grant super_administrator to ALIYUN${阿里雲賬戶A ID};

使用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;

命令說明

命令名稱

說明

use {MaxCompute專案名稱}

使用MaxCompute所屬帳號B建立的MaxCompute專案名稱。

show grants;

查看super_administrator角色是否給賬戶A授權成功。

結果顯示如下所示,表示授權成功。

OK
OK
OK
OK
[roles]
super_administrator
2025-04-01 17:51:23 INFO ============================================================
2025-04-01 17:51:23 INFO Exit code of the Shell command 0
2025-04-01 17:51:23 INFO --- Invocation of Shell command completed ---
2025-04-01 17:51:23 INFO Shell run successfully!

常見問題

執行use {MaxCompute專案名稱}時可能會報錯,解決方案請參見Access Denied - Authorization Failed

步驟四:授權RAM使用者管理MaxCompute投遞任務(Log Service所屬帳號A)

  1. 使用阿里雲主賬戶A建立一個RAM使用者,此RAM使用者用於建立MaxCompute投遞任務。具體操作,請參見建立RAM使用者

  2. 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": "*"
            }
        ]
    }
  3. 授予RAM使用者自訂權限原則。具體操作,請參見管理RAM使用者的許可權

步驟五:授權RAM角色讀取LogStore資料(Log Service所屬帳號A

  1. 使用阿里雲帳號(主帳號)或RAM使用者登入阿里雲控制台

  2. 單擊雲資源訪問授權完成授權。

    說明
    • 如果阿里雲主帳號沒有預設角色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使用者名稱稱};

命令說明

命令名稱

說明

use {MaxCompute專案名稱}

使用MaxCompute所屬帳號B建立的MaxCompute專案名稱。

add USER ALIYUN${阿里雲主賬戶A ID}

MaxCompute專案中添加使用者。您可以通過list users;命令查看對應的使用者。

grant super_administrator to ALIYUN${阿里雲賬戶A ID}

使用GRANT授權AdminRAM使用者授權。

show grants FOR RAM${阿里雲主帳號A ID}:{RAM使用者名稱稱}

查看Admin角色是否授權成功。

結果顯示如下所示,表示授權成功。

OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
OK
[roles]
admin
2025-04-07 15:12:07  INFO ==============================
2025-04-07 15:12:07  INFO Exit code of the Shell command 0
2025-04-07 15:12:07  INFO --- Invocation of Shell command completed ---
2025-04-07 15:12:07  INFO Shell run successfully!
2025-04-07 15:12:07  INFO Current task status: FINISH
2025-04-07 15:12:07  INFO Cost time is: 2.234s

步驟七:建立MaxCompute投遞

使用步驟四建立的RAM使用者建立MaxCompute投遞任務(新版),其中Log Service授權使用預設角色MaxCompute授權使用自訂角色

說明
  • 跨帳號投遞無需點擊自動授權授權,此處涉及跨帳號,日誌投遞自動對應。

  • MaxCompute授權自訂角色步驟一建立預設角色的ARN。

在配置表單中,Log Service授權選擇預設角色,ARNacs:ram::帳號ID:role/aliyunlogdefaultroleMaxCompute授權的自訂角色ARN格式為acs:ram::帳號ID:role/maxcomputeshiprole

常見問題

  • 日誌投遞MaxCompute後,如何檢查資料完整性

  • MaxCompute投遞任務(新版)常見報錯與問題

  • 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使用者權限。

    • 解決方案

      1. 使用MaxCompute所屬賬戶B登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的更多 > 管理中心,在下拉框中選擇對應工作空間後單擊進入管理中心

      2. 進入工作空間管理中心頁面後,單擊左側導覽列的數據源,進入資料來源頁面。

      3. 單擊目標資料來源右側的編輯

      4. 修改目標資料來源的預設訪問身份阿里雲主帳號