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

Simple Log Service:MaxCompute へのデータ書き込みのためのデフォルトロールの承認 (Alibaba Cloud アカウント間でのデータの配信)

最終更新日:May 21, 2025

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

背景情報

Simple Log Service プロジェクトと MaxCompute プロジェクトは、アカウント A (Simple Log Service プロジェクト用) とアカウント B (MaxCompute プロジェクト用) など、異なる Alibaba Cloud アカウントに属しています。 アカウント B の Resource Access Management (RAM) ロールに MaxCompute へのデータ書き込みを承認する必要があります。 その後、MaxCompute データ配信ジョブは、ログストアから MaxCompute テーブルにデータを書き込むために RAM ロールをアシュームできます。

これは、アカウント間でデータを配信する際に、権限の制約により 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 を使用して クラウド リソースアクセス承認 にアクセスし、[AliyunLogDefaultRole] を作成します。

  2. アカウント B の [AliyunLogDefaultRole] の信頼ポリシーを変更します。 詳細については、「RAM ロールの信頼ポリシーを編集する」をご参照ください。

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

    Service 設定項目に {Alibaba Cloud アカウント A の ID}@log.aliyuncs.comdataworks.aliyuncs.com を追加します。 {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"  // アカウントAのID
                    ]
                }
            }
        ],
        "Version": "1"
    }
  3. RAM ロールをワークスペースメンバーとして追加します。

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

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

    3. 左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。

    4. [ワークスペース] ページで、対象のワークスペースの [アクション] 列にある [管理] をクリックします。

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

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

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

    7. [AliyunLogDefaultRole] ロールに MaxCompute テーブルを管理するための権限を付与します。

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

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

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

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

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

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

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

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

      重要

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

ステップ 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 project name}; // MaxComputeプロジェクト名
add USER ALIYUN${ID of Alibaba Cloud Account A}; // Alibaba CloudアカウントAのID
grant super_administrator to ALIYUN${ID of Alibaba Cloud Account A}; // Alibaba CloudアカウントAのID

コマンドの説明

コマンド名

説明

use {MaxCompute project name}

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

add USER ALIYUN${ID of Alibaba Cloud Account A}

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

grant super_administrator to ALIYUN${ID of Alibaba Cloud Account A};

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 アカウントを管理したり、権限を付与したりする権限がありません。 詳細については、「操作ユーザーに権限がないエラーを解決する方法」をご参照ください。

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

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

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

コマンドの説明

コマンド名

説明

use {MaxCompute project name}

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

show grants;

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

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

image

よくある質問

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

ステップ 4: MaxCompute データ配信ジョブを管理するための RAM ユーザーを承認する (アカウント 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: DataWorks テーブルにアクセスするための RAM ユーザーの承認 (アカウント A を使用する)

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

説明

SQL ステートメントの {MaxCompute project name}{ID of Alibaba Cloud Account A}{RAM username} を実際の値に置き換えます。

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

コマンドの説明

コマンド名

説明

use {MaxCompute project name}

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

add USER ALIYUN${ID of Alibaba Cloud Account A}

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

grant super_administrator to ALIYUN${ID of Alibaba Cloud Account A}

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

show grants FOR RAM${ID of Alibaba Cloud Account A}:{RAM username}

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