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

更新時間:
Copy as MD

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

背景資訊

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

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

image

前提條件

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

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

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

步驟一: 建立 自訂 角色寫資料 MaxCompute(MaxCompute所屬帳號B)

  1. 使用阿里雲主帳號B登入RAM控制台

  2. 建立RAM角色,例如MaxComputeShipRole。具體操作,請參見建立可信實體為阿里雲服務的RAM角色

    重要
    • 建立RAM角色時,必須選擇信任主題類型雲端服務,且必須信任主題名稱Log Service

    • 請檢查角色的信任策略如下,Service內容至少包含"log.aliyuncs.com"

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "log.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }
  3. 修改RAM角色信任策略。具體操作,請參見修改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"
    }
  4. 添加RAM角色為工作空間成員。

    1. 登入DataWorks控制台

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

    3. 在左側導覽列中,單擊工作空間。在工作空間列表頁面,單擊目標工作空間對應的管理

    4. 工作空間頁面的空間成員頁簽下,單擊添加成员image

    5. 添加成员對話方塊中,選中當前登入帳號和目標RAM角色,完成添加。

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

    6. 授予RAM角色操作MaxCompute表的許可權。

      1. 成員管理對話方塊中,選中當前登入帳號和目標RAM角色帳號,如MaxComputeShipRole。完成添加。

    重要

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

步驟二:建立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授權成功。

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

image

常見問題

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

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

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

  2. 授予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使用者名稱稱};

命令說明

命令名稱

說明

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角色是否授權成功。

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

image

步驟七:建立MaxCompute投遞

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

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

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

image

常見問題

  • 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. 修改目標資料來源的預設訪問身份阿里雲主帳號

        image