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:
Defina o parâmetro Logon Name como vod. Este tópico usa vod como nome de login em todos os exemplos subsequentes.
Defina o parâmetro Access Mode como Using permanent AccessKey to access.
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
No console RAM, acesse a página Users. Localize o usuário RAM chamado vod e clique em Add Permissions na coluna Actions.
-
No painel Grant Permission, conceda permissões ao usuário RAM.
NotaAnexe 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
AliyunSTSAssumeRoleAccessna 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.
NotaO 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.
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
ECSouOSS), nível de permissão (comoReadOnlyouFullAccess) 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.
-
Revise o resultado da autorização e clique em Close.
Etapa 3: Crie uma função RAM
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.
Faça login no console RAM como administrador RAM.
No painel de navegação à esquerda, escolha .
Na página Roles, clique em Create Role.
-
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.
-
(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
Aliceda 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
RAMdo objetoPrincipal, insira o ARN completo do usuário RAM.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Principal": { "RAM": "acs:ram::100******0719:user/Alice" }, "Action": "sts:AssumeRole" } ] }
-
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
No console RAM, acesse a página Roles. Localize a função RAM chamada vodrole e clique em Grant Permission na coluna Actions.
-
No painel Grant Permission, conceda permissões à função RAM.
NotaPara 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
AliyunVODFullAccessna 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.
NotaO 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.
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
ECSouOSS), nível de permissão (comoReadOnlyouFullAccess) 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.
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);
}
}