All Products
Search
Document Center

Simple Log Service:Akses Simple Log Service SDK pada instance ECS tanpa pasangan AccessKey

Last Updated:Jul 06, 2025

Untuk mengakses sumber daya layanan Alibaba Cloud selain Simple Log Service, instance Elastic Compute Service (ECS) atau aplikasi yang diterapkan pada instance tersebut memerlukan kredensial akses. Layanan Alibaba Cloud menggunakan kredensial ini untuk mengotentikasi identitas dan izin dari instance ECS atau aplikasi. Anda dapat melampirkan Peran RAM instance ke instance ECS. Instance ECS dan aplikasi yang berjalan di dalamnya dapat secara otomatis memperoleh serta memperbarui kredensial akses sementara tanpa perlu mengekspos pasangan AccessKey. Pendekatan ini mengurangi risiko kebocoran pasangan AccessKey dan memungkinkan manajemen izin berbasis peran RAM yang lebih efisien untuk mencegah pemberian izin berlebihan. Topik ini menjelaskan cara mengakses Simple Log Service SDK pada instance ECS tanpa memerlukan pasangan AccessKey.

Catatan
  • Peran RAM instance adalah jenis peran RAM dengan entitas tepercaya berupa layanan Alibaba Cloud. Jenis peran RAM ini digunakan untuk memberikan akses lintas layanan Alibaba Cloud dan dapat diasumsikan oleh layanan tersebut. Untuk informasi lebih lanjut tentang peran RAM, lihat Apa itu Peran RAM?.

  • Pasangan AccessKey Alibaba Cloud adalah kredensial identitas aman yang dapat digunakan untuk mengakses sumber daya Alibaba Cloud dengan memanggil operasi API. Anda dapat menggunakan pasangan AccessKey untuk menandatangani permintaan API guna melewati otentikasi keamanan. Untuk informasi lebih lanjut tentang pasangan AccessKey, lihat Pasangan AccessKey.

  • Untuk informasi lebih lanjut tentang kebijakan kustom untuk Simple Log Service, lihat Contoh Penggunaan Kebijakan Kustom untuk Memberikan Izin kepada Pengguna RAM.

Batasan

  • Anda hanya dapat mengakses Simple Log Service SDK for Java atau Simple Log Service SDK for Go pada instance ECS tanpa memerlukan pasangan AccessKey.

  • Instance ECS yang ingin dilampirkan dengan Peran RAM instance harus berada di virtual private cloud (VPC).

  • Anda hanya dapat melampirkan satu Peran RAM instance ke instance ECS.

Langkah 1: Buat peran RAM instance dan lampirkan peran ke instance ECS

Gunakan console

  1. Masuk ke Konsol RAM untuk membuat Peran RAM dengan entitas tepercaya berupa layanan Alibaba Cloud.

    Di bilah navigasi sisi kiri, pilih Identities > Roles. Di halaman Peran, klik Create Role. Di halaman Buat Peran, atur parameter berikut ke nilai tertentu dan konfigurasikan parameter lainnya sesuai kebutuhan bisnis Anda. Untuk informasi lebih lanjut tentang pengaturan parameter, lihat Buat Peran Layanan Reguler.

    • Tipe Principal: Pilih Cloud Service.

    • Nama Principal: Pilih / ECS/ ECS.

  2. Berikan izin kepada Peran RAM instance.

    Lampirkan kebijakan sistem atau kebijakan kustom yang Anda buat ke Peran RAM instance untuk memberikan izin mengakses atau mengelola sumber daya tertentu. Sebagai contoh, Anda dapat menggunakan kebijakan AliyunLogReadOnlyAccess untuk memberikan izin membaca data dari Simple Log Service.

    Catatan

    Anda dapat melampirkan system policies atau custom policies ke Peran RAM instance. Jika kebijakan sistem tidak memenuhi kebutuhan bisnis Anda, Anda dapat membuat kebijakan kustom. Untuk informasi lebih lanjut, lihat Buat Kebijakan Kustom.

  3. Lampirkan Peran RAM instance ke instance ECS.

    1. Masuk ke Konsol ECS.

    2. Di bilah navigasi sisi kiri, pilih Instances & Images > Instances.

    3. Di bilah navigasi atas, pilih wilayah dan grup sumber daya dari sumber daya yang ingin Anda kelola. 地域

    4. Temukan instance ECS yang ingin dilampirkan dengan Peran RAM instance dan pilih 图标 > Instance Settings > Attach/Detach RAM Role di kolom Tindakan.

    5. Di kotak dialog Lampirkan/Lepaskan Peran RAM, pilih Peran RAM instance yang Anda buat dari daftar drop-down Peran RAM dan klik Confirm.

Gunakan operasi API

  1. Buat dan konfigurasikan Peran RAM instance.

    1. Panggil operasi CreateRole untuk membuat Peran RAM instance.

      Atur parameter AssumeRolePolicyDocument ke kebijakan berikut:

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

      Jika Anda sudah memiliki kebijakan yang dapat dilampirkan ke Peran RAM instance, lewati langkah ini.

      Atur parameter PolicyDocument ke kebijakan berikut:

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

  3. Panggil operasi AttachInstanceRamRole untuk melampirkan Peran RAM instance ke instance ECS.

Langkah 2: Akses Simple Log Service SDK

Java

Simple Log Service SDK for Java

  1. Untuk menggunakan Simple Log Service SDK for Java dalam proyek Maven, tambahkan dependensi terkait ke file pom.xml. Untuk informasi lebih lanjut, lihat Ikhtisar Simple Log Service SDK for Java.

    Penting

    Pastikan versi SDK adalah 0.6.110 atau lebih baru.

    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>aliyun-log</artifactId>
        <version>0.6.110</version>
    </dependency>
  2. Tentukan Peran RAM instance yang dibuat untuk kelas Client. Untuk informasi lebih lanjut, lihat Langkah 1: Buat Peran RAM Instance dan Lampirkan Peran ke Instance ECS.

    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 {
        // Atur parameter RoleName ke peran RAM instance yang dibuat.
        Client client = new Client("cn-hangzhou.log.aliyuncs.com", "RoleName");
        GetProjectResponse resp = client.GetProject("your-project");
        System.out.println(resp.GetProjectDescription());
      }
    }

Aliyun Log Java Producer

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

    Penting

    Pastikan versi Producer adalah 0.3.22 atau lebih baru.

    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>aliyun-log-producer</artifactId>
        <version>0.3.22</version>
    </dependency>
  2. Tentukan Peran RAM instance yang dibuat untuk parameter ProjectConfig dalam pengaturan proyek. Untuk informasi lebih lanjut, lihat Langkah 1: Buat Peran RAM Instance dan Lampirkan Peran ke Instance ECS.

    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";
            // Konfigurasikan parameter ProducerConfig.
            Config producerConfig = new ProducerConfig();
            // Buat produser.
            Producer producer = new LogProducer(new ProducerConfig());
            // Ganti your-ecs-ram-role-name dengan peran RAM instance yang dibuat.
            CredentialsProvider provider = new ECSRoleCredentialsProvider("your-ecs-ram-role-name");
            // Konfigurasikan 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;
        }
    }
    

Aliyun Log Java Consumer

  1. Untuk menggunakan Aliyun Log Java Consumer dalam proyek Maven, tambahkan dependensi terkait ke file pom.xml. Untuk informasi lebih lanjut, lihat Gunakan Grup Konsumen untuk Mengonsumsi Log.

    Penting

    Pastikan versi Consumer adalah 0.6.47 atau lebih baru.

    <dependency>
      <groupId>com.aliyun.openservices</groupId>
      <artifactId>loghub-client-lib</artifactId>
      <version>0.6.47</version>
    </dependency>
  2. Tentukan Peran RAM instance yang dibuat untuk parameter LogHubConfig untuk membuat konsumen. Untuk informasi lebih lanjut, lihat Langkah 1: Buat Peran RAM Instance dan Lampirkan Peran ke Instance ECS.

    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 peran RAM instance yang dibuat.
            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

Pastikan versi Simple Log Service SDK for Go adalah 0.1.83 atau lebih baru. Untuk informasi lebih lanjut tentang cara memperbarui Simple Log Service SDK for Go, lihat Instal atau Perbarui Simple Log Service SDK for Go.

Simple Log Service for Go

Tentukan Peran RAM instance yang dibuat untuk parameter provider. Untuk informasi lebih lanjut, lihat Langkah 1: Buat Peran RAM Instance dan Lampirkan Peran ke Instance ECS.

package main

import (
	"fmt"

	sls "github.com/aliyun/aliyun-log-go-sdk"
)

func main() {
        // Titik akhir Simple Log Service. Dalam contoh ini, titik akhir Simple Log Service untuk wilayah China (Hangzhou) digunakan. Ganti nilai parameter dengan titik akhir sebenarnya. 
	Endpoint := "cn-chengdu.log.aliyuncs.com"
	// Ganti your-ecs-ram-role-name dengan peran RAM instance yang dibuat.
	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)
}

Aliyun Log Go Producer

Tentukan Peran RAM instance yang dibuat untuk parameter provider dalam pengaturan ProducerConfig. Untuk informasi lebih lanjut, lihat Langkah 1: Buat Peran RAM Instance dan Lampirkan Peran ke Instance ECS.

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 peran RAM instance yang dibuat.
	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("Dapatkan sinyal shutdown dan mulai shutdown")
		producerInstance.Close(60000)
	}
}

Aliyun Log Go Consumer

Tentukan Peran RAM instance yang dibuat untuk parameter CredentialsProvider. Untuk informasi lebih lanjut, lihat Langkah 1: Buat Peran RAM Instance dan Lampirkan Peran ke Instance ECS.

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 peran RAM instance yang dibuat.
		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", "dapatkan sinyal stop, mulai hentikan pekerja konsumen", "nama pekerja konsumen", option.ConsumerName)
		consumerWorker.StopAndWait()
	}
}

// Logika konsumsi data.
func process(shardId int, logGroupList *sls.LogGroupList, checkpointTracker consumerLibrary.CheckPointTracker) (string, error) {
	fmt.Println(shardId, logGroupList)
	checkpointTracker.SaveCheckPoint(false)
	return "", nil
}

Referensi

  • Jika aplikasi mandiri Anda diterapkan pada instance ECS, Anda dapat melampirkan Peran RAM instance ke instance ECS dan menggunakan Peran RAM instance untuk mengakses Key Management Service (KMS) dari instance tersebut. Untuk informasi lebih lanjut, lihat Gunakan Peran RAM Instance yang Dilampirkan ke Instance ECS untuk Mengakses KMS Secara Aman.

  • Jika instance ECS tidak lagi memerlukan izin tertentu, Anda dapat mencabut izin dari Peran RAM instance yang dilampirkan ke instance tersebut. Untuk informasi lebih lanjut, lihat Cabut Izin dari Peran RAM.

  • Jika Anda melakukan hard coding pasangan AccessKey plaintext dalam kode yang digunakan untuk memanggil operasi API Alibaba Cloud, pasangan AccessKey tersebut mungkin bocor karena manajemen izin repositori kode yang tidak tepat. Untuk memanggil operasi API Alibaba Cloud, kami sarankan menggunakan kredensial akses alih-alih pasangan AccessKey yang di-hard code. Untuk informasi lebih lanjut, lihat Praktik Terbaik untuk Menggunakan Kredensial Akses untuk Memanggil Operasi API.