データ配信ジョブの新しいバージョンでは、ログストアからのデータは 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 テーブル名とフィールドのマッピングが失敗する問題を解決します。

前提条件
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 を使用する)
Alibaba Cloud アカウント B を使用して クラウド リソースアクセス承認 にアクセスし、[AliyunLogDefaultRole] を作成します。
アカウント B の [AliyunLogDefaultRole] の信頼ポリシーを変更します。 詳細については、「RAM ロールの信頼ポリシーを編集する」をご参照ください。
元の信頼ポリシーを次の内容に置き換えます。
Service設定項目に{Alibaba Cloud アカウント A の ID}@log.aliyuncs.comとdataworks.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" }RAM ロールをワークスペースメンバーとして追加します。
[DataWorks コンソール] にログインします。
表示されるページの左上隅で、リージョンを選択します。
左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。
[ワークスペース] ページで、対象のワークスペースの [アクション] 列にある [管理] をクリックします。
[ワークスペース設定] ページで、[ワークスペースメンバーとロール] をクリックします。 次に、[ワークスペースメンバー] タブで、[メンバーを追加] をクリックします。

[メンバーを追加] ダイアログボックスで、現在のログインアカウントと [AliyunLogDefaultRole] を選択し、ページの指示に従って追加を完了します。
このステップでは、[ロールの一括設定] を [デプロイ] に設定します。 詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

[AliyunLogDefaultRole] ロールに MaxCompute テーブルを管理するための権限を付与します。
[MaxCompute コンソール] にログインし、左上隅でリージョンを選択します。
を選択します。 [プロジェクト] ページで、対象のプロジェクトの [アクション] 列にある [管理] をクリックします。

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

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

ロールリストで、[role_project_admin] ロールに対応する [メンバーの管理] をクリックします。
[メンバーの管理] ダイアログボックスで、現在のログインアカウントと [AliyunLogDefaultRole] を選択し、ページの指示に従って追加を完了します。
ロールリストで、[role_project_admin] ロールの [ロールの編集] をクリックします。
[ロールの編集] ダイアログボックスの [テーブル] タブで、対象の MaxCompute テーブルを選択し、[記述]、[変更]、[更新] を選択します。

重要上記の承認手順は、指定された MaxCompute テーブルに対してのみ有効です。 AliyunLogDefaultRole に現在の MaxCompute プロジェクトのすべてのテーブルを管理する権限を付与する場合は、現在のログインアカウントと AliyunLogDefaultRole に admin ロールの権限を付与します。 ロールリストで、[admin] ロールの [メンバーの管理] をクリックします。 次に、[メンバーの管理] ダイアログボックスで、現在のログインアカウントと AliyunLogDefaultRole を選択し、ページの指示に従って追加を完了します。
ステップ 2: MaxCompute 配信テーブルを作成する (アカウント B を使用する)
Alibaba Cloud アカウント B を使用して ODPS SQL のアドホッククエリノードを作成します。 詳細については、「アドホッククエリノードを作成する」をご参照ください。
ノードの構成タブで、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コマンドの説明
コマンド名 | 説明 |
| アカウント 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 アカウントを管理したり、権限を付与したりする権限がありません。 詳細については、「操作ユーザーに権限がないエラーを解決する方法」をご参照ください。
Simple Log Service の Alibaba Cloud アカウントが正常に承認されているかどうかを確認する (アカウント A を使用する)
Alibaba Cloud アカウント A を使用して、アカウント A によって作成された アドホッククエリノード にログインし、次の SQL ステートメントを実行して、アカウント A が正常に承認されているかどうかを確認します。
use {MaxCompute project name}; // MaxComputeプロジェクト名
show grants;コマンドの説明
コマンド名 | 説明 |
| アカウント B によって作成された MaxCompute プロジェクト名を使用します。 |
| Super_Administrator ロールがアカウント A に正常に付与されているかどうかを確認します。 以下のように結果が表示された場合、承認は成功です。
|
よくある質問
use {MaxCompute project name} コマンドを実行するとエラーが発生する場合があります。 解決策については、「アクセス拒否 - 承認に失敗しました」をご参照ください。
ステップ 4: MaxCompute データ配信ジョブを管理するための RAM ユーザーを承認する (アカウント A を使用する)
Alibaba Cloud アカウント A を使用して、MaxCompute データ配信ジョブの作成に使用する RAM ユーザーを作成します。 詳細については、「RAM ユーザーを作成する」をご参照ください。
RAM コンソールでカスタムポリシーを作成します。 詳細については、「JSON タブでカスタムポリシーを作成する」をご参照ください。
[JSON] タブで、エディターの既存の内容を次のスクリプトに置き換えます。
重要次のスクリプトの
ProjectNameとLogstoreNameを実際の値に置き換えます。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": "*" } ] }RAM ユーザーにカスタムポリシーを付与します。 詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
ステップ 5: ログストアデータを読み取るための RAM ロールの承認 (アカウント A を使用する)
Alibaba Cloud アカウントまたは RAM ユーザーを使用して、[Alibaba Cloud 管理コンソール] にログインします。
[クラウド リソースアクセス承認] をクリックして、承認を完了します。
説明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ユーザー名コマンドの説明
コマンド名 | 説明 |
| アカウント B によって作成された MaxCompute プロジェクト名を使用します。 |
| MaxCompute プロジェクトにユーザーを追加します。 |
| |
| Admin ロールが正常に付与されているかどうかを確認します。 以下のように結果が表示された場合、承認は成功です。
|
ステップ 7: MaxCompute データ配信ジョブを作成する
ステップ 4 で作成した RAM ユーザーを使用して、MaxCompute データ配信ジョブ (新バージョン) を作成します。 Simple Log Service の読み取り権限を [デフォルトロール] に設定し、MaxCompute の書き込み権限を [カスタムロール] に設定します。
アカウント間のデータ配信の場合、[自動承認] の [承認] をクリックする必要はありません。 データ配信ジョブは自動的にマッピングされます。
[MaxCompute の書き込み権限] の [カスタムロール] は、ステップ 1 で作成したデフォルトロールの Alibaba Cloud リソースネーム (ARN) です。 詳細については、「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 ユーザー権限を使用しています。
解決策
アカウント B を使用して [DataWorks コンソール] にログインします。 デスティネーションリージョンに切り替え、左側のナビゲーションウィンドウから を選択します。 ドロップダウンリストから対応するワークスペースを選択し、[管理センターに移動] をクリックします。
左側のナビゲーションウィンドウで [データソース] をクリックして、[データソース] ページに移動します。
対象のデータソースの [変更] をクリックします。
対象のデータソースの [デフォルトアクセス ID] を [Alibaba Cloud アカウント] に変更します。


