Tous les produits
Search
Centre de documentation

Key Management Service:Utiliser un rôle RAM d'instance pour accéder à KMS

Dernière mise à jour :Aug 25, 2026

Un rôle RAM d'instance permet à une instance ECS d'endosser un rôle doté d'autorisations spécifiques. Si votre application auto-gérée est déployée sur une instance Alibaba Cloud ECS, vous pouvez utiliser un rôle RAM d'instance pour accéder à KMS sans coder en dur les identifiants d'accès. Cette rubrique explique comment utiliser un rôle RAM d'instance pour accéder à KMS.

Périmètre

  • Alibaba Cloud SDK : utilisé pour effectuer des opérations sur le plan de contrôle.

  • Credentials SDK : inclut le client Secrets Manager, le client JDBC Secrets Manager et le plug-in de secret RAM. Utilisé pour récupérer les valeurs des secrets.

Prérequis

  • L'instance ECS se trouve dans un VPC.

  • Un seul rôle RAM peut être associé à une instance ECS à la fois.

  • Si vous êtes un utilisateur RAM, demandez les autorisations requises à l'administrateur de votre compte Alibaba Cloud pour configurer les rôles RAM. Pour plus d'informations, consultez la section rôles RAM d'instance.

Étape 1 : Créer un rôle RAM et accorder des autorisations

Console RAM

  1. Créez un rôle RAM et définissez son entité de confiance sur un service Alibaba Cloud.

    1. Connectez-vous à la console RAM.

    2. Dans le volet de navigation de gauche, sélectionnez Identities > Roles.

    3. Sur la page Roles, cliquez sur Create Role et suivez les instructions affichées à l'écran. Configurez les paramètres suivants et ajustez les autres selon vos besoins.

      • Nom du rôle : cette rubrique utilise EcsRamRoleTest à titre d'exemple.

      • Type d'entité de confiance : sélectionnez Alibaba Cloud Service.

      • Sélectionner le service de confiance : sélectionnez ECS.

  2. Accordez au rôle RAM les autorisations nécessaires pour accéder à KMS.

    Par défaut, un nouveau rôle RAM ne dispose d'aucune autorisation. Vous devez lui en attribuer.

    1. Sur la page Identities > Roles, cliquez sur Attach Policy dans la colonne Actions correspondant au rôle RAM cible.

    2. Dans le panneau Attach Policy, sélectionnez System Policy, recherchez et sélectionnez AliyunKMSFullAccess, puis cliquez sur OK.

API RAM

  1. Créez un rôle RAM et définissez son entité de confiance sur un service Alibaba Cloud.

    Appelez l'opération d'API CreateRole de RAM avec les paramètres suivants :

    • RoleName : saisissez un nom pour le rôle RAM. Cette rubrique utilise EcsRamRoleTest à titre d'exemple.

    • AssumeRolePolicyDocument : utilisez le document de stratégie suivant pour autoriser ECS à endosser ce rôle.

      {
          "Statement": [
              {
                  "Action": "sts:AssumeRole", 
                  "Effect": "Allow", 
                  "Principal": {
                      "Service": [
                          "ecs.aliyuncs.com"
                      ]
                  }
              }
          ], 
          "Version": "1"
      }
  2. Accordez au rôle RAM les autorisations nécessaires pour accéder à KMS.

    Appelez l'opération d'API AttachPolicyToRole de RAM pour attacher la stratégie système AliyunKMSFullAccess au rôle RAM d'instance EcsRamRoleTest. Définissez les paramètres suivants :

    • PolicyType : définissez sur System pour indiquer qu'il s'agit d'une stratégie système.

    • PolicyName : définissez sur AliyunKMSFullAccess.

    • RoleName : définissez sur le nom du rôle RAM, par exemple EcsRamRoleTest.

Étape 2 : Associer le rôle RAM à une instance ECS

Console ECS

Remarque

Si vous n'avez pas encore acheté d'instance ECS, commencez par en acheter une. Pour plus d'informations, consultez la section Créer une instance dans l'onglet de lancement personnalisé.

  1. Connectez-vous à la console ECS.

  2. Dans le volet de navigation de gauche, sélectionnez Instances & Images> Instances.

  3. Dans la barre de navigation supérieure, sélectionnez la région et le groupe de ressources où se trouve votre instance ECS.

  4. Repérez l'instance ECS cible et, dans la colonne Actions, sélectionnez 图标>Instance Settings>Attach/Detach RAM Role.

  5. Dans la boîte de dialogue qui s'affiche, sélectionnez le rôle RAM que vous avez créé et cliquez sur OK.

API ECS

  • Associer un rôle RAM d'instance à une instance ECS existante

    Appelez l'opération d'API AttachInstanceRamRole d'ECS pour associer un rôle RAM d'instance à une instance ECS existante dans un VPC. Définissez les paramètres suivants :

    • RegionId : ID de la région où se trouve l'instance.

    • RamRoleName : nom du rôle RAM, par exemple EcsRamRoleTest.

    • InstanceIds : ID de l'instance ECS, par exemple ["i-bXXXXXXXX"].

  • Spécifier un rôle RAM d'instance lors de la création d'une instance ECS

    1. Créez une instance.

      Appelez l'opération d'API CreateInstance d'ECS. Définissez les paramètres suivants :

      • RegionId : ID de la région où se trouve l'instance.

      • ImageId : ID de l'image pour l'instance. Exemple : centos_7_03_64_40G_alibase_****.vhd.

      • InstanceType : type d'instance. Exemple : ecs.g6.large.

      • VSwitchId : ID du vSwitch dans le VPC où réside l'instance.

        Remarque

        Les rôles RAM d'instance sont pris en charge uniquement pour les instances ECS dans un VPC. Ce paramètre est obligatoire.

      • RamRoleName : nom du rôle RAM d'instance, par exemple EcsRamRoleTest.

      Vous pouvez également autoriser un utilisateur RAM à utiliser un rôle RAM d'instance. Pour plus d'informations, consultez la section rôles RAM d'instance.

    2. Appelez les opérations d'API ModifyInstanceVncPasswd et StartInstance d'ECS pour définir un mot de passe pour l'instance et la démarrer.

Étape 3 : Accéder à KMS avec le rôle RAM

Cette section fournit un exemple en Java montrant comment appeler l'opération d'API KMS ListKeys pour répertorier tous les ID de clé dans la région actuelle. Pour obtenir des conseils plus détaillés sur le SDK, consultez la section Référence du SDK.

Alibaba Cloud SDK V2.0

package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    public static com.aliyun.kms20160120.Client createClient() throws Exception {
        com.aliyun.credentials.models.Config credentialConfig = new com.aliyun.credentials.models.Config();
        // Set the credential type.
        credentialConfig.type = "ecs_ram_role";
        // Optional. To reduce API calls, specify the instance RAM role name. If this parameter is omitted, the role name is retrieved automatically.
        credentialConfig.roleName = "<your-ecsRamRoleName>";
        com.aliyun.credentials.Client credentialClient = new com.aliyun.credentials.Client(credentialConfig);

        com.aliyun.teaopenapi.models.Config kmsClientConfig = new com.aliyun.teaopenapi.models.Config()
        // Set the KMS endpoint. Example: kms.cn-hangzhou.aliyuncs.com
        .setEndpoint( "kms.cn-hangzhou.aliyuncs.com").
                setCredential(credentialClient);
        return new com.aliyun.kms20160120.Client(kmsClientConfig);

    }

    public static void main(String[] args_) throws Exception {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.kms20160120.Client client = Sample.createClient();
        com.aliyun.kms20160120.models.ListKeysRequest listKeysRequest = new com.aliyun.kms20160120.models.ListKeysRequest();
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            client.listKeysWithOptions(listKeysRequest, runtime);
        } catch (TeaException error) {
            System.out.println(error.getMessage());
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            _error.printStackTrace();
        }        
    }
}

Corps de l'onglet

Secrets Manager Client

Pour plus d'informations, consultez la section Secrets Manager Client.

  1. Configurez les paramètres suivants dans le fichier secretsmanager.properties ou en tant que variables d'environnement système.

    Paramètre

    Valeur

    credentials_type

    Définissez sur ecs_ram_role.

    credentials_role_session_name

    Nom personnalisé pour la session de rôle, utilisé à des fins d'audit.

    cache_client_region_id

    Le format est [{"regionId":"<votre ID de région>"}]. Remplacez <your region id> par votre ID de région réel.

  2. Générez le client pour récupérer la valeur du secret.

    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClient;
    import com.aliyuncs.kms.secretsmanager.client.v2.SecretCacheClientBuilder;
    import com.aliyuncs.kms.secretsmanager.client.v2.exception.CacheSecretException;
    import com.aliyuncs.kms.secretsmanager.client.v2.model.SecretInfo;
    
    public class CacheClientEnvironmentSample {
    
        public static void main(String[] args) {
            try {
                SecretCacheClient client = SecretCacheClientBuilder.newClient();
                SecretInfo secretInfo = client.getSecretInfo("#secretName#");
                System.out.println(secretInfo);
            } catch (CacheSecretException e) {
                e.printStackTrace();
            }
        }
    }

Secrets Manager JDBC Client

Cette section utilise une connexion de base de données MySQL via JDBC à titre d'exemple. Pour plus d'informations, consultez la section Secrets Manager JDBC Client.

  1. Dans le code applicatif de votre projet, ajoutez un fichier de configuration nommé secretsmanager.properties.

    ## Type of access credentials
    credentials_type=ecs_ram_role
    ## Name of the ECS RAM role
    credentials_role_name=#credentials_role_name#
    ## Region of the associated KMS instance
    cache_client_region_id=[{"regionId":"#regionId#"}]
    ## Custom refresh interval. Unit: milliseconds. Default: 6 hours. Minimum: 5 minutes.
    refresh_secret_ttl=21600000
  2. Connectez-vous à la base de données MySQL via JDBC.

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    
    public class SecretManagerJDBCSample {
        public static void main(String[] args) throws Exception {
            // Load the Alibaba Cloud Secrets Manager JDBC driver com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver
            Class.forName("com.aliyun.kms.secretsmanager.MysqlSecretsManagerSimpleDriver");
            Connection connect = null;
            try {
                connect = DriverManager.getConnection("secrets-manager:mysql://<YOUR-MYSQL-IP>:<YOUR-MYSQL-PORT>/<YOUR-DATABASE-NAME>", "#your-mysql-secret-name#","");
            } catch(SQLException e) {
                e.printStackTrace();
            }
        }
    }

RAM secret plug-in

Pour plus d'informations, consultez la section RAM secret plug-in.

  1. Ajoutez le fichier de configuration managed_credentials_providers.properties au code d'exécution de votre projet.

    credentials_type=ecs_ram_role
    ## Name of the ECS RAM role
    credentials_role_name=#credentials_role_name#
    ## Region of the associated KMS instance
    cache_client_region_id=[{"regionId":"#regionId#"}]
  2. Obtenez un client Alibaba Cloud SDK for Java et appelez les services cloud.

    L'exemple suivant montre comment appeler l'opération DescribeInstanceStatus d'ECS :

    Remarque

    Avant d'exécuter l'exemple de code, ajoutez la dépendance aliyun-java-sdk-ecs à votre fichier pom.xml.

    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.ecs.model.v20140526.DescribeInstanceStatusRequest;
    import com.aliyuncs.ecs.model.v20140526.DescribeInstanceStatusResponse;
    import com.aliyun.kms.secretsmanager.plugin.sdkcore.ProxyAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    
    public class AliyunSdkProviderSample {
        public static void main(String[]args) {
            String secretName="******";
            /*
              If the application cannot read the default configuration file (managed_credentials_providers.properties) from the classpath or an executable JAR file, or if you need to use a custom configuration file name, you can call the following code to specify a custom configuration file. The file is read in the following order:
              1. If "your-config-name" is an absolute path, the file is read from that path.
              2. If "your-config-name" is only a file name, the file is read from the classpath first, and then from the executable JAR file.
            */
            //ConfigLoader.setConfigName("your-config-name");
            
            // 1. Obtain an IAcsClient by using aliyun-java-sdk-managed-credentials-provider.
            IAcsClient client = null;
            try {
                client = new ProxyAcsClient("<the regionId of ECS>", secretName);
            } catch (ClientException e) {
                 e.printStackTrace();
             }
            // 2. Call an ECS API operation to implement your business logic.
            DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest();
            DescribeInstanceStatusResponse response;
            try {
                 response = client.getAcsResponse(request);
            } catch (ServerException e) {
                 e.printStackTrace();
             } catch (ClientException e) {
                 e.printStackTrace();
             }
            // 3. Shut down the client to release resources used by the plug-in.
            client.shutdown();
        }
    }

Alibaba Cloud SDK V1.0 (Not Recommended)

package com.aliyuncs.kms.examples;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.auth.AlibabaCloudCredentialsProvider;
import com.aliyuncs.auth.InstanceProfileCredentialsProvider;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.kms.model.v20160120.*;
import com.aliyuncs.profile.DefaultProfile;

public class RamRoleTest {
    public static void main(final String[] args) throws Exception {
        String regionId = "<region-id>";
        DefaultProfile profile = DefaultProfile.getProfile(regionId);

        // Set the RAM role. This topic uses EcsRamRoleTest as an example.
        String roleName = "EcsRamRoleTest"; 

        // Create the credentials provider for the instance RAM role.
        AlibabaCloudCredentialsProvider provider = new InstanceProfileCredentialsProvider(roleName);

        IAcsClient client = new DefaultAcsClient(profile, provider);

        ListKeysRequest request = new ListKeysRequest();
      
        try {
            ListKeysResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }

    }
}

Références