Todos los productos
Search
Centro de documentos

Tablestore:Use STS temporary credentials to access Tablestore

Última actualización: Sep 03, 2026

Puede utilizar Security Token Service (STS) para emitir una credencial de acceso temporal a otro usuario. Este usuario podrá emplear dicha credencial para acceder a los recursos de Tablestore durante el periodo de validez de la misma. Las credenciales temporales no exponen sus claves de largo plazo y se invalidan automáticamente al expirar, lo que hace que el acceso a sus recursos de Tablestore sea más flexible y seguro.

Contexto

Un RAM role es un usuario virtual al que se le pueden otorgar permisos para acceder a recursos específicos. A diferencia de un usuario RAM, un rol RAM no posee credenciales de identidad permanentes (como una contraseña de inicio de sesión o un par de AccessKey). Una entidad de confianza (por ejemplo, un usuario RAM) debe asumir el rol. Tras una asunción exitosa, la entidad de confianza recibe credenciales de identidad temporales para el rol RAM —específicamente, un token de Security Token Service (token STS)— y puede usar este token para acceder a Tablestore actuando como dicho rol RAM.

Los roles RAM para cuentas de Alibaba Cloud están diseñados principalmente para escenarios de acceso entre cuentas y autorización temporal. Este tema utiliza un ejemplo en el que un usuario RAM dentro de la misma cuenta asume un rol RAM para demostrar cómo usar credenciales temporales de STS con el fin de acceder a recursos de Tablestore.

Procedimiento

Para utilizar credenciales temporales de STS y acceder a Tablestore, primero cree un rol RAM que será asumido y otórguele permisos de acceso a Tablestore. A continuación, cree un usuario RAM para que asuma dicho rol y obtenga las credenciales temporales de STS. Finalmente, utilice estas credenciales para enviar solicitudes de acceso a los recursos de Tablestore.

Paso 1: Crear un rol RAM

  1. Inicie sesión en la consola de Resource Access Management (RAM) con su cuenta de Alibaba Cloud (cuenta principal) o como administrador de RAM.

  2. En el panel de navegación izquierdo, seleccione Identities > Roles para ir a la página de Roles.

  3. Haga clic en Create Role, configure la entidad de confianza y haga clic en OK.

    Parámetro

    Valor de ejemplo

    Tipo de entidad de confianza

    Cuenta de Alibaba Cloud

    Nombre de la entidad de confianza

    Cuenta actual de Alibaba Cloud

  4. En el cuadro de diálogo Create Role, establezca Role Name como RamTablestore y haga clic en OK.

Al usar STS para obtener credenciales temporales, debe especificar el ARN del rol RAM. Puede encontrar y copiar el ARN en la sección Basic Information de la página de detalles del rol.

El formato del ARN para este rol es acs:ram::<Alibaba Cloud account ID>:role/ramtablestore. Haga clic en el botón Copy junto al ARN para obtenerlo.

Paso 2: Otorgar permisos de acceso a Tablestore

Uso de una política predeterminada

Otorgue al rol RAM permisos de acceso a Tablestore mediante la política AliyunOTSFullAccess.

Nota

La política AliyunOTSFullAccess concede acceso total a Tablestore. También puede elegir una de las siguientes opciones:

  • Para permisos de solo lectura, asigne al rol RAM la política AliyunOTSReadOnlyAccess.

  • Para permisos de solo escritura, asigne al rol RAM la política AliyunOTSWriteOnlyAccess.

  1. En el panel de navegación izquierdo, seleccione Identities > Roles.

  2. En la página de Roles, localice el rol RAM objetivo.

  3. Haga clic en Attach Policy junto al rol RAM, o bien haga clic en el nombre del rol para ir a su página de detalles y luego en Grant Permission dentro de la sección Permissions.

  4. En el panel Grant Permission, dentro de la sección Access Policy, busque AliyunOTSFullAccess y selecciónela.

  5. Haga clic en Confirm New Authorization.

Uso de una política personalizada

  1. Cree una política personalizada.

    1. En el panel de navegación izquierdo, seleccione Permissions > Policies.

    2. En la página de Policies, haga clic en Create Policy.

    3. En la página Create Policy, haga clic en Script Editor, introduzca el script en el cuadro de entrada y haga clic en OK.

      El siguiente script de ejemplo otorga permisos para acceder a una sola instancia. Personalice el script de la política según sea necesario; por ejemplo, para controlar permisos a nivel de tabla o API, o basándose en condiciones como dirección IP u hora de acceso. Para más información sobre las políticas de RAM, consulte Custom RAM policies .
      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "ots:*",
            "Resource": "acs:ots:*:*:instance/your_instance_name*"
          }
        ]
      }
    4. En el cuadro de diálogo Create Policy, introduzca un nombre de política como TestRAMPolicy y haga clic en OK.

  1. Asigne la política personalizada al rol RAM.

    1. En el panel de navegación izquierdo, seleccione Identities > Roles.

    2. En la página de Roles, localice el rol RAM objetivo.

    3. Haga clic en Attach Policy junto al rol RAM, o bien haga clic en el nombre del rol para ir a su página de detalles y luego en Grant Permission dentro de la sección Permissions.

    4. En el panel Grant Permission, dentro de la sección Access Policy, busque y seleccione la política de acceso personalizada que creó.

    5. Haga clic en Confirm.

Puede consultar las políticas asignadas en la pestaña Permissions de la página de detalles del rol.

Paso 3: Crear un usuario RAM

Cree un usuario RAM para que asuma el rol RAM.

  1. Inicie sesión en la consola de RAM con su cuenta de Alibaba Cloud o con un usuario RAM que tenga permisos administrativos.

  2. En el panel de navegación izquierdo, seleccione Identities > Users.

  3. En la página Users, haga clic en Create User.

  4. En la página Create User, dentro de la sección User Account Information, configure la información básica del usuario:

    • Logon Name: El nombre de inicio de sesión puede contener letras, dígitos, puntos (.), guiones (-) y guiones bajos (_). Su longitud máxima es de 64 caracteres.

    • Display Name: El nombre para mostrar puede tener hasta 128 caracteres de longitud.

    • Tag: Haga clic en el icono edit e introduzca una clave y un valor de etiqueta. Añadir una etiqueta facilita la búsqueda y gestión del usuario RAM.

    Nota

    Puede hacer clic en Add User para crear varios usuarios RAM en lote.

  5. En la sección Access Mode, seleccione Programmatic Access y luego haga clic en OK.

    Nota

    Para permitir que el usuario RAM inicie sesión en la consola de administración de Alibaba Cloud, seleccione Console Access.

  6. En la columna Actions, haga clic en Copy para guardar la información del usuario RAM. También puede copiar el AccessKey ID y el AccessKey secret por separado.

    Importante

    El AccessKey secret se muestra únicamente una vez al momento de la creación y no se puede recuperar posteriormente. Guárdelo inmediatamente en un lugar seguro.

Paso 4: Otorgar al usuario RAM permiso para invocar AssumeRole

Para asumir un rol RAM, el usuario debe contar con permiso para invocar AssumeRole.

  1. En el panel de navegación izquierdo, seleccione Identities > Users.

  2. En la página de Users, localice el usuario RAM objetivo.

  3. Haga clic en Add Permissions junto al usuario RAM, o bien haga clic en el nombre del usuario para ir a su página de detalles y luego en Grant Permission en la pestaña Permission Management.

  4. En la sección access policy del panel Grant Permission, busque AliyunSTSAssumeRoleAccess y selecciónela.

  5. Haga clic en Confirm.

Paso 5: Usar el usuario RAM para asumir el rol y obtener credenciales temporales

Antes de acceder a los recursos, utilice el usuario RAM para asumir el rol y obtener las credenciales temporales. Estas credenciales son válidas únicamente durante su periodo de vigencia. Este ejemplo utiliza Java.

También puede call the AssumeRole operation directamente en OpenAPI Explorer para obtener credenciales temporales.

Preparativos

  1. Añada la siguiente dependencia a su proyecto Maven.

    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>sts20150401</artifactId>
        <version>1.1.6</version>
    </dependency>
  2. Configure las variables de entorno. Una vez completada la configuración, reinicie o actualice su entorno de compilación y ejecución, incluyendo IDE, interfaz de línea de comandos, otras aplicaciones de escritorio y servicios en segundo plano, para asegurar que las variables de entorno del sistema más recientes se carguen correctamente.

    Linux

    1. Ejecute los siguientes comandos en la interfaz de línea de comandos para agregar la configuración de variables de entorno al archivo ~/.bashrc.

      echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      echo "export TABLESTORE_STS_ROLE_ARN='YOUR_RAM_ROLE_ARN'" >> ~/.bashrc
    2. Ejecute el siguiente comando para aplicar los cambios:

      source ~/.bashrc
    3. Ejecute los siguientes comandos para comprobar si las variables de entorno surten efecto:

      echo $ALIBABA_CLOUD_ACCESS_KEY_ID
      echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
      echo $TABLESTORE_STS_ROLE_ARN

    macOS

    1. Ejecute el siguiente comando en la terminal para verificar el tipo de shell predeterminado.

      echo $SHELL
    2. Realice las operaciones correspondientes según el tipo de shell predeterminado.

      Zsh

      1. Ejecute los siguientes comandos para agregar la configuración de variables de entorno al archivo ~/.zshrc.

        echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
        echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        echo "export TABLESTORE_STS_ROLE_ARN='YOUR_RAM_ROLE_ARN'" >> ~/.zshrc
      2. Ejecute el siguiente comando para aplicar los cambios:

        source ~/.zshrc
      3. Ejecute los siguientes comandos para comprobar si las variables de entorno surten efecto:

        echo $ALIBABA_CLOUD_ACCESS_KEY_ID
        echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
        echo $TABLESTORE_STS_ROLE_ARN

      Bash

      1. Ejecute los siguientes comandos para agregar la configuración de variables de entorno al archivo ~/.bash_profile.

        echo "export ALIBABA_CLOUD_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
        echo "export ALIBABA_CLOUD_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
        echo "export TABLESTORE_STS_ROLE_ARN='YOUR_RAM_ROLE_ARN'" >> ~/.bash_profile
      2. Ejecute el siguiente comando para aplicar los cambios:

        source ~/.bash_profile
      3. Ejecute los siguientes comandos para comprobar si las variables de entorno surten efecto:

        echo $ALIBABA_CLOUD_ACCESS_KEY_ID
        echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET
        echo $TABLESTORE_STS_ROLE_ARN

    Windows

    CMD

    1. Ejecute los siguientes comandos en CMD para establecer las variables de entorno.

      setx ALIBABA_CLOUD_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx ALIBABA_CLOUD_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      setx TABLESTORE_STS_ROLE_ARN "YOUR_RAM_ROLE_ARN"
    2. Después de reiniciar CMD, ejecute los siguientes comandos para comprobar si las variables de entorno surten efecto:

      echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
      echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%
      echo %TABLESTORE_STS_ROLE_ARN%

    PowerShell

    1. Ejecute el siguiente comando en PowerShell:

      [Environment]::SetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("TABLESTORE_STS_ROLE_ARN", "YOUR_RAM_ROLE_ARN", [EnvironmentVariableTarget]::User)
    2. Ejecute los siguientes comandos para comprobar si las variables de entorno surten efecto:

      [Environment]::GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      [Environment]::GetEnvironmentVariable("TABLESTORE_STS_ROLE_ARN", [EnvironmentVariableTarget]::User)

Código de ejemplo

El siguiente código de ejemplo utiliza un usuario RAM para asumir un rol, obtiene credenciales temporales de STS y las imprime en la consola. Las credenciales tienen una validez de una hora.

Para consultar la lista de endpoints de STS, véase Endpoints .
import com.aliyun.sts20150401.models.AssumeRoleResponse;
import com.aliyun.tea.*;
public class AssumeRoleSample {
    public static com.aliyun.sts20150401.Client createClient() throws Exception {
        // Leaking AccessKey credentials in source code may compromise all resources under your account. Use this sample code for reference only.
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // Required. Ensure the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // Required. Ensure the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint for the STS service
        config.endpoint = "sts.cn-hangzhou.aliyuncs.com";
        return new com.aliyun.sts20150401.Client(config);
    }
    public static void main(String[] args) throws Exception {
        com.aliyun.sts20150401.Client client = AssumeRoleSample.createClient();
        com.aliyun.sts20150401.models.AssumeRoleRequest assumeRoleRequest = new com.aliyun.sts20150401.models.AssumeRoleRequest()
                // Validity period of the temporary credential, in seconds. Minimum is 900. Maximum depends on the role's maximum session duration (range: 3600–43200 seconds; default: 3600).
                .setDurationSeconds(3600L)
                // Required. Ensure the TABLESTORE_STS_ROLE_ARN environment variable (the RAM role ARN) is set.
                .setRoleArn(System.getenv("TABLESTORE_STS_ROLE_ARN"))
                // Required. A custom role session name to distinguish tokens.
                .setRoleSessionName("RAMTablestore");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // Obtain and print STS temporary credentials. Store them securely.
            AssumeRoleResponse response = client.assumeRoleWithOptions(assumeRoleRequest, runtime);
            System.out.println("Expiration: " + response.getBody().getCredentials().getExpiration());
            System.out.println("Access Key Id: " + response.getBody().getCredentials().getAccessKeyId());
            System.out.println("Access Key Secret: " + response.getBody().getCredentials().getAccessKeySecret());
            System.out.println("Security Token: " + response.getBody().getCredentials().getSecurityToken());
        } catch (TeaException error) {
            // Print errors for demonstration only. Handle exceptions carefully in production code. Never ignore them.
            // Error message
            System.out.println(error.getMessage());
            // Diagnostic link
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // Print errors for demonstration only. Handle exceptions carefully in production code. Never ignore them.
            // Error message
            System.out.println(error.getMessage());
            // Diagnostic link
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }
    }
}

Para SDK de STS y ejemplos de código en otros lenguajes, consulte Overview of STS SDKs.

Paso 6: Acceder a Tablestore mediante credenciales de acceso temporales

Preparativos

  1. Cree una instancia y tablas de datos en la consola de Tablestore.

  2. Obtenga el nombre de la instancia, instance endpoint y region ID.

    Importante

    Las nuevas instancias no habilitan el acceso a la red pública de forma predeterminada. Si requiere acceso público, enable public network access para la instancia.

  3. Configure las variables de entorno. Una vez completada la configuración, reinicie o actualice su entorno de compilación y ejecución, incluyendo IDE, interfaz de línea de comandos, otras aplicaciones de escritorio y servicios en segundo plano, para asegurar que las variables de entorno del sistema más recientes se carguen correctamente.

    Linux

    1. Ejecute los siguientes comandos en la interfaz de línea de comandos para agregar la configuración de variables de entorno al archivo ~/.bashrc.

      echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_STS_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_STS_ACCESS_KEY_SECRET'" >> ~/.bashrc
      echo "export TABLESTORE_SESSION_TOKEN='YOUR_STS_TOKEN'" >> ~/.bashrc
    2. Ejecute el siguiente comando para aplicar los cambios:

      source ~/.bashrc
    3. Ejecute los siguientes comandos para comprobar si las variables de entorno surten efecto:

      echo $TABLESTORE_ACCESS_KEY_ID
      echo $TABLESTORE_ACCESS_KEY_SECRET
      echo $TABLESTORE_SESSION_TOKEN

    macOS

    1. Ejecute el siguiente comando en la terminal para verificar el tipo de shell predeterminado.

      echo $SHELL
    2. Realice las operaciones correspondientes según el tipo de shell predeterminado.

      Zsh

      1. Ejecute los siguientes comandos para agregar la configuración de variables de entorno al archivo ~/.zshrc.

        echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_STS_ACCESS_KEY_ID'" >> ~/.zshrc
        echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_STS_ACCESS_KEY_SECRET'" >> ~/.zshrc
        echo "export TABLESTORE_SESSION_TOKEN='YOUR_STS_TOKEN'" >> ~/.zshrc
      2. Ejecute el siguiente comando para aplicar los cambios:

        source ~/.zshrc
      3. Ejecute los siguientes comandos para comprobar si las variables de entorno surten efecto:

        echo $TABLESTORE_ACCESS_KEY_ID
        echo $TABLESTORE_ACCESS_KEY_SECRET
        echo $TABLESTORE_SESSION_TOKEN

      Bash

      1. Ejecute los siguientes comandos para agregar la configuración de variables de entorno al archivo ~/.bash_profile.

        echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_STS_ACCESS_KEY_ID'" >> ~/.bash_profile
        echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_STS_ACCESS_KEY_SECRET'" >> ~/.bash_profile
        echo "export TABLESTORE_SESSION_TOKEN='YOUR_STS_TOKEN'" >> ~/.bash_profile
      2. Ejecute el siguiente comando para aplicar los cambios:

        source ~/.bash_profile
      3. Ejecute los siguientes comandos para comprobar si las variables de entorno surten efecto:

        echo $TABLESTORE_ACCESS_KEY_ID
        echo $TABLESTORE_ACCESS_KEY_SECRET
        echo $TABLESTORE_SESSION_TOKEN

    Windows

    CMD

    1. Ejecute los siguientes comandos en CMD para establecer las variables de entorno.

      setx TABLESTORE_ACCESS_KEY_ID "YOUR_STS_ACCESS_KEY_ID"
      setx TABLESTORE_ACCESS_KEY_SECRET "YOUR_STS_ACCESS_KEY_SECRET"
      setx TABLESTORE_SESSION_TOKEN "YOUR_STS_TOKEN"
    2. Después de reiniciar CMD, ejecute los siguientes comandos para comprobar si las variables de entorno surten efecto:

      echo %TABLESTORE_ACCESS_KEY_ID%
      echo %TABLESTORE_ACCESS_KEY_SECRET%
      echo %TABLESTORE_SESSION_TOKEN%

    PowerShell

    1. Ejecute el siguiente comando en PowerShell:

      [Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", "YOUR_STS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", "YOUR_STS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      [Environment]::SetEnvironmentVariable("TABLESTORE_SESSION_TOKEN", "YOUR_STS_TOKEN", [EnvironmentVariableTarget]::User)
    2. Ejecute los siguientes comandos para comprobar si las variables de entorno surten efecto:

      [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
      [Environment]::GetEnvironmentVariable("TABLESTORE_SESSION_TOKEN", [EnvironmentVariableTarget]::User)
  4. Instale el SDK de Tablestore correspondiente a su lenguaje de programación.

    Java

    Si utiliza Maven, añada la siguiente dependencia al archivo pom.xml de su proyecto:

    <dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>tablestore</artifactId> <version>5.17.4</version> </dependency>

    Para más información, consulte Install Tablestore SDK for Java.

    Go

    Ejecute el comando go mod init <DIRNAME> en el directorio del proyecto para generar el archivo go.mod. Luego, ejecute el siguiente comando para instalar el SDK de Tablestore para Go:

    Nota

    <DIRNAME> indica la ruta del directorio del proyecto. Reemplace <DIRNAME> con la ruta real de su directorio de proyecto.

    go get github.com/aliyun/aliyun-tablestore-go-sdk/tablestore

    Para más información, consulte Install Tablestore SDK for Go.

    Python

    Ejecute el siguiente comando para usar pip e instalar el SDK de Tablestore para Python:

    sudo pip install tablestore

    Para más información, consulte Install Tablestore SDK for Python.

    Node.js

    Ejecute el siguiente comando para instalar el SDK de Tablestore para Node.js:

    npm install tablestore

    Para más información, consulte Install Tablestore SDK for Node.js.

    .NET

    Para más detalles, consulte Install Tablestore SDK for .NET.

    PHP

    Para más detalles, consulte Install Tablestore SDK for PHP.

Modelo de tabla ancha

Al utilizar el modelo de tabla ancha, inicialice el cliente de tabla ancha con credenciales temporales de STS y envíe las solicitudes.

Java

Firma V4 (recomendada)

El siguiente código de ejemplo en Java inicializa un cliente mediante la firma V4 y lista todos los nombres de tabla en la instancia.

import com.alicloud.openservices.tablestore.ClientConfiguration;
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.*;
import com.alicloud.openservices.tablestore.model.AlwaysRetryStrategy;
import com.alicloud.openservices.tablestore.model.ListTableResponse;
public class InitClientV4 {
    public static void main(String[] args) {
        // Replace yourRegion with your instance region, such as cn-hangzhou
        final String region = "yourRegion";
        // Replace yourInstanceName with your instance name
        final String instanceName = "yourInstanceName";
        // Replace yourEndpoint with your instance endpoint
        final String endpoint = "yourEndpoint";
        // Get STS credentials from environment variables
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
        final String securityToken = System.getenv("TABLESTORE_SESSION_TOKEN");
        // Build V4 signature
        DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, securityToken);
        V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
        CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
        // Initialize Tablestore client
        SyncClient client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
        /*
        // Customize ClientConfiguration if needed. Examples:
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        clientConfiguration.setConnectionTimeoutInMillisecond(5000); // Connection timeout in milliseconds
        clientConfiguration.setSocketTimeoutInMillisecond(5000); // Socket timeout in milliseconds
        clientConfiguration.setRetryStrategy(new AlwaysRetryStrategy()); // Retry strategy; default used if not set
        SyncClient client = new SyncClient(endpoint, provider, instanceName, clientConfiguration, new ResourceManager(null, null));
         */
        // List and print table names
        ListTableResponse listTableResponse = client.listTable();
        listTableResponse.getTableNames().forEach(System.out::println);
        // Shut down Tablestore client
        client.shutdown();
    }
}

Firma V2

El siguiente código de ejemplo en Java inicializa un cliente mediante la firma V2 y lista todos los nombres de tabla en la instancia.

import com.alicloud.openservices.tablestore.ClientConfiguration;
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.AlwaysRetryStrategy;
import com.alicloud.openservices.tablestore.model.ListTableResponse;
public class InitClientV2 {
    public static void main(String[] args) {
        // Replace yourInstanceName with your instance name
        final String instanceName = "yourInstanceName";
        // Replace yourEndpoint with your instance endpoint
        final String endpoint = "yourEndpoint";
        // Get STS credentials from environment variables
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
        final String securityToken = System.getenv("TABLESTORE_SESSION_TOKEN");
        // Build V2 signature
        DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, securityToken);
        CredentialsProvider provider = new DefaultCredentialProvider(credentials);
        // Initialize Tablestore client
        SyncClient client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
        /*
        // Customize ClientConfiguration if needed. Examples:
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        clientConfiguration.setConnectionTimeoutInMillisecond(5000); // Connection timeout in milliseconds
        clientConfiguration.setSocketTimeoutInMillisecond(5000); // Socket timeout in milliseconds
        clientConfiguration.setRetryStrategy(new AlwaysRetryStrategy()); // Retry strategy; default used if not set
        SyncClient client = new SyncClient(endpoint, provider, instanceName, clientConfiguration, new ResourceManager(null, null));
         */
        // List and print table names
        ListTableResponse listTableResponse = client.listTable();
        listTableResponse.getTableNames().forEach(System.out::println);
        // Shut down Tablestore client
        client.shutdown();
    }
}

Go

El siguiente código de ejemplo en Go inicializa un cliente y lista todos los nombres de tabla en la instancia.

package main
import (
	"fmt"
	"os"
	"github.com/aliyun/aliyun-tablestore-go-sdk/tablestore"
)
func main() {
	// Replace yourInstanceName with your instance name
	instanceName := "yourInstanceName"
	// Replace yourEndpoint with your instance endpoint
	endpoint := "yourEndpoint"
	// Get STS credentials from environment variables
	accessKeyId := os.Getenv("TABLESTORE_ACCESS_KEY_ID")
	accessKeySecret := os.Getenv("TABLESTORE_ACCESS_KEY_SECRET")
	securityToken := os.Getenv("TABLESTORE_SESSION_TOKEN")
	// Initialize Tablestore client
	client := tablestore.NewClientWithConfig(endpoint, instanceName, accessKeyId, accessKeySecret, securityToken, nil)	
	// List and print table names
	tables, err := client.ListTable()
    if err != nil {
        fmt.Println("Failed to list table.")
    } else {
        for _, table := range (tables.TableNames) {
            fmt.Println(table)
        }
    }
}

Python

El siguiente código de ejemplo en Python inicializa un cliente y lista todos los nombres de tabla en la instancia.

# -*- coding: utf-8 -*-
import os
from tablestore import OTSClient
# Replace yourInstanceName with your instance name
instance_name = "yourInstanceName"
# Replace yourEndpoint with your instance endpoint
endpoint = "yourEndpoint"
# Get STS credentials from environment variables
access_key_id = os.getenv("TABLESTORE_ACCESS_KEY_ID")
access_key_secret = os.getenv("TABLESTORE_ACCESS_KEY_SECRET")
sts_token = os.getenv("TABLESTORE_SESSION_TOKEN")
# Initialize Tablestore client
client = OTSClient(endpoint, access_key_id, access_key_secret, instance_name, sts_token=sts_token)
# List and print table names
resp = client.list_table()
for table_name in resp:
    print(table_name)

Node.js

El siguiente código de ejemplo en Node.js inicializa un cliente y lista todos los nombres de tabla en la instancia.

// Adjust the relative path as needed.
var TableStore = require('../index.js');
// Replace yourInstanceName with your instance name
var instancename = 'yourInstanceName';
// Replace yourEndpoint with your instance endpoint
var endpoint = 'yourEndpoint';
// Get STS credentials from environment variables
var accessKeyId = process.env.TABLESTORE_ACCESS_KEY_ID;
var accessKeySecret = process.env.TABLESTORE_ACCESS_KEY_SECRET;
var stsToken = process.env.TABLESTORE_SESSION_TOKEN;
// Initialize Tablestore client
var client = new TableStore.Client({
  accessKeyId: accessKeyId,
  secretAccessKey: accessKeySecret,
  stsToken: stsToken,
  endpoint: endpoint,
  instancename: instancename 
});
// List and print table names
client.listTable({}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', data);
});

PHP

El siguiente código de ejemplo en PHP inicializa un cliente y lista todos los nombres de tabla en la instancia.

<?php
// Adjust the relative path as needed.
require (__DIR__ . '/../../vendor/autoload.php');
use Aliyun\OTS\OTSClient as OTSClient;
// Replace yourInstanceName with your instance name
$instanceName = "yourInstanceName";
// Replace yourEndpoint with your instance endpoint
$endpoint = "yourEndpoint";
// Get STS credentials from environment variables
$accessKeyId = getenv('TABLESTORE_ACCESS_KEY_ID');
$accessKeySecret = getenv('TABLESTORE_ACCESS_KEY_SECRET');
$stsToken = getenv('TABLESTORE_SESSION_TOKEN');
// Initialize Tablestore client
$client = new OTSClient(array(
    'EndPoint' => $endpoint,
    'AccessKeyID' => $accessKeyId,
    'AccessKeySecret' => $accessKeySecret,
    'InstanceName' => $instanceName,
    'StsToken' => $stsToken,
));
// List and print table names
$response = $client->listTable (array ());
print json_encode ($response);

Modelo de series de tiempo

Al utilizar el modelo de series de tiempo, inicialice el cliente de series de tiempo con credenciales temporales de STS y envíe las solicitudes. El modelo de series de tiempo es compatible con Java, Go y Python.

Java

Firma V4 (recomendada)

El siguiente código de ejemplo en Java inicializa un cliente mediante la firma V4 y lista todos los nombres de tabla de series de tiempo en la instancia.

import com.alicloud.openservices.tablestore.ClientConfiguration;
import com.alicloud.openservices.tablestore.TimeseriesClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.AlwaysRetryStrategy;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;
public class InitTimeseriesClientV4 {
    public static void main(String[] args) {
        // Replace yourRegion with your instance region, such as cn-hangzhou
        final String region = "yourRegion";
        // Replace yourInstanceName with your instance name
        final String instanceName = "yourInstanceName";
        // Replace yourEndpoint with your instance endpoint
        final String endpoint = "yourEndpoint";
        // Get STS credentials from environment variables
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
        final String securityToken = System.getenv("TABLESTORE_SESSION_TOKEN");
        // Build V4 signature
        DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, securityToken);
        V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
        CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
        // Initialize Tablestore client
        TimeseriesClient client = new TimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
        /*
        // Customize ClientConfiguration if needed. Examples:
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        clientConfiguration.setConnectionTimeoutInMillisecond(5000); // Connection timeout in milliseconds
        clientConfiguration.setSocketTimeoutInMillisecond(5000); // Socket timeout in milliseconds
        clientConfiguration.setRetryStrategy(new AlwaysRetryStrategy()); // Retry strategy; default used if not set
        TimeseriesClient client = new TimeseriesClient(endpoint, provider, instanceName, clientConfiguration, new ResourceManager(null, null));
         */
        // List and print time series table names
        ListTimeseriesTableResponse listTimeseriesTableResponse = client.listTimeseriesTable();
        listTimeseriesTableResponse.getTimeseriesTableNames().forEach(System.out::println);
        // Shut down Tablestore client
        client.shutdown();
    }
}

Firma V2

El siguiente código de ejemplo en Java inicializa un cliente mediante la firma V2 y lista todos los nombres de tabla de series de tiempo en la instancia.

import com.alicloud.openservices.tablestore.ClientConfiguration;
import com.alicloud.openservices.tablestore.TimeseriesClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.AlwaysRetryStrategy;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;
public class InitTimeseriesClientV2 {
    public static void main(String[] args) {
        // Replace yourInstanceName with your instance name
        final String instanceName = "yourInstanceName";
        // Replace yourEndpoint with your instance endpoint
        final String endpoint = "yourEndpoint";
        // Get STS credentials from environment variables
        final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
        final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
        final String securityToken = System.getenv("TABLESTORE_SESSION_TOKEN");
        // Build V2 signature
        DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret, securityToken);
        CredentialsProvider provider = new DefaultCredentialProvider(credentials);
        // Initialize Tablestore client
        TimeseriesClient client = new TimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
        /*
        // Customize ClientConfiguration if needed. Examples:
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        clientConfiguration.setConnectionTimeoutInMillisecond(5000); // Connection timeout in milliseconds
        clientConfiguration.setSocketTimeoutInMillisecond(5000); // Socket timeout in milliseconds
        clientConfiguration.setRetryStrategy(new AlwaysRetryStrategy()); // Retry strategy; default used if not set
        TimeseriesClient client = new TimeseriesClient(endpoint, provider, instanceName, clientConfiguration, new ResourceManager(null, null));
         */
        // List and print time series table names
        ListTimeseriesTableResponse listTimeseriesTableResponse = client.listTimeseriesTable();
        listTimeseriesTableResponse.getTimeseriesTableNames().forEach(System.out::println);
        // Shut down Tablestore client
        client.shutdown();
    }
}

Go

El siguiente código de ejemplo en Go inicializa un cliente y lista todos los nombres de tabla de series de tiempo en la instancia.

package main
import (
    "fmt"
    "os"
    "github.com/aliyun/aliyun-tablestore-go-sdk/tablestore"
)
func main() {
    // Replace yourInstanceName with your instance name
    instanceName := "yourInstanceName"
    // Replace yourEndpoint with your instance endpoint
    endpoint := "yourEndpoint"
    // Get STS credentials from environment variables
    accessKeyId := os.Getenv("TABLESTORE_ACCESS_KEY_ID")
    accessKeySecret := os.Getenv("TABLESTORE_ACCESS_KEY_SECRET")
    securityToken := os.Getenv("TABLESTORE_SESSION_TOKEN")
    // Initialize Tablestore client
    client := tablestore.NewTimeseriesClientWithConfig(endpoint, instanceName, accessKeyId, accessKeySecret, securityToken, nil, nil)    
    // List and print time series table names
    timeseriesTables, err := client.ListTimeseriesTable()
    if err != nil {
        fmt.Println("Failed to list table.")
    } else {
        for _, timeseriesTablesMeta := range (timeseriesTables.GetTimeseriesTableMeta()) {
            fmt.Println(timeseriesTablesMeta.GetTimeseriesTableName())
        }
    }
}

Python

El siguiente código de ejemplo en Python inicializa un cliente y lista todos los nombres de tabla de series de tiempo en la instancia.

# -*- coding: utf-8 -*-
import os
from tablestore import OTSClient
# Replace yourInstanceName with your instance name
instance_name = "yourInstanceName"
# Replace yourEndpoint with your instance endpoint
endpoint = "yourEndpoint"
# Get STS credentials from environment variables
access_key_id = os.getenv("TABLESTORE_ACCESS_KEY_ID")
access_key_secret = os.getenv("TABLESTORE_ACCESS_KEY_SECRET")
sts_token = os.getenv("TABLESTORE_SESSION_TOKEN")
# Initialize Tablestore client
client = OTSClient(endpoint, access_key_id, access_key_secret, instance_name, sts_token=sts_token)
# List and print time series table names
response = client.list_timeseries_table()
for tableMeta in response:
    print(tableMeta.timeseries_table_name)

Preguntas frecuentes

P: ¿Cómo resuelvo el error **You are not authorized to do this action. You should be authorized by RAM.**?

Cuando utiliza un usuario de RAM para asumir un rol de RAM y obtener credenciales temporales, debe usar el par de AccessKey del usuario de RAM (AccessKey ID y AccessKey secret). No utilice el par de AccessKey de la cuenta de Alibaba Cloud.

P: ¿Cómo resuelvo el error **The Min/Max value of DurationSeconds is 15min/1hr.**?

Este error ocurre cuando el periodo de validez de la credencial temporal excede el rango permitido. Siga estas reglas:

  • Si no ha personalizado la duración máxima de sesión del rol, el valor predeterminado es de 3600 segundos. En este caso, el valor mínimo para durationSeconds es de 900 segundos y el máximo es de 3600 segundos.

  • Si ha personalizado la duración máxima de sesión del rol, el valor mínimo para durationSeconds es de 900 segundos y el máximo equivale a la duración máxima de sesión del rol. La duración máxima de sesión del rol se puede establecer entre 3600 y 43200 segundos.

Puede consultar la duración máxima de sesión del rol en la consola de RAM.

P: ¿Cómo resuelvo el error **The security token you provided is invalid.**?

Asegúrese de introducir el SecurityToken completo y compruebe que sus variables de entorno estén configuradas correctamente.

P: ¿Puedo obtener varias credenciales temporales al mismo tiempo?

Sí. Cada solicitud devuelve una credencial temporal. Para obtener varias credenciales, envíe múltiples solicitudes. Puede utilizar todas las credenciales obtenidas simultáneamente durante sus periodos de validez.

P: ¿Qué debo hacer si obtengo una excepción **Request denied by instance ACL policies** al usar el SDK para acceder a Tablestore?

El tipo de red que utiliza su cliente no cumple con los requisitos de acceso a la red de la instancia. En la página de Instance Management de la consola de Tablestore, vaya a la pestaña Network Management y configure Allowed Network Types. Para más información, consulte Handle "Request denied by instance ACL policies" exceptions when using the SDK to access Tablestore.