Les tokens STS permettent d'accorder un accès temporaire à ApsaraVideo VOD sans exposer la paire d'AccessKey d'un utilisateur RAM. Pour obtenir un token STS, créez un utilisateur RAM et un rôle RAM, attribuez-leur les permissions requises, puis appelez l'opération AssumeRole avec la paire d'AccessKey de l'utilisateur RAM pour endosser ce rôle.
Étape 1 : Créer un utilisateur RAM
Créer un utilisateur RAM en tenant compte des points suivants :
Définissez le paramètre Logon Name sur vod. Cette rubrique utilise vod comme nom de connexion dans tous les exemples ci-après.
Configurez le paramètre Access Mode sur Using permanent AccessKey to access.
Conservez la paire d'AccessKey obtenue en lieu sûr.
Étape 2 : Accorder à l'utilisateur RAM les permissions pour appeler l'opération AssumeRole de STS
Dans la console RAM, accédez à la page Users. Localisez l'utilisateur RAM nommé vod et cliquez sur Add Permissions dans la colonne Actions.
-
Dans le panneau Grant Permission, attribuez des permissions à l'utilisateur RAM.
RemarqueAttachez la politique AliyunSTSAssumeRoleAccess à l'utilisateur vod. Cette politique autorise l'utilisateur à appeler l'opération AssumeRole de STS. Pour la trouver, sélectionnez System Policy et saisissez
AliyunSTSAssumeRoleAccessdans le champ de recherche.-
Sélectionnez le Resource Scope :
Account level : La permission s'applique au compte Alibaba Cloud actuel.
-
Resource group level : La permission s'applique à un groupe de ressources spécifique. Si vous accordez des permissions au niveau du groupe de ressources à un utilisateur RAM, celui-ci doit basculer le périmètre des ressources vers ce groupe dans la barre de navigation supérieure après sa connexion à la console. Il pourra alors accéder aux ressources de ce groupe et les gérer.
RemarqueLe système signale automatiquement les politiques système à haut risque telles que AdministratorAccess et AliyunRAMFullAccess. Ces politiques accordent souvent un contrôle total sur toutes les ressources cloud ou une gestion complète de Resource Access Management (RAM). Accordez-les avec prudence.
Pour un exemple d'autorisation par groupe de ressources, consultez Utiliser un groupe de ressources pour restreindre un utilisateur RAM à la gestion d'instances ECS spécifiques.
-
Sélectionnez le principal :
Le principal correspond à l'utilisateur RAM qui reçoit les permissions. Si vous commencez depuis la page Users, le système sélectionne automatiquement l'utilisateur RAM actuel. Si vous démarrez depuis la page Grant Permission, sélectionnez manuellement un ou plusieurs utilisateurs RAM.
-
Choisissez la Permission Policy :
System policy : Recherchez et sélectionnez directement. Astuces de recherche : Utilisez le champ de recherche pour localiser rapidement les politiques. Vous pouvez rechercher par nom de produit (comme
ECSouOSS), par niveau de permission (tel queReadOnlyouFullAccess), ou par nom complet de la politique.Custom policy : Créez d'abord une politique personnalisée. Pour plus d'informations, consultez Créer une politique personnalisée.
Cliquez sur Confirm Grant Permission.
-
Vérifiez le résultat de l'autorisation et cliquez sur Close.
Étape 3 : Créer un rôle RAM
À l'étape 5 ci-dessous, définissez le paramètre Role Name sur vodrole. Cette rubrique utilise vodrole comme nom de rôle dans tous les exemples ci-après.
Connectez-vous à la console RAM en tant qu'administrateur RAM.
Dans le volet de navigation de gauche, choisissez .
Sur la page Roles, cliquez sur Create Role.
-
Sur la page Create Role, définissez Principal Type sur Cloud Account, spécifiez les détails du compte Alibaba Cloud, puis cliquez sur OK.
Current Account : Sélectionnez cette option pour autoriser tous les utilisateurs RAM et rôles RAM du compte Alibaba Cloud actuel à endosser le rôle. Choisissez Current Account.
Other Account : Sélectionnez cette option pour permettre à tous les utilisateurs RAM et rôles RAM d'un autre compte Alibaba Cloud d'endosser le rôle. Choisissez Other Account puis saisissez l'ID de l'autre compte Alibaba Cloud (compte principal). Cette configuration sert principalement à l'accès aux ressources entre comptes. Pour plus d'informations, consultez Accéder aux ressources entre comptes Alibaba Cloud.Vous trouverez l'ID de votre compte Alibaba Cloud (compte principal) sur la page Security Settings.
-
(Facultatif) Pour restreindre le rôle à des utilisateurs RAM ou des rôles RAM spécifiques, cliquez sur Switch to Policy Editor afin de modifier la politique de confiance.
L'éditeur propose deux modes : Visual Editor et JSON Editor. Dans l'exemple suivant, seul l'utilisateur RAM
Alicedu compte Alibaba Cloud actuel (AccountID=1000719) peut endosser le rôle RAM.-
Visual Editor
Dans la section Principal, ajoutez l'utilisateur RAM.
Cliquez sur le lien Edit à côté de Cloud Account et saisissez l'ID du compte de confiance.
Dans la boîte de dialogue Add Principal, sélectionnez Current Account pour Cloud Account et RAM user pour Identity Type. Saisissez le nom d'utilisateur cible, par exemple Alice, dans le champ User Name, puis cliquez sur OK.
-
JSON Editor
Dans le champ
RAMde l'objetPrincipal, saisissez l'ARN complet de l'utilisateur RAM.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Principal": { "RAM": "acs:ram::100******0719:user/Alice" }, "Action": "sts:AssumeRole" } ] }
-
Dans la boîte de dialogue Create Role, saisissez un Role Name, puis cliquez sur OK.
Étape 4 : Accorder au rôle RAM les permissions pour gérer ApsaraVideo VOD
Dans la console RAM, accédez à la page Roles. Localisez le rôle RAM nommé vodrole et cliquez sur Grant Permission dans la colonne Actions.
-
Dans le panneau Grant Permission, attribuez des permissions au rôle RAM.
RemarquePour réduire les risques, appliquez le principe du moindre privilège.
Si vodrole doit accéder aux ressources ApsaraVideo VOD et les gérer, attachez la politique système AliyunVODFullAccess au rôle. Cette politique accorde un accès complet à toutes les ressources ApsaraVideo VOD. Pour la trouver, sélectionnez System Policy et saisissez
AliyunVODFullAccessdans le champ de recherche. Pour plus d'informations sur les politiques système d'ApsaraVideo VOD et leurs permissions, consultez Politiques système.
-
Sélectionnez le Resource Scope :
Account level : La permission s'applique au compte Alibaba Cloud actuel.
-
Resource group level : La permission s'applique à un groupe de ressources spécifique. Si vous accordez des permissions au niveau du groupe de ressources à un utilisateur RAM, celui-ci doit basculer le périmètre des ressources vers ce groupe dans la barre de navigation supérieure après sa connexion à la console. Il pourra alors accéder aux ressources de ce groupe et les gérer.
RemarqueLe système signale automatiquement les politiques système à haut risque telles que AdministratorAccess et AliyunRAMFullAccess. Ces politiques accordent souvent un contrôle total sur toutes les ressources cloud ou une gestion complète de Resource Access Management (RAM). Accordez-les avec prudence.
Pour un exemple d'autorisation par groupe de ressources, consultez Utiliser un groupe de ressources pour restreindre un utilisateur RAM à la gestion d'instances ECS spécifiques.
-
Sélectionnez le principal :
Le principal correspond à l'utilisateur RAM qui reçoit les permissions. Si vous commencez depuis la page Users, le système sélectionne automatiquement l'utilisateur RAM actuel. Si vous démarrez depuis la page Grant Permission, sélectionnez manuellement un ou plusieurs utilisateurs RAM.
-
Choisissez la Permission Policy :
System policy : Recherchez et sélectionnez directement. Astuces de recherche : Utilisez le champ de recherche pour localiser rapidement les politiques. Vous pouvez rechercher par nom de produit (comme
ECSouOSS), par niveau de permission (tel queReadOnlyouFullAccess), ou par nom complet de la politique.Custom policy : Créez d'abord une politique personnalisée. Pour plus d'informations, consultez Créer une politique personnalisée.
Cliquez sur Confirm Grant Permission.
Une fois l'autorisation terminée, un message de succès s'affiche.
Vérifiez le résultat de l'autorisation et cliquez sur Close.
Étape 5 : Endosser le rôle RAM et obtenir un token STS
Appelez l'opération STS AssumeRole – Obtenir des identifiants temporaires pour endosser un rôle en tant qu'utilisateur RAM. Le token STS retourné permet d'appeler des opérations d'API ApsaraVideo VOD ou d'être distribué aux clients pour des tâches telles que les uploads directs. L'exemple Java SDK suivant illustre ce processus. Pour d'autres langages, consultez Présentation des SDK STS.
SDK V1.0
Dans Maven, ajoutez les dépendances suivantes :
<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
Dans Maven, ajoutez les dépendances suivantes :
<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);
}
}