Tous les produits
Search
Centre de documentation

Object Storage Service:Utiliser la paire AccessKey d'un utilisateur RAM pour accéder aux ressources OSS

Dernière mise à jour :Aug 20, 2026

L'utilisation d'une paire AccessKey associée à un utilisateur RAM (Resource Access Management) pour accéder à OSS est plus sécurisée que l'emploi des identifiants de votre compte racine Alibaba Cloud, car vous pouvez accorder à l'utilisateur RAM uniquement les autorisations dont il a besoin.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un compte Alibaba Cloud disposant d'un accès administrateur RAM

  • Un bucket OSS vers lequel envoyer des objets

Étape 1 : Créer un utilisateur RAM

  1. Connectez-vous à la console RAM avec votre compte Alibaba Cloud ou en tant qu'administrateur RAM.

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

  3. Sur la page Users, cliquez sur Create User.

  4. Dans la section User Account Information, configurez les champs suivants :

    Remarque

    Pour créer plusieurs utilisateurs RAM simultanément, cliquez sur Add User.

    Champ Description
    Logon Name Jusqu'à 64 caractères. Peut contenir des lettres, des chiffres, des points (.), des traits d'union (-) et des underscores (_).
    Display Name Jusqu'à 128 caractères.
    Tag Cliquez sur l'icône de modification et saisissez une clé de tag ainsi qu'une valeur de tag. Les tags vous aident à catégoriser et gérer les utilisateurs RAM.
  5. Dans la section Access Mode, sélectionnez Using permanent AccessKey to access, puis cliquez sur OK.

  6. Cliquez sur Copy pour enregistrer la paire AccessKey.

    Important

    Le secret AccessKey n'est affiché qu'au moment de la création initiale de la paire. Il ne peut pas être récupéré ultérieurement. Copiez dès maintenant l'ID AccessKey et le secret AccessKey dans un emplacement sécurisé. Si vous perdez le secret, vous devrez créer une nouvelle paire AccessKey.

Étape 2 : Accorder à l'utilisateur RAM l'autorisation d'envoyer des objets

Créer une stratégie personnalisée

  1. Dans le volet de navigation de gauche, sélectionnez Permissions > Policies.

  2. Sur la page Policies, cliquez sur Create Policy.

  3. Sur la page Create Policy, cliquez sur l'onglet JSON et saisissez le document de stratégie suivant. Cet exemple accorde l'autorisation oss:PutObject au répertoire exampledir du bucket examplebucket.

    Avertissement

    Cet exemple est fourni à titre indicatif. Configurez des stratégies RAM granulaires en fonction de vos besoins réels afin d'éviter d'accorder des permissions excessives. Pour plus de détails, consultez Exemple 9 : Utiliser RAM ou STS pour autoriser les utilisateurs à accéder aux ressources OSS.

       {
         "Version": "1",
         "Statement": [
           {
             "Effect": "Allow",
             "Action": "oss:PutObject",
             "Resource": "acs:oss:*:*:examplebucket/exampledir/*"
           }
         ]
       }
  4. Cliquez sur OK.

  5. Définissez le champ Policy Name sur RamTestPolicy, puis cliquez sur OK.

Attacher la stratégie à l'utilisateur RAM

  1. Dans le volet de navigation de gauche, sélectionnez Identities > Users.

  2. Sur la page Users, localisez l'utilisateur RAM et cliquez sur Add Permissions dans la colonne Actions.

  3. Dans le panneau Grant Permission, cliquez sur l'onglet Custom Policy, sélectionnez RamTestPolicy, puis cliquez sur OK.

Étape 3 : Envoyer un objet en utilisant la paire AccessKey de l'utilisateur RAM

L'exemple suivant envoie un fichier local (examplefile.txt) vers exampledir/exampleobject.txt dans le bucket examplebucket, en utilisant le SDK Java avec la version 4 de la signature.

Définir les variables d'environnement

Définissez la paire AccessKey comme variables d'environnement afin que le SDK charge les identifiants sans les coder en dur dans votre code.

Linux/macOS :

export OSS_ACCESS_KEY_ID=<your-accesskey-id>
export OSS_ACCESS_KEY_SECRET=<your-accesskey-secret>

Windows (Invite de commandes) :

setx OSS_ACCESS_KEY_ID "<your-accesskey-id>"
setx OSS_ACCESS_KEY_SECRET "<your-accesskey-secret>"

Remplacez <your-accesskey-id> et <your-accesskey-secret> par les valeurs que vous avez copiées à l'étape 1.

Envoyer un objet

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.File;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint for the China (Hangzhou) region. Replace with your actual endpoint.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Load credentials from the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Bucket name.
        String bucketName = "examplebucket";
        // Full object path in the bucket. Do not include the bucket name.
        String objectName = "exampledir/exampleobject.txt";
        // Full path to the local file to upload.
        String filePath = "D:\\localpath\\examplefile.txt";
        // Region where the bucket is located.
        String region = "cn-hangzhou";

        // Create an OSSClient instance with Signature Version 4.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
            .endpoint(endpoint)
            .credentialsProvider(credentialsProvider)
            .clientConfiguration(clientBuilderConfiguration)
            .region(region)
            .build();

        try {
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
            PutObjectResult result = ossClient.putObject(putObjectRequest);
        } catch (OSSException oe) {
            System.out.println("OSS rejected the request: " + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Client error (e.g., network issue): " + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Pour des exemples dans d'autres langages, consultez :

FAQ

Où puis-je consulter mon ID AccessKey ? Puis-je récupérer le secret AccessKey ultérieurement ?

Pour afficher l'ID AccessKey d'un utilisateur RAM, consultez Afficher les informations relatives aux paires AccessKey d'un utilisateur RAM.

Le secret AccessKey n'est affiché qu'une seule fois, lors de la création initiale de la paire. Si vous le perdez, accédez à la console RAM et créez une nouvelle paire AccessKey. Consultez Créer une paire AccessKey.

J'obtiens une erreur AccessDenied lors de l'envoi. Que dois-je vérifier ?

L'erreur AccessDenied signifie généralement que la paire AccessKey est incorrecte ou que l'utilisateur RAM ne dispose pas de l'autorisation d'envoi.

  1. Vérifiez la paire AccessKey. Consultez Afficher les informations relatives aux paires AccessKey d'un utilisateur RAM. Si le secret est perdu, créez une nouvelle paire AccessKey dans la console RAM.

  2. Dans la console RAM, confirmez que l'utilisateur RAM dispose de l'autorisation oss:PutObject pour le bucket cible. Sinon, attachez la stratégie appropriée.

Comment identifier un type d'erreur spécifique ?

OSS met à disposition une référence des codes d'erreur pour vous aider à identifier les erreurs. Pour les erreurs liées à l'authentification, consultez 02-AUTH.

J'obtiens une erreur NoSuchBucket. Quel est le problème ?

Le nom du bucket dans votre code ne correspond à aucun bucket existant dans la région spécifiée. Vérifiez le nom du bucket et confirmez son existence.

J'obtiens l'erreur « The bucket you are attempting to access must be addressed using the specified endpoint. ». Quel est le problème ?

L'endpoint dans votre code ne correspond pas à la région où se trouve le bucket. Recherchez l'endpoint correct pour la région de votre bucket dans Régions et endpoints et mettez à jour votre code.

Étapes suivantes

Pour partager les objets envoyés avec des tiers sans exposer vos identifiants, générez des URL pré-signées permettant un accès temporaire. Consultez Télécharger un objet à l'aide d'une URL pré-signée.