すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:MaxCompute にデータを書き込むためのカスタムロールの承認 (Alibaba Cloud アカウント間でのデータ転送)

最終更新日:Jun 06, 2025

データ転送ジョブの新しいバージョンでは、ログストアからのデータは MaxCompute テーブルに書き込まれる必要があります。 このジョブにカスタム RAM ロールの権限を付与できます。 このガイドでは、MaxCompute プロジェクトと Simple Log Service プロジェクトが異なる Alibaba Cloud アカウントに属している場合に、カスタム RAM ロールの権限を付与する方法について説明します。

背景情報

Simple Log Service プロジェクトと MaxCompute プロジェクトは、アカウント A (Simple Log Service プロジェクト用) とアカウント B (MaxCompute プロジェクト用) など、異なる Alibaba Cloud アカウントに属しています。 アカウント B の Resource Access Management (RAM) ロールに MaxCompute へのデータ書き込み権限を付与する必要があります。 その後、MaxCompute データ転送ジョブは、RAM ロールを借用してログストアから MaxCompute テーブルにデータを書き込むことができます。

これは、アカウント間でデータを転送する際に、権限の制約により MaxCompute テーブル名とフィールドのマッピングが失敗するという問題を解決します。

image

前提条件

  • Alibaba Cloud アカウント A (Simple Log Service プロジェクト用) が ODPS SQL のアドホッククエリノードを作成済みであること。 詳細については、「アドホッククエリノードを作成する」をご参照ください。

  • Alibaba Cloud アカウント B が Simple Log Service と同じリージョンに MaxCompute プロジェクトを作成済みであること。 詳細については、「MaxCompute プロジェクトを作成する」をご参照ください。

  • Alibaba Cloud アカウント B が DataWorks の MaxCompute データソースとして MaxCompute プロジェクトを関連付けており、それが Simple Log Service プロジェクトと同じリージョンにあること。 詳細については、「MaxCompute データソースを追加する」をご参照ください。

ステップ 1:MaxCompute にデータを書き込むためのカスタムロールを作成する (アカウント B を使用する)

  1. Alibaba Cloud アカウント B を使用して RAM コンソール にログインします。

  2. RAM ロールを作成する、たとえば MaxComputeShipRole など。

    重要
    • RAM ロールを作成する際には、[プリンシパルタイプ][クラウドサービス] に設定し、[プリンシパル名][Simple Log Service] に設定します。

    • RAM ロールの信頼ポリシーを確認します。 Service 要素に少なくとも "log.aliyuncs.com" が含まれていることを確認します。

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "log.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }
  3. RAM ロールの信頼ポリシーを変更する

    元の信頼ポリシーを次の内容に置き換えます。

    {Alibaba Cloud アカウント A の ID}@log.aliyuncs.comdataworks.aliyuncs.comService 設定項目に追加します。 {Alibaba Cloud アカウント A の ID} を実際の値に置き換えます。 Alibaba Cloud アカウント ID は、アカウントセンター で確認できます。

    説明

    次のポリシーにより、Alibaba Cloud アカウント A は一時トークンを取得して Alibaba Cloud アカウント B のクラウドリソースを管理できます。

    {
        "Statement": [
            {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Principal": {
                    "Service": [
                        "log.aliyuncs.com",
                        "dataworks.aliyuncs.com",
                        "{ID of Alibaba Cloud Account A}@log.aliyuncs.com"
                    ]
                }
            }
        ],
        "Version": "1"
    }
  4. RAM ロールをワークスペースメンバーとして追加します。

    1. DataWorks コンソール にログインします。

    2. 表示されるページの左上隅で、リージョンを選択します。

    3. 左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、対象のワークスペースの [アクション] 列にある [管理] をクリックします。

    4. [ワークスペース設定] ページで、[ワークスペースメンバーとロール] をクリックし、次に [メンバーを追加] をクリックします。image

    5. [メンバーの追加] ダイアログボックスで、現在のログインアカウントと対象の RAM ロールを選択し、ページの指示に従って追加を完了します。

      この手順では、[バッチ設定ロール][デプロイ] に設定します。 詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

    6. RAM ロールに MaxCompute テーブルを管理するための権限を付与します。

      1. MaxCompute コンソール にログインし、左上隅でリージョンを選択します。

      2. [ワークスペース] > [プロジェクト] を選択します。 [プロジェクト] ページで、対象のプロジェクトの [アクション] 列にある [管理] をクリックします。image

      3. MaxCompute プロジェクト設定ページで、[ロール権限] をクリックします。image.png

        次のエラーが発生した場合は、Alibaba Cloud アカウントの対象の MaxCompute プロジェクトに現在のログイン RAM アカウントを追加する必要があります。 まず、ロールリストの [admin] ロールの [メンバーの管理] をクリックします。 次に、[メンバーの管理] ダイアログボックスで、現在のログイン RAM アカウントを選択し、ページの指示に従って追加を完了します。image.png

      4. ロールリストで、[role_project_admin] ロールに対応する [メンバーの管理] をクリックします。

      5. [メンバー管理] ダイアログボックスで、現在のログインアカウントと対象の RAM ロールアカウント (例:MaxComputeShipRole) を選択し、プロンプトに従って追加します。

      6. ロールリストで、[role_project_admin] ロールの [ロールの編集] をクリックします。

      7. [ロールの編集] ダイアログボックスの [テーブル] タブで、対象の MaxCompute テーブルを選択し、[記述][変更][更新] を選択します。image.png

    重要

    上記の承認手順は、指定された MaxCompute テーブルにのみ適用されます。 現在の MaxCompute プロジェクトのすべてのテーブルを管理するために RAM ロールを承認する場合は、現在のログインアカウントと RAM ロールに admin ロールの権限を付与します。 ロールリストで、[admin] ロールの [メンバーの管理] をクリックします。 次に、[メンバーの管理] ダイアログボックスで、現在のログインアカウントと RAM ロールを選択し、ページの指示に従って追加を完了します。

ステップ 2:MaxCompute 配信テーブルを作成する (アカウント B を使用する)

  1. Alibaba Cloud アカウント B を使用して、ODPS SQL のアドホッククエリノードを作成します。 詳細については、「アドホッククエリノードを作成する」をご参照ください。

  2. ノードの構成タブで、Simple Log Service データを格納するパーティションテーブルを作成します。 詳細については、「テーブル操作」をご参照ください。

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

ステップ 3:Simple Log Service の Alibaba Cloud アカウント A を承認する (アカウント B を使用する)

ステップ 2 で作成したアドホッククエリノードを使用して、次のコマンドを実行し、Simple Log Service の Alibaba Cloud アカウント A を承認します。

use {MaxCompute プロジェクト名};
add USER ALIYUN${Alibaba Cloud アカウント A の ID};
grant super_administrator to ALIYUN${Alibaba Cloud アカウント A の ID};

コマンドの説明

コマンド

説明

use {MaxCompute プロジェクト名}

アカウント B によって作成された MaxCompute プロジェクト名を使用します。

add USER ALIYUN${Alibaba Cloud アカウント A の ID}

MaxCompute プロジェクトにユーザーを追加します。 list users; コマンドを使用して、ユーザーを表示できます。

grant super_administrator to ALIYUN${Alibaba Cloud アカウント A の ID};

GRANT を使用して、ユーザーに super_administrator 権限を付与します。

よくある質問

承認プロセス中に次のエラーが発生する可能性があります。

Simple Log Service の Alibaba Cloud アカウントが正常に承認されているかどうかを確認する (アカウント A を使用する)

Alibaba Cloud アカウント A を使用して、アカウント A によって作成された アドホッククエリノード にログインし、次の SQL 文を実行して、アカウント A が正常に承認されているかどうかを確認します。

use {MaxCompute プロジェクト名};
show grants;

コマンドの説明

コマンド

説明

use {MaxCompute プロジェクト名}

アカウント B によって作成された MaxCompute プロジェクト名を使用します。

show grants;

Super_Administrator ロールがアカウント A に正常に付与されているかどうかを確認します。

以下に示すように結果が表示された場合、承認は成功です。

image

FAQ

use {MaxCompute プロジェクト名} コマンドを実行すると、エラーが発生する可能性があります。 解決策については、「アクセス拒否 - 承認に失敗しました」をご参照ください。

ステップ 4:RAM ユーザーに MaxCompute データ転送ジョブを管理する権限を付与する (アカウント A を使用する)

  1. Alibaba Cloud アカウント A を使用して、MaxCompute データ転送ジョブの作成に使用する RAM ユーザーを作成します。 詳細については、「RAM ユーザーを作成する」をご参照ください。

  2. RAM コンソールでカスタムポリシーを作成します。 詳細については、「JSON タブでカスタムポリシーを作成する」をご参照ください。

    [JSON] タブで、エディターの既存の内容を次のスクリプトに置き換えます。

    重要
    • 次のスクリプトの ProjectNameLogstoreName を実際の値に置き換えます。

    • RAM ユーザーを使用してデータ転送ジョブのアラートを設定する場合は、RAM ユーザーにアラートを管理する権限を付与する必要があります。 詳細については、「RAM ユーザーにアラートを管理する権限を付与する」をご参照ください。

    {
        "Version": "1",
        "Statement": [{
                "Effect": "Allow",
                "Action": [
                    "log:GetLogStore",
                    "log:GetIndex",
                    "log:GetLogStoreHistogram",
                    "log:GetLogStoreLogs"
                ],
                "Resource": [
                    "acs:log:*:*:project/ProjectName/logstore/LogstoreName",
                    "acs:log:*:*:project/ProjectName/logstore/internal-diagnostic_log"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "log:CreateJob",
                    "log:UpdateJob",
                    "log:DeleteJob",
                    "log:ListJobs",
                    "log:GetJob"
                ],
                "Resource": "acs:log:*:*:project/ProjectName/job/*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "log:ListLogStores",
                    "log:ListDashboard",
                    "log:ListSavedSearch"
                ],
                "Resource": "acs:log:*:*:project/ProjectName/*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ram:PassRole",
                    "ram:GetRole",
                    "ram:ListRoles"
                ],
                "Resource": "*"
            }
        ]
    }
  3. カスタムポリシーを RAM ユーザーに付与します。 詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

ステップ 5:RAM ロールにログストアデータの読み取り権限を付与する (アカウント A を使用する)

  1. Alibaba Cloud アカウントまたは RAM ユーザーを使用して、Alibaba Cloud 管理コンソール にログインします。

  2. クラウドリソースアクセス承認 をクリックして、承認を完了します。

    説明

    Alibaba Cloud アカウントに AliyunLogDefaultRole デフォルトロールがない場合、ログイン後に初めてリンクをクリックしたときにロールが作成されます。 Simple Log Service は、AliyunLogDefaultRole デフォルトロールを借用して他のクラウドサービスのリソースにアクセスします。 AliyunLogDefaultRole デフォルトロールの権限の詳細については、「AliyunLogDefaultRole」をご参照ください。

ステップ 6:RAM ユーザーに DataWorks テーブルへのアクセス権限を付与する (アカウント A を使用する)

Alibaba Cloud アカウント A を使用して、そのアカウントで作成された アドホッククエリノード にログインし、ステップ 4 で作成した RAM ユーザーに DataWorks テーブルを管理する権限を付与します。

説明

SQL の {MaxCompute プロジェクト名}{Alibaba Cloud アカウント A の ID}{RAM ユーザー名} を実際の値に置き換えます。

use {MaxCompute プロジェクト名};
add USER RAM${Alibaba Cloud アカウント A の ID}:{RAM ユーザー名};
grant admin to RAM${Alibaba Cloud アカウント A の ID}:{RAM ユーザー名};
show grants FOR RAM${Alibaba Cloud アカウント A の ID}:{RAM ユーザー名};

コマンドの説明

コマンド

説明

use {MaxCompute プロジェクト名}

アカウント B によって作成された MaxCompute プロジェクト名を使用します。

add USER ALIYUN${Alibaba Cloud アカウント A の ID}

MaxCompute プロジェクトにユーザーを追加します。 list users; コマンドを使用して、ユーザーを表示できます。

grant super_administrator to ALIYUN${Alibaba Cloud アカウント A の ID}

GRANT を使用して、RAM ユーザーに Admin 権限を付与します。

show grants FOR RAM${Alibaba Cloud アカウント A の ID}:{RAM ユーザー名}

Admin ロールが正常に付与されているかどうかを確認します。

以下に示すように結果が表示された場合、承認は成功です。

image

ステップ 7:MaxCompute データ転送ジョブを作成する

ステップ 4 で作成した RAM ユーザーを使用して、MaxCompute データ転送ジョブを作成する[Simple Log Service の読み取り権限][デフォルトロール] に設定し、[MaxCompute の書き込み権限][カスタムロール] に設定します。

説明

image

よくある質問

  • Simple Log Service から MaxCompute に転送されたデータの完全性を確認するにはどうすればよいですか?

  • MaxCompute データ転送ジョブ (新しいバージョン) に関する一般的なエラーと問題

  • アクセス拒否 - 承認に失敗しました

    • エラーメッセージ

      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;

    • 原因

      アカウント B (MaxCompute 用) は RAM ユーザーを使用して DataWorks をアクティブ化するため、Alibaba Cloud アカウント B を使用して DataWorks にログインしても、実際には RAM ユーザー権限を使用しています。

    • 解決策

      1. アカウント B を使用して DataWorks コンソール にログインします。 ターゲットリージョンに切り替え、左側のナビゲーションウィンドウから [その他] > [管理センター] を選択します。 ドロップダウンリストから対応するワークスペースを選択し、[管理センターに移動] をクリックします。

      2. 左側のナビゲーションウィンドウで [データソース] をクリックして、[データソース] ページに移動します。

      3. 対象のデータソースの [変更] をクリックします。

      4. 対象のデータソースの [デフォルトアクセス ID][Alibaba Cloud アカウント] に変更します。

        image