RAM (Resource Access Management) におけるロールは、ユーザーと同様に管理します。ただし、RAM ユーザーのように、認証に必要な AccessKey を RAM ユーザーロールに作成することはできません。認証に必要な AccessKey を持つアカウントが、RAM ユーザーロールを行使する必要があります。つまり、AccessKey を持つアカウントに、RAM ユーザーロールを割り当てる必要があります。RAM ユーザーロールを割り当てられたアカウントは、リソースにアクセスするための一時的なセキュリティトークンを受け取ります。アカウントはこの一時的なセキュリティトークンを使って RAM ユーザーロールに付与されている権限を行使します。

RAM ユーザーロールに付与されている Log Service 操作権をアカウントが行使するには、以下の設定を行います (ユーザーロールを作成 → Alibaba Cloud アカウントを指定 → ユーザーロールに権限を付与 → RAM ユーザーに AssumeRole 権限を付与 → ユーザーロールより一時的なセキュリティトークンを取得)。

詳細は、「ユーザー」をご参照ください。

ステップ 1. ユーザーロールを作成し、認証可能なアカウントを指定

  1. RAM コンソールにログインします。左側のナビゲーションメニューのロール管理をクリックします。
  2. 右上隅の新規ロールをクリックします。ロール作成 ダイアログボックスが表示されます。
  3. ロールタイプの選択ステップでは、ユーザーロールを選択します。
  4. タイプの入力ステップでは、Alibaba Cloud アカウントを選択します。
    • Alibaba Cloud アカウント下の RAM ユーザーに割り当てるロールを作成する場合 (たとえば、モバイルアプリから直接 Log Service リソースを操作するためのロールを作成する場合) は、ログイン中の Alibaba Cloud アカウントを選択します。
    • アカウント間リソース操作といった、別の Alibaba Cloud アカウント下の RAM ユーザーが行使するロールを作成する場合は、 別の Alibaba Cloud アカウントを選択し、Alibaba Cloud アカウント ID欄に別の Alibaba Cloud アカウントの ID を入力します。
    図 1. ロール作成
  5. 基本情報ステップでは、ロール名および説明を入力し、作成をクリックします。

ステップ 2. ユーザーロールに権限を付与する

作成したユーザーロールには、まだ何の権限もありません。ユーザーロールに、Log Service 操作を実行する権限を付与する必要があります。ユーザーロールに権限を付与すると、前のステップで指定したアカウントが Log Service を操作できるようになります。

ユーザーロールには、システムポリシーおよびカスタムポリシーを複数付与することができます。本ドキュメントでは、ユーザーロールに、Log Service を管理する権限を付与します。
  1. RAM コンソールの左側のナビゲーションメニューよりロール管理をクリックします。
  2. ロール名の右の許可をクリックします。
  3. AliyunLogFullAccess 権限をクリックし、OK をクリックします。

詳細は、「RAM 権限付与」をご参照ください。

ステップ 3. RAM ユーザーにユーザーロールを割り当てる

ユーザーロールは、AccessKey をもつアカウントしか行使することができません。ただし、Alibaba Cloud アカウント自身がユーザーロールを行使することはできません。Alibaba Cloud アカウント下の RAM ユーザーに権限を委譲し、RAM ユーザーにユーザーロールを行使させる必要があります。RAM ユーザーのみがユーザーロールを行使することができます

したがって、Alibaba Cloud アカウントは、その RAM ユーザーに AssumeRole 権限を付与する必要があります。RAM ユーザーに STS (Security Token Service) の AssumeRole API を呼び出す権限を付与しない限り、RAM ユーザーは Alibaba Cloud アカウントの代わりに、ステップ 1 で作成したユーザーロールを行使できません。

  1. Alibaba Cloud アカウントで RAM コンソールにログインします。
  2. ユーザー管理ページで、RAM ユーザーの右側の許可をクリックします。

    RAM ユーザーをまだ作成していない場合は、「ユーザー」を参照してユーザーを作成します。

  3. システムポリシー AliyunSTSAssumeRoleAccess を選択し、OKをクリックします。

ステップ 4. RAM ロールの一時セキュリティトークンを取得

RAM ユーザーに AssumeRole を付与すると、RAM ユーザーは AccessKey を使用して STS (Security Token Service) の AssumeRole API を呼び出し、ロールの一時的なセキュリティトークンを取得することができるようになります。

AssumeRole API の呼び出し方法については、「はじめに」をご参照ください。

STS SDK を使用して AccessKeyId、AccessKeySecret、および SecurityToken を取得すると、Log Service SDK を使用して Log Service にアクセスできるようになります。

AccessKeyId、AccessKeySecret、および SecurityToken を使用してログクライアントを初期化する方法は、次の例のとおりです。Java SDK の使用方法については、「Java SDK」をご参照ください。
package sdksample;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.util.Date;
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.*;
import com.aliyun.openservices.log.exception.*;
import com.aliyun.openservices.log.request.*;
import com.aliyun.openservices.log.response.*;
import com.aliyun.openservices.log.common.LogGroupData;
import com.aliyun.openservices.log.common.LogItem;
import com.aliyun.openservices.log.common.Logs.Log;
import com.aliyun.openservices.log.common.Logs.Log.Content;
import com.aliyun.openservices.log.common.Logs.LogGroup;
import com.aliyun.openservices.log.common.Consts.CursorMode;
public class sdksample {
    public static void main(String args[]) throws LogException, InterruptedException {
        String endpoint = "<log_service_endpoint>"; // 前のステップで作成したプロジェクトの属するリージョンのエンドポイントを指定
        String accessKeyId = ""<your_access_key_id>"; // お客様の Alibaba Cloud アカウントの AccessKey ID を指定
        String accessKeySecret = ""<your_access_key_secret>"; // お客様の Alibaba Cloud アカウントの AccessKey Secret を指定
    String securityToken = ""<your_security_token>"; // ロールの Security Token を指定
        String project = ""<project_name>"; // 前のステップで作成したプロジェクトの名前を指定
        String logstore = ""<logstore_name>"; // 前のステップで作成した Logstore の名前を指定
        // クライアントインスタンスを作成
        Client client = new Client(endpoint, accessKeyId, accessKeySecret);
    // SecurityToken を指定
    client.SetSecurityToken(securityToken);
        // ログを書き込む
        String topic = "";
        String source = "";
        // 10 パケットを続けて送信、1 パケットにつきログ 10 件
        for (int i = 0; i < 10; i++) {
            Vector<LogItem> logGroup = new Vector<LogItem>();
            for (int j = 0; j < 10; j++) {
                LogItem logItem = new LogItem((int) (new Date().getTime() / 1000));
                logItem.PushBack("index"+String.valueOf(j), String.valueOf(i * 10 + j));
                logGroup.add(logItem);
            }
            PutLogsRequest req2 = new PutLogsRequest(project, logstore, topic, source, logGroup);
            client.PutLogs(req2);
    }
    }
}