Todos los productos
Search
Centro de documentos

Simple Log Service:Use the SLS SDK on ECS without an AccessKey

Última actualización: Sep 04, 2026

Al vincular un instance RAM role a una instancia de ECS, puede utilizar el SDK de Simple Log Service (SLS) sin necesidad de un AccessKey. La instancia obtiene y renueva automáticamente las credenciales temporales, lo que elimina el riesgo de fugas de AccessKey y permite un control de acceso detallado.

Nota
  • Un instance RAM role utiliza un servicio de Alibaba Cloud como entidad de confianza, lo que permite que dicho servicio asuma el rol para el acceso entre servicios. Para obtener más información, consulte What is a RAM role?.

  • Un par de AccessKey es una credencial de seguridad que se usa para firmar solicitudes de API con el fin de verificar la identidad y los permisos. Para obtener más información, consulte AccessKey pair.

  • Para más información sobre las políticas personalizadas de Simple Log Service, consulte RAM custom policy examples.

Limitaciones

Paso 1: Crear y vincular un instance RAM role

Console

  1. Inicie sesión en la consola de RAM y cree un rol de RAM que utilice un servicio de Alibaba Cloud como entidad principal.

    Seleccione Identities > Roles y haga clic en Create Role. Siga las instrucciones en pantalla para crear el rol y preste atención a los siguientes parámetros. Configure el resto de los parámetros según sus necesidades. Para obtener más información, consulte Create a common service role.

    • Select Trusted Entity: Seleccione Alibaba Cloud Service.

    • En Role Type, seleccione Normal Service Role. A continuación, en la lista desplegable Trusted Service, seleccione ECS.

  2. Otorgue permisos al instance RAM role.

    Vincule una política del sistema o personalizada al rol de RAM para conceder los permisos necesarios. Por ejemplo, vincule la política AliyunLogReadOnlyAccess para otorgar acceso de solo lectura a Simple Log Service.

    Nota

    Puede agregar una System Policy o una Custom Policy. Si las políticas del sistema no cumplen con sus requisitos, puede crear una política personalizada. Para obtener más información, consulte Create a custom policy.

  3. Vincule el instance RAM role a una instancia de ECS.

    1. Inicie sesión en la consola de ECS.

    2. En el panel de navegación izquierdo, seleccione Instances & Images > Instance.

    3. En la barra de navegación superior, seleccione la región y el resource group al que pertenece la instancia de destino.

    4. Localice la instancia de ECS de destino y, en la columna Actions, seleccione 图标 > Instance Settings > Attach/Detach RAM Role.

    5. En el cuadro de diálogo que aparece, seleccione el instance RAM role que creó y haga clic en OK.

API

  1. Cree y configure un instance RAM role.

    1. Llame a CreateRole para crear un instance RAM role.

      Establezca el parámetro AssumeRolePolicyDocument con la siguiente política:

      {
           "Statement": [
           {
               "Action": "sts:AssumeRole",
               "Effect": "Allow",
               "Principal": {
               "Service": [
               "ecs.aliyuncs.com"
               ]
               }
           }
           ],
           "Version": "1"
       }
    2. (Opcional) Llame a CreatePolicy para crear una política de permisos.

      Puede omitir este paso si ya cuenta con una política de permisos disponible.

      Configure el parámetro PolicyDocument de la siguiente manera:

      {
           "Statement": [
               {
               "Action": [
                   "oss:Get*",
                   "oss:List*"
               ],
               "Effect": "Allow",
               "Resource": "*"
               }
           ],
           "Version": "1"
       }
  2. Llame a la operación AttachPolicyToRole para vincular la política de permisos al instance RAM role.

  3. Llame a la operación AttachInstanceRamRole para vincular el instance RAM role a la instancia de ECS.

Paso 2: Acceder al SDK de SLS

Java

Java SDK

  1. Para usar el SDK de Simple Log Service para Java en un proyecto Maven, agregue la siguiente dependencia al archivo pom.xml. Para obtener más información, consulte Simple Log Service SDK for Java.

    Importante

    La versión mínima obligatoria del SDK de Simple Log Service para Java es la 0.6.110.

    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>aliyun-log</artifactId>
        <version>0.6.110</version>
    </dependency>
  2. Para la clase Client, pase the name of the instance RAM role that you created in Step 1 como parámetro de entrada.

    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 {
        // Replace RoleName with the name of the RAM role that you created.
        Client client = new Client("cn-hangzhou.log.aliyuncs.com", "RoleName");
        GetProjectResponse resp = client.GetProject("your-project");
        System.out.println(resp.GetProjectDescription());
      }
    }

Java Producer

  1. Para usar Aliyun Log Java Producer en un proyecto Maven, agregue la siguiente dependencia al archivo pom.xml. Para obtener más información, consulte Aliyun Log Java Producer.

    Importante

    La versión mínima obligatoria de Aliyun Log Java Producer es la 0.3.22.

    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>aliyun-log-producer</artifactId>
        <version>0.3.22</version>
    </dependency>
  2. En Configure a Log Project, especifique the name of the instance RAM role that you created in Step 1 para el parámetro 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";
            // Configure ProducerConfig.
            Config producerConfig = new ProducerConfig();
            // Create a producer.
            Producer producer = new LogProducer(new ProducerConfig());
            // Replace your-ecs-ram-role-name with the name of the RAM role that you created.
            CredentialsProvider provider = new ECSRoleCredentialsProvider("your-ecs-ram-role-name");
            // Configure the project.
            ProjectConfig projectConfig = new ProjectConfig(project, endpoint, provider, null);
            producer.putProjectConfig(projectConfig);
            // Send logs.
            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. Para usar Aliyun Log Java Consumer en un proyecto Maven, agregue la siguiente dependencia al archivo pom.xml. Para obtener más información, consulte Use consumer groups to consume logs.

    Importante

    La versión mínima obligatoria de Aliyun Log Java Consumer es la 0.6.47.

    <dependency>
      <groupId>com.aliyun.openservices</groupId>
      <artifactId>loghub-client-lib</artifactId>
      <version>0.6.47</version>
    </dependency>
  2. Para create a consumer, establezca el parámetro LogHubConfig en the name of the instance RAM role that you created in Step 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 {
            // Replace your-ecs-ram-role-name with the name of the RAM role that you created.
            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

Importante

Para utilizar el SDK de Simple Log Service para Go sin AccessKey, debe usar la versión 0.1.83 o posterior. Para actualizar el SDK, consulte Install or upgrade the SDK.

Go SDK

provider especifica the name of the instance RAM role that you created in Step 1.

package main
import (
	"fmt"
	sls "github.com/aliyun/aliyun-log-go-sdk"
)
func main() {
        // The endpoint of Simple Log Service. This example uses the China (Chengdu) region. Replace the value with the actual endpoint.
	Endpoint := "cn-chengdu.log.aliyuncs.com"
	// Replace your-ecs-ram-role-name with the name of the RAM role that you created.
	provider := sls.NewEcsRamRoleCredentialsProvider("your-ecs-ram-role-name")
	// Create a Simple Log Service client.
	client := sls.CreateNormalInterfaceV2(Endpoint, provider)
	resp, err := client.GetProject("your-project")
	if err != nil {
		panic(err)
	}
	fmt.Println(resp.Description)
}

Go Producer

En Configure ProducerConfig, establezca el parámetro provider en name of the instance RAM role that you created in Step 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"
    // Replace your-ecs-ram-role-name with the name of the RAM role that you created.
	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("Send completion")
	if _, ok := <-ch; ok {
		fmt.Println("Get the shutdown signal and start to shut down")
		producerInstance.Close(60000)
	}
}

Go Consumer

Para el parámetro de entrada CredentialsProvider, pase name of the instance RAM role that you created in Step 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",
		// Replace your-ecs-ram-role-name with the name of the RAM role that you created.
		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", "get stop signal, start to stop consumer worker", "consumer worker name", option.ConsumerName)
		consumerWorker.StopAndWait()
	}
}
// Implement the data consumption logic.
func process(shardId int, logGroupList *sls.LogGroupList, checkpointTracker consumerLibrary.CheckPointTracker) (string, error) {
	fmt.Println(shardId, logGroupList)
	checkpointTracker.SaveCheckPoint(false)
	return "", nil
}

Documentación relacionada