All Products
Search
Document Center

Simple Log Service:Gunakan SLS SDK di ECS tanpa AccessKey

Last Updated:Jun 22, 2026

Saat aplikasi yang berjalan pada instance ECS perlu mengakses sumber daya cloud lainnya, Anda harus mengonfigurasi kredensial akses. Dengan menyambungkan RAM role ke instance ECS, instance tersebut dapat secara otomatis memperoleh dan memperbarui kredensial sementara. Pendekatan ini menghindari eksposur AccessKey Anda sehingga mengurangi risiko kebocoran. RAM role juga memungkinkan kontrol akses detail halus dan mencegah alokasi izin yang berlebihan. Topik ini menjelaskan cara menggunakan Simple Log Service SDK pada instance ECS tanpa AccessKey.

Catatan
  • Instance RAM role adalah jenis RAM role yang menggunakan layanan Alibaba Cloud sebagai principal tepercaya. Role ini memungkinkan layanan cloud mengasumsikan peran tersebut untuk mengaktifkan akses lintas layanan. Untuk informasi selengkapnya tentang RAM role, lihat Apa itu RAM role?.

  • Pasangan Kunci Akses (AccessKey pair) Alibaba Cloud adalah kredensial keamanan yang digunakan untuk memanggil API dan mengakses sumber daya cloud. Anda dapat menggunakan pasangan AccessKey untuk menandatangani permintaan API guna verifikasi keamanan sisi server. Untuk informasi selengkapnya tentang pasangan AccessKey, lihat Pasangan Kunci Akses.

  • Untuk informasi selengkapnya tentang kebijakan kustom untuk Simple Log Service, lihat Contoh kebijakan kustom RAM.

Batasan

Langkah 1: Buat dan sambungkan instance RAM role

Konsol

  1. Masuk ke Konsol RAM dan buat RAM role yang menggunakan layanan Alibaba Cloud sebagai principal.

    Pilih Identities > Roles, lalu klik Create Role. Ikuti petunjuk di layar untuk membuat role tersebut dengan memperhatikan parameter berikut. Untuk parameter lainnya, konfigurasikan sesuai kebutuhan. Untuk informasi selengkapnya, lihat Buat role layanan umum.

    • Trusted Entity: Pilih Alibaba Cloud Service.

    • Untuk Role Type, pilih ECS. Lalu, dari daftar drop-down Trusted Service, pilih ECS.

  2. Berikan izin kepada Peran RAM Instans.

    Sambungkan kebijakan sistem atau kebijakan kustom ke RAM role untuk memberikan izin yang diperlukan. Misalnya, untuk memberikan akses read-only ke Simple Log Service, sambungkan kebijakan AliyunLogReadOnlyAccess ke role tersebut.

    Catatan

    Anda dapat menambahkan System Policy atau Custom Policy. Jika kebijakan sistem tidak memenuhi kebutuhan Anda, Anda dapat membuat kebijakan kustom. Untuk informasi selengkapnya, lihat Buat kebijakan kustom.

  3. Sambungkan instance RAM role ke instance ECS.

    1. Masuk ke Konsol ECS.

    2. Di panel navigasi kiri, pilih Instances & Images > Instance.

    3. Di bilah navigasi atas, pilih wilayah dan kelompok sumber daya tempat instance target berada.

    4. Temukan instance ECS target dan pilih 图标 > Instance Settings > Attach/Detach RAM Role di kolom Actions.

    5. Di kotak dialog yang muncul, pilih instance RAM role yang telah Anda buat, lalu klik OK.

API

  1. Buat dan konfigurasikan instance RAM role.

    1. Panggil CreateRole untuk membuat instance RAM role.

      Atur parameter AssumeRolePolicyDocument ke kebijakan berikut:

      {
           "Statement": [
           {
               "Action": "sts:AssumeRole",
               "Effect": "Allow",
               "Principal": {
               "Service": [
               "ecs.aliyuncs.com"
               ]
               }
           }
           ],
           "Version": "1"
       }
    2. (Opsional) Panggil CreatePolicy untuk membuat kebijakan izin.

      Anda dapat melewati langkah ini jika sudah memiliki kebijakan izin yang tersedia.

      Atur parameter PolicyDocument sebagai berikut:

      {
           "Statement": [
               {
               "Action": [
                   "oss:Get*",
                   "oss:List*"
               ],
               "Effect": "Allow",
               "Resource": "*"
               }
           ],
           "Version": "1"
       }
  2. Panggil operasi AttachPolicyToRole untuk menyambungkan kebijakan izin ke instance RAM role.

  3. Panggil operasi AttachInstanceRamRole untuk menyambungkan instance RAM role ke instance ECS.

Langkah 2: Akses SLS SDK

Java

Java SDK

  1. Untuk menggunakan Simple Log Service SDK untuk Java dalam proyek Maven, tambahkan dependensi berikut ke file pom.xml. Untuk informasi selengkapnya, lihat Simple Log Service SDK untuk Java.

    Penting

    Versi minimum yang diperlukan untuk Simple Log Service SDK untuk Java adalah 0.6.110.

    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>aliyun-log</artifactId>
        <version>0.6.110</version>
    </dependency>
  2. Untuk kelas Client, masukkan nama instance RAM role yang Anda buat di Langkah 1 sebagai parameter input.

    import com.aliyun.openservices.log.exception.LogException;
    import com.aliyun.openservices.log.response.GetProjectResponse;
    public class Main {
      public static void main(String[] args) throws LogException {
        // Ganti RoleName dengan nama RAM role yang Anda buat.
        Client client = new Client("cn-hangzhou.log.aliyuncs.com", "RoleName");
        GetProjectResponse resp = client.GetProject("your-project");
        System.out.println(resp.GetProjectDescription());
      }
    }

Java Producer

  1. Untuk menggunakan Aliyun Log Java Producer dalam proyek Maven, tambahkan dependensi berikut ke file pom.xml. Untuk informasi selengkapnya, lihat Aliyun Log Java Producer.

    Penting

    Versi minimum yang diperlukan untuk Aliyun Log Java Producer adalah 0.3.22.

    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>aliyun-log-producer</artifactId>
        <version>0.3.22</version>
    </dependency>
  2. Di Konfigurasi Proyek Log, tentukan nama instance RAM role yang Anda buat di Langkah 1 untuk parameter ProjectConfig.

    import com.aliyun.openservices.aliyun.log.producer.*;
    import com.aliyun.openservices.aliyun.log.producer.errors.ProducerException;
    import com.aliyun.openservices.log.common.LogItem;
    import com.aliyun.openservices.log.common.auth.CredentialsProvider;
    import com.aliyun.openservices.log.common.auth.ECSRoleCredentialsProvider;
    public class ExampleUsage {
        public static void main(String[] args) throws ProducerException, InterruptedException {
            String endpoint = "cn-hangzhou.log.aliyuncs.com";
            String project = "your-project";
            String logStore = "your-logstore";
            // Konfigurasi ProducerConfig.
            Config producerConfig = new ProducerConfig();
            // Buat producer.
            Producer producer = new LogProducer(new ProducerConfig());
            // Ganti your-ecs-ram-role-name dengan nama RAM role yang Anda buat.
            CredentialsProvider provider = new ECSRoleCredentialsProvider("your-ecs-ram-role-name");
            // Konfigurasi proyek.
            ProjectConfig projectConfig = new ProjectConfig(project, endpoint, provider, null);
            producer.putProjectConfig(projectConfig);
            // Kirim log.
            producer.send(project, logStore, buildLogItem());
            producer.send(project, logStore, null, null, buildLogItem());
            producer.send(project, logStore, "", "", buildLogItem());
            producer.close();
        }
        public static LogItem buildLogItem() {
            LogItem logItem = new LogItem();
            logItem.PushBack("k1", "v1");
            logItem.PushBack("k2", "v2");
            return logItem;
        }
    }
    

Java Consumer

  1. Untuk menggunakan Aliyun Log Java Consumer dalam proyek Maven, tambahkan dependensi berikut ke file pom.xml. Untuk informasi selengkapnya, lihat Gunakan kelompok konsumen untuk mengonsumsi log.

    Penting

    Versi minimum yang diperlukan untuk Aliyun Log Java Consumer adalah 0.6.47.

    <dependency>
      <groupId>com.aliyun.openservices</groupId>
      <artifactId>loghub-client-lib</artifactId>
      <version>0.6.47</version>
    </dependency>
  2. Untuk membuat konsumen, atur parameter LogHubConfig ke nama instance RAM role yang Anda buat di Langkah 1.

    import com.aliyun.openservices.log.common.auth.ECSRoleCredentialsProvider;
    import com.aliyun.openservices.log.common.auth.CredentialsProvider;
    import com.aliyun.openservices.loghub.client.ClientWorker;
    import com.aliyun.openservices.loghub.client.config.LogHubConfig;
    import com.aliyun.openservices.loghub.client.exceptions.LogHubClientWorkerException;
    public class Main {
        private static String Endpoint = "cn-hangzhou.log.aliyuncs.com";
        private static String Project = "your-project";
        private static String Logstore = "your-logstore";
        private static String ConsumerGroup = "consumerGroupX";
        public static void main(String[] args) throws LogHubClientWorkerException, InterruptedException {
            // Ganti your-ecs-ram-role-name dengan nama RAM role yang Anda buat.
            CredentialsProvider provider = new ECSRoleCredentialsProvider("your-ecs-ram-role-name");
            LogHubConfig config = new LogHubConfig(ConsumerGroup, "consumer_1", Endpoint, Project, Logstore, provider,
                    LogHubConfig.ConsumePosition.BEGIN_CURSOR);
            config.setMaxFetchLogGroupSize(1000);
            ClientWorker worker = new ClientWorker(new SampleLogHubProcessorFactory(), config);
            Thread thread = new Thread(worker);
            thread.start();
            Thread.sleep(60 * 60 * 1000);
            worker.shutdown();
            Thread.sleep(30 * 1000);
        }
    }

Go

Penting

Untuk mengakses Simple Log Service SDK untuk Go tanpa AccessKey, Anda harus menggunakan versi 0.1.83 atau lebih baru dari SDK tersebut. Untuk meningkatkan SDK, lihat Instal atau tingkatkan SDK.

Go SDK

provider menentukan nama instance RAM role yang Anda buat di Langkah 1.

package main
import (
	"fmt"
	sls "github.com/aliyun/aliyun-log-go-sdk"
)
func main() {
        // Titik akhir Simple Log Service. Contoh ini menggunakan wilayah Tiongkok (Chengdu). Ganti nilai ini dengan titik akhir yang sebenarnya.
	Endpoint := "cn-chengdu.log.aliyuncs.com"
	// Ganti your-ecs-ram-role-name dengan nama RAM role yang Anda buat.
	provider := sls.NewEcsRamRoleCredentialsProvider("your-ecs-ram-role-name")
	// Buat klien Simple Log Service.
	client := sls.CreateNormalInterfaceV2(Endpoint, provider)
	resp, err := client.GetProject("your-project")
	if err != nil {
		panic(err)
	}
	fmt.Println(resp.Description)
}

Go Producer

Di Konfigurasi ProducerConfig, atur parameter provider ke nama instance RAM role yang Anda buat di Langkah 1.

package main
import (
	"fmt"
	"os"
	"os/signal"
	"sync"
	"time"
	sls "github.com/aliyun/aliyun-log-go-sdk"
	"github.com/aliyun/aliyun-log-go-sdk/producer"
	"github.com/gogo/protobuf/proto"
)
func main() {
	producerConfig := producer.GetDefaultProducerConfig()
	producerConfig.Endpoint = "cn-hangzhou.log-aliyuncs.com"
    // Ganti your-ecs-ram-role-name dengan nama RAM role yang Anda buat.
	provider := sls.NewEcsRamRoleCredentialsProvider("your-ecs-ram-role-name")
	producerConfig.CredentialsProvider = provider
	producerInstance := producer.InitProducer(producerConfig)
	ch := make(chan os.Signal)
	signal.Notify(ch, os.Kill, os.Interrupt)
	producerInstance.Start()
	var m sync.WaitGroup
	for i := 0; i < 10; i++ {
		m.Add(1)
		go func() {
			defer m.Done()
			for i := 0; i < 1000; i++ {
				log := producer.GenerateLog(uint32(time.Now().Unix()), map[string]string{"content": "test", "content2": fmt.Sprintf("%v", i)})
				err := producerInstance.SendLog("log-project", "log-store", "topic", "127.0.0.1", log)
				if err != nil {
					fmt.Println(err)
				}
			}
		}()
	}
	m.Wait()
	fmt.Println("Pengiriman selesai")
	if _, ok := <-ch; ok {
		fmt.Println("Menerima sinyal shutdown dan mulai proses shutdown")
		producerInstance.Close(60000)
	}
}

Go Consumer

Untuk parameter input CredentialsProvider, masukkan nama instance RAM role yang Anda buat di Langkah 1.

package main
import (
	"fmt"
	"os"
	"os/signal"
	"syscall"
	sls "github.com/aliyun/aliyun-log-go-sdk"
	consumerLibrary "github.com/aliyun/aliyun-log-go-sdk/consumer"
	"github.com/go-kit/kit/log/level"
)
func main() {
	option := consumerLibrary.LogHubConfig{
		Endpoint: "cn-hangzhou.log-aliyuncs.com",
		// Ganti your-ecs-ram-role-name dengan nama RAM role yang Anda buat.
		CredentialsProvider: sls.NewEcsRamRoleCredentialsProvider("your-ecs-ram-role-name"),
		Project:             "your-project",
		Logstore:            "your-logstore",
		ConsumerGroupName:   "your-consumer-group",
		ConsumerName:        "your-consumer-group-consumer-1",
		CursorPosition:      consumerLibrary.END_CURSOR,
	}
	consumerWorker := consumerLibrary.InitConsumerWorkerWithCheckpointTracker(option, process)
	ch := make(chan os.Signal, 1)
	signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
	consumerWorker.Start()
	if _, ok := <-ch; ok {
		level.Info(consumerWorker.Logger).Log("msg", "menerima sinyal berhenti, mulai menghentikan consumer worker", "consumer worker name", option.ConsumerName)
		consumerWorker.StopAndWait()
	}
}
// Implementasikan logika konsumsi data.
func process(shardId int, logGroupList *sls.LogGroupList, checkpointTracker consumerLibrary.CheckPointTracker) (string, error) {
	fmt.Println(shardId, logGroupList)
	checkpointTracker.SaveCheckPoint(false)
	return "", nil
}

Dokumentasi terkait