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.
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
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.
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.
CatatanAnda 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.
Lampirkan Peran RAM instance ke instance ECS.
Masuk ke Konsol ECS.
Di bilah navigasi sisi kiri, pilih .
Di bilah navigasi atas, pilih wilayah dan grup sumber daya dari sumber daya yang ingin Anda kelola.

Temukan instance ECS yang ingin dilampirkan dengan Peran RAM instance dan pilih di kolom Tindakan.
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
Buat dan konfigurasikan Peran RAM instance.
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" }Opsional. Panggil operasi CreatePolicy untuk membuat kebijakan.
Jika Anda sudah memiliki kebijakan yang dapat dilampirkan ke Peran RAM instance, lewati langkah ini.
Atur parameter
PolicyDocumentke kebijakan berikut:{ "Statement": [ { "Action": [ "oss:Get*", "oss:List*" ], "Effect": "Allow", "Resource": "*" } ], "Version": "1" }
Panggil operasi AttachPolicyToRole untuk melampirkan kebijakan ke Peran RAM instance.
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
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.
PentingPastikan 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>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
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.
PentingPastikan 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>Tentukan Peran RAM instance yang dibuat untuk parameter
ProjectConfigdalam 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
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.
PentingPastikan 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>Tentukan Peran RAM instance yang dibuat untuk parameter
LogHubConfiguntuk 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
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.
> Instance Settings > Attach/Detach RAM Role