Todos os produtos
Search
Central de documentação

ApsaraVideo VOD:Obter um token STS

Última atualização: Aug 13, 2026

Os tokens STS permitem conceder acesso temporário ao ApsaraVideo VOD sem expor o par de AccessKey de um usuário RAM. Para obter um token STS, crie um usuário RAM e uma função RAM, conceda as permissões necessárias a ambos e chame a operação AssumeRole com o par de AccessKey do usuário RAM para assumir a função.

Etapa 1: Crie um usuário RAM

Create a RAM user e observe o seguinte:

  1. Defina o parâmetro Logon Name como vod. Este tópico usa vod como nome de login em todos os exemplos subsequentes.

  2. Defina o parâmetro Access Mode como Using permanent AccessKey to access.

  3. Mantenha o par de AccessKey obtido em segurança.

Etapa 2: Conceder ao usuário RAM permissões para chamar a operação AssumeRole do STS

  1. No console RAM, acesse a página Users. Localize o usuário RAM chamado vod e clique em Add Permissions na coluna Actions.

  2. No painel Grant Permission, conceda permissões ao usuário RAM.

    Nota

    Anexe a política AliyunSTSAssumeRoleAccess ao usuário vod. Essa política permite que o usuário chame a operação AssumeRole do STS. Para encontrar a política, selecione System Policy e insira AliyunSTSAssumeRoleAccess na caixa de pesquisa.

    • Selecione o Resource Scope:

      • Account level: A permissão se aplica à conta Alibaba Cloud atual.

      • Resource group level: A permissão se aplica a um grupo de recursos específico. Ao conceder permissões no nível de grupo de recursos a um usuário RAM, ele deve alternar o escopo de recursos para esse grupo na barra de navegação superior após fazer login no console. Somente então o usuário poderá acessar e gerenciar recursos nesse grupo.

        Nota
        1. O sistema sinaliza automaticamente políticas de sistema de alto risco, como AdministratorAccess e AliyunRAMFullAccess. Essas políticas geralmente concedem controle total sobre todos os recursos da cloud ou gerenciamento completo do Resource Access Management (RAM). Conceda-as com cautela.

        2. Para ver um exemplo de autorização de grupo de recursos, consulte Use a resource group to restrict a RAM user to managing only specific ECS instances.

    • Selecione o principal:

      O principal é o usuário RAM que recebe as permissões. Se você iniciar pela página Users, o sistema selecionará o usuário RAM atual automaticamente. Caso inicie pela página Grant Permission, selecione um ou mais usuários RAM manualmente.

    • Selecione a Permission Policy:

      • System policy: Pesquise e selecione diretamente. Dicas de pesquisa: Use a caixa de pesquisa para localizar políticas rapidamente. É possível pesquisar por nome do product (como ECS ou OSS), nível de permissão (como ReadOnly ou FullAccess) ou pelo nome completo da política.

      • Custom policy: Crie primeiro uma política personalizada. Para mais informações, consulte Create a custom policy.

    • Clique em Confirm Grant Permission.

  3. Revise o resultado da autorização e clique em Close.

Etapa 3: Crie uma função RAM

Nota

Na Etapa 5 abaixo, defina o parâmetro Role Name como vodrole. Este tópico usa vodrole como nome da função em todos os exemplos subsequentes.

  1. Faça login no console RAM como administrador RAM.

  2. No painel de navegação à esquerda, escolha Identities > Roles.

  3. Na página Roles, clique em Create Role.

  4. Na página Create Role, defina Principal Type como Cloud Account, especifique os detalhes da conta Alibaba Cloud e clique em OK.

    • Current Account: Selecione esta opção para permitir que todos os usuários RAM e funções RAM da conta Alibaba Cloud atual assumam a função. Selecione Current Account.

    • Other Account: Escolha esta opção para permitir que todos os usuários RAM e funções RAM de outra conta Alibaba Cloud assumam a função. Selecione Other Account e insira o ID da outra conta Alibaba Cloud (conta principal). Esse recurso serve principalmente para acesso a recursos entre contas. Para mais informações, consulte Access resources across Alibaba Cloud accounts.Você pode encontrar o ID da sua conta Alibaba Cloud (conta principal) na página Security Settings.

  5. (Opcional) Para restringir a função a usuários RAM ou funções RAM específicos, clique em Switch to Policy Editor para modifique a política de confiança.

    O editor oferece dois modos: Visual Editor e JSON Editor. No exemplo a seguir, apenas o usuário RAM Alice da conta Alibaba Cloud atual (AccountID=1000719) pode assumir a função RAM.

    • Visual Editor

      Na seção Principal, adicione o usuário RAM.

      Clique no link Edit ao lado de Cloud Account e insira o ID da conta confiável.

      Na caixa de diálogo Add Principal, selecione Current Account para Cloud Account e RAM user para Identity Type. Insira o nome de usuário desejado, como Alice, no campo User Name e clique em OK.

    • JSON Editor

      No campo RAM do objeto Principal, insira o ARN completo do usuário RAM.

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "RAM": "acs:ram::100******0719:user/Alice"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
  6. Na caixa de diálogo Create Role, insira um Role Name e clique em OK.

Etapa 4: Conceder à função RAM permissões para gerencie o ApsaraVideo VOD

  1. No console RAM, acesse a página Roles. Localize a função RAM chamada vodrole e clique em Grant Permission na coluna Actions.

  2. No painel Grant Permission, conceda permissões à função RAM.

    Nota
    • Para reduzir riscos, aplique o princípio do menor privilégio.

    • Caso a função vodrole precise acessar e gerenciar recursos do ApsaraVideo VOD, anexe a política de sistema AliyunVODFullAccess à função. Essa política concede acesso total a todos os recursos do ApsaraVideo VOD. Para encontrá-la, selecione System Policy e insira AliyunVODFullAccess na caixa de pesquisa. Para mais informações sobre as políticas de sistema do ApsaraVideo VOD e suas permissões, consulte System policies.

    • Selecione o Resource Scope:

      • Account level: A permissão se aplica à conta Alibaba Cloud atual.

      • Resource group level: A permissão se aplica a um grupo de recursos específico. Ao conceder permissões no nível de grupo de recursos a um usuário RAM, ele deve alternar o escopo de recursos para esse grupo na barra de navegação superior após fazer login no console. Somente então o usuário poderá acessar e gerenciar recursos nesse grupo.

        Nota
        1. O sistema sinaliza automaticamente políticas de sistema de alto risco, como AdministratorAccess e AliyunRAMFullAccess. Essas políticas geralmente concedem controle total sobre todos os recursos da cloud ou gerenciamento completo do Resource Access Management (RAM). Conceda-as com cautela.

        2. Para ver um exemplo de autorização de grupo de recursos, consulte Use a resource group to restrict a RAM user to managing only specific ECS instances.

    • Selecione o principal:

      O principal é o usuário RAM que recebe as permissões. Se você iniciar pela página Users, o sistema selecionará o usuário RAM atual automaticamente. Caso inicie pela página Grant Permission, selecione um ou mais usuários RAM manualmente.

    • Selecione a Permission Policy:

      • System policy: Pesquise e selecione diretamente. Dicas de pesquisa: Use a caixa de pesquisa para localizar políticas rapidamente. É possível pesquisar por nome do product (como ECS ou OSS), nível de permissão (como ReadOnly ou FullAccess) ou pelo nome completo da política.

      • Custom policy: Crie primeiro uma política personalizada. Para mais informações, consulte Create a custom policy.

    • Clique em Confirm Grant Permission.

    Após a conclusão da autorização, um registro de sucesso será exibido.

  3. Revise o resultado da autorização e clique em Close.

Etapa 5: Assumir a função RAM e obter um token STS

Chame a operação AssumeRole – Obtain temporary credentials to assume a role do STS como o usuário RAM. Use o token STS retornado para chamar operações da API do ApsaraVideo VOD ou distribua-o a clientes para tarefas como uploads diretos. O exemplo de SDK Java a seguir demonstra o processo. Para outras linguagens, consulte STS SDK overview.

SDK V1.0

No Maven, adicione as seguintes dependências:

<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>aliyun-java-sdk-sts</artifactId>
   <version>3.1.2</version>
</dependency>
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.7.3</version>
</dependency>
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-vod</artifactId>
  <version>2.16.32</version>
</dependency>
package pop;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;

public class TestStsService {

    public static void main(String[] args) {
        // Get the AccessKey pair (AccessKey ID and AccessKey secret) for the RAM user created in Step 1 from environment variables.
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // Configure request parameters for the AssumeRole operation: RoleArn, RoleSessionName, Policy, and DurationSeconds.
        // Get the RoleArn value from the RAM console based on Step 3.
        String roleArn = "<role-arn>";
        // Set a custom value for RoleSessionName. RoleSessionName specifies the name of the role session.
        String roleSessionName = "session-name";
        // Customize the policy.
        String policy = "{\n" +
                "  \"Version\": \"1\",\n" +
                "  \"Statement\": [\n" +
                "    {\n" +
                "      \"Action\": \"vod:*\",\n" +
                "      \"Resource\": \"*\",\n" +
                "      \"Effect\": \"Allow\"\n" +
                "    }\n" +
                "  ]\n" +
                "}";
        try {
            AssumeRoleResponse response = assumeRole(accessKeyId, accessKeySecret, roleArn, roleSessionName, policy);
            System.out.println("Expiration: " + response.getCredentials().getExpiration());
            System.out.println("Access Key Id: " + response.getCredentials().getAccessKeyId());
            System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret());
            System.out.println("Security Token: " + response.getCredentials().getSecurityToken());
            System.out.println("RequestId: " + response.getRequestId());

        } catch (ClientException e) {
            System.out.println("Failed to get a token.");
            System.out.println("Error code: " + e.getErrCode());
            System.out.println("Error message: " + e.getErrMsg());
        }
    }

    static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, String roleArn, String roleSessionName, String policy) throws ClientException {
        try {
            // Build a default profile. Leave the regionId parameter empty.
            /*
            Note: If you set SysEndpoint to sts.aliyuncs.com, the regionId parameter is optional. Otherwise, you must set regionId to the service region. Example: cn-shanghai.
            For more information, see the endpoint for each STS region.
             */
            IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);
            // Build a client using the profile.
            DefaultAcsClient client = new DefaultAcsClient(profile);
            // Create an AssumeRoleRequest and configure the request parameters.
            final AssumeRoleRequest request = new AssumeRoleRequest();
            request.setSysEndpoint("sts.aliyuncs.com");
            request.setSysMethod(MethodType.POST);
            request.setRoleArn(roleArn);
            request.setRoleSessionName(roleSessionName);
            request.setPolicy(policy);
            // Send the request and get the response.
            final AssumeRoleResponse response = client.getAcsResponse(request);
            return response;
        } catch (ClientException e) {
            throw e;
        }
    }
}

SDK V2.0

No Maven, adicione as seguintes dependências:

<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>sts20150401</artifactId>
   <version>1.1.7</version>
</dependency>
<dependency>
   <groupId>com.aliyun</groupId>
   <artifactId>vod20170321</artifactId>
   <version>3.6.4</version>
</dependency>
import com.aliyun.sts20150401.Client;
import com.aliyun.sts20150401.models.AssumeRoleRequest;
import com.aliyun.sts20150401.models.AssumeRoleResponse;
import com.aliyun.sts20150401.models.AssumeRoleResponseBody;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;

public class TestStsService {
    public static void main(String[] args) {
        // Get the AccessKey pair (AccessKey ID and AccessKey secret) for the RAM user created in Step 1 from environment variables.
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // Configure request parameters for the AssumeRole operation: RoleArn, RoleSessionName, Policy, and DurationSeconds.
        // Get the RoleArn value from the RAM console based on Step 3.
        String roleArn = "<role-arn>";
        // Set a custom value for RoleSessionName.
        String roleSessionName = "session-name";
        // Customize the policy.
        String policy = "{\n" +
                "  \"Version\": \"1\",\n" +
                "  \"Statement\": [\n" +
                "    {\n" +
                "      \"Action\": \"vod:*\",\n" +
                "      \"Resource\": \"*\",\n" +
                "      \"Effect\": \"Allow\"\n" +
                "    }\n" +
                "  ]\n" +
                "}";
        try {
            AssumeRoleResponse assumeRoleResponse = assumeRole(accessKeyId, accessKeySecret, roleArn, roleSessionName, policy);
            System.out.println("Expiration: " + response.getCredentials().getExpiration());
            System.out.println("Access Key Id: " + response.getCredentials().getAccessKeyId());
            System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret());
            System.out.println("Security Token: " + response.getCredentials().getSecurityToken());
            System.out.println("RequestId: " + response.getRequestId());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, String roleArn, String roleSessionName, String policy) throws Exception {
        Config config = new Config()
                // Get the AccessKey ID from the environment variable.
                .setAccessKeyId(accessKeyId)
                // Get the AccessKey secret from the environment variable.
                .setAccessKeySecret(accessKeySecret);
        config.endpoint = "sts.cn-hangzhou.aliyuncs.com";
        Client client = new Client(config);
        AssumeRoleRequest assumeRoleRequest = new AssumeRoleRequest()
                .setRoleArn(roleArn)
                .setRoleSessionName(roleSessionName)
                .setPolicy(policy);
        RuntimeOptions runtime = new RuntimeOptions();
        return client.assumeRoleWithOptions(assumeRoleRequest, runtime);
    }
}