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

前提条件
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 を使用して RAM コンソール にログインします。
RAM ロールを作成する、たとえば
MaxComputeShipRoleなど。重要RAM ロールを作成する際には、[プリンシパルタイプ] を [クラウドサービス] に設定し、[プリンシパル名] を [Simple Log Service] に設定します。
RAM ロールの信頼ポリシーを確認します。
Service要素に少なくとも"log.aliyuncs.com"が含まれていることを確認します。{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "log.aliyuncs.com" ] } } ], "Version": "1" }
元の信頼ポリシーを次の内容に置き換えます。
{Alibaba Cloud アカウント A の ID}@log.aliyuncs.comとdataworks.aliyuncs.comをService設定項目に追加します。{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" }RAM ロールをワークスペースメンバーとして追加します。
DataWorks コンソール にログインします。
表示されるページの左上隅で、リージョンを選択します。
左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。 [ワークスペース] ページで、対象のワークスペースの [アクション] 列にある [管理] をクリックします。
[ワークスペース設定] ページで、[ワークスペースメンバーとロール] をクリックし、次に [メンバーを追加] をクリックします。

[メンバーの追加] ダイアログボックスで、現在のログインアカウントと対象の RAM ロールを選択し、ページの指示に従って追加を完了します。
この手順では、[バッチ設定ロール] を [デプロイ] に設定します。 詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
RAM ロールに MaxCompute テーブルを管理するための権限を付与します。
MaxCompute コンソール にログインし、左上隅でリージョンを選択します。
を選択します。 [プロジェクト] ページで、対象のプロジェクトの [アクション] 列にある [管理] をクリックします。

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

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

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

重要上記の承認手順は、指定された MaxCompute テーブルにのみ適用されます。 現在の MaxCompute プロジェクトのすべてのテーブルを管理するために RAM ロールを承認する場合は、現在のログインアカウントと RAM ロールに admin ロールの権限を付与します。 ロールリストで、[admin] ロールの [メンバーの管理] をクリックします。 次に、[メンバーの管理] ダイアログボックスで、現在のログインアカウントと RAM ロールを選択し、ページの指示に従って追加を完了します。
ステップ 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 プロジェクト名};
add USER ALIYUN${Alibaba Cloud アカウント A の ID};
grant super_administrator to ALIYUN${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 プロジェクト名};
show grants;コマンドの説明
コマンド | 説明 |
| アカウント B によって作成された MaxCompute プロジェクト名を使用します。 |
| Super_Administrator ロールがアカウント A に正常に付与されているかどうかを確認します。 以下に示すように結果が表示された場合、承認は成功です。
|
FAQ
use {MaxCompute プロジェクト名} コマンドを実行すると、エラーが発生する可能性があります。 解決策については、「アクセス拒否 - 承認に失敗しました」をご参照ください。
ステップ 4:RAM ユーザーに MaxCompute データ転送ジョブを管理する権限を付与する (アカウント 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: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 ユーザー名};コマンドの説明
コマンド | 説明 |
| アカウント B によって作成された MaxCompute プロジェクト名を使用します。 |
| MaxCompute プロジェクトにユーザーを追加します。 |
| |
| Admin ロールが正常に付与されているかどうかを確認します。 以下に示すように結果が表示された場合、承認は成功です。
|
ステップ 7:MaxCompute データ転送ジョブを作成する
ステップ 4 で作成した RAM ユーザーを使用して、MaxCompute データ転送ジョブを作成する。[Simple Log Service の読み取り権限] を [デフォルトロール] に設定し、[MaxCompute の書き込み権限] を [カスタムロール] に設定します。
アカウント間のデータ転送では、[自動承認] の [承認] をクリックする必要はありません。 データ転送ジョブは自動的にマッピングされます。
[MaxCompute の書き込み権限] の [カスタムロール] は、ステップ 1 で作成したデフォルトロールの Alibaba Cloud Resource Name (ARN) です。 詳細については、「新しいバージョンのデータ転送ジョブを作成して MaxCompute にデータを転送する」をご参照ください。

よくある質問
Simple Log Service から 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 アカウント] に変更します。


