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
Connectez-vous à la console RAM avec votre compte Alibaba Cloud ou en tant qu'administrateur RAM.
Dans le volet de navigation de gauche, sélectionnez Identities > Users.
Sur la page Users, cliquez sur Create User.
-
Dans la section User Account Information, configurez les champs suivants :
RemarquePour 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. Dans la section Access Mode, sélectionnez Using permanent AccessKey to access, puis cliquez sur OK.
-
Cliquez sur Copy pour enregistrer la paire AccessKey.
ImportantLe 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
Dans le volet de navigation de gauche, sélectionnez Permissions > Policies.
Sur la page Policies, cliquez sur Create Policy.
-
Sur la page Create Policy, cliquez sur l'onglet JSON et saisissez le document de stratégie suivant. Cet exemple accorde l'autorisation
oss:PutObjectau répertoireexampledirdu bucketexamplebucket.AvertissementCet 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/*" } ] } Cliquez sur OK.
Définissez le champ Policy Name sur
RamTestPolicy, puis cliquez sur OK.
Attacher la stratégie à l'utilisateur RAM
Dans le volet de navigation de gauche, sélectionnez Identities > Users.
Sur la page Users, localisez l'utilisateur RAM et cliquez sur Add Permissions dans la colonne Actions.
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 ?
J'obtiens une erreur AccessDenied lors de l'envoi. Que dois-je vérifier ?
Comment identifier un type d'erreur spécifique ?
J'obtiens une erreur NoSuchBucket. Quel est le problème ?
J'obtiens l'erreur « The bucket you are attempting to access must be addressed using the specified endpoint. ». Quel est le problème ?
É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.